📄 qm_prvfrm.pas
字号:
{*******************************************************}
{ }
{ QReportMaker 2.0 }
{ Preview Form }
{ }
{ Copyright (c) 2003,2004 by Zwm. }
{ }
{*******************************************************}
unit QM_Prvfrm;
interface
uses
Windows, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
QuickRpt, QRPrntr, StdCtrls, Menus, ComCtrls, ExtCtrls;
type
TQMPreviewForm = class(TForm)
Panel1: TPanel;
btnZoom: TButton;
StatusBar: TStatusBar;
btnSet: TButton;
btnPrint: TButton;
btnExit: TButton;
btnNext: TButton;
btnPrior: TButton;
btnOutput: TButton;
btnGo: TButton;
PopupMenu1: TPopupMenu;
mni500: TMenuItem;
mni200: TMenuItem;
mni150: TMenuItem;
mni100: TMenuItem;
mni75: TMenuItem;
mni50: TMenuItem;
mni25: TMenuItem;
mni10: TMenuItem;
mniWidth: TMenuItem;
mniFull: TMenuItem;
QPreview: TQRPreview;
spProcess: TShape;
lblPercent: TLabel;
Panel2: TPanel;
procedure btnPrintClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnGoClick(Sender: TObject);
procedure btnNextClick(Sender: TObject);
procedure btnOutputClick(Sender: TObject);
procedure btnPriorClick(Sender: TObject);
procedure mniScaleClick(Sender: TObject);
procedure btnSetClick(Sender: TObject);
procedure btnZoomClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure QPreviewPageAvailable(Sender: TObject; PageNum: Integer);
procedure QPreviewProgressUpdate(Sender: TObject; Progress: Integer);
procedure QPreviewMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure QM_QRepOnPreview(Sender: TObject);
procedure Localize;
procedure FormResize(Sender: TObject);
private
{ Private declarations }
FQM_QRep: TQuickRep;
FQMReportConsole: TObject;
procedure SetPageNumber(PageNumber: Integer);
procedure PageNumChange();
procedure SetZoom(Zoom: Integer);
procedure Process(Ps: Integer);
procedure StFinish;
public
{ Public declarations }
property QM_QRep: TQuickRep read FQM_QRep write FQM_QRep;
property QMReportConsole: TObject read FQMReportConsole write FQMReportConsole;
end;
var
QMPreviewForm: TQMPreviewForm;
implementation
uses QM_Utils, QM_RConsole, QM_PQuickRep, QM_Const;
{$R *.dfm}
var
PageCount: Integer;
procedure TQMPreviewForm.Localize;
begin
Caption := srvCaption;
btnOutput.Caption := srvBtnOut;
btnPrior.Caption := srvBtnPrior;
btnNext.Caption := srvBtnNext;
btnGo.Caption := srvBtnGo;
btnZoom.Caption := srvBtnZoom;
btnSet.Caption := srvBtnSet;
btnPrint.Caption := srcPrint;
btnExit.Caption := srcExit;
mniWidth.Caption := srvMenuWidth;
mniFull.Caption := srvMenuFull;
end;
procedure TQMPreviewForm.PageNumChange();
begin
StatusBar.Panels[1].Text := Format(srvPageNo,[QPreview.PageNumber, PageCount]);
btnPrior.Enabled := (PageCount > 1) and (QPreview.PageNumber>1)
and (QPreview.PageNumber<=PageCount);
btnNext.Enabled := (PageCount > 1) and (QPreview.PageNumber>=1)
and (QPreview.PageNumber < PageCount);
if (btnPrior.Enabled=False) and (btnNext.Enabled=True) then btnNext.SetFocus;
if (btnNext.Enabled=False) and (btnPrior.Enabled=True) then btnPrior.SetFocus;
end;
procedure TQMPreviewForm.SetPageNumber(PageNumber:Integer);
begin
QPreview.PageNumber := PageNumber;
PageNumChange();
end;
procedure TQMPreviewForm.SetZoom(Zoom:Integer);
begin
StatusBar.Panels[2].Text := Format(srvZoom,[Zoom]);
end;
procedure TQMPreviewForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
QPreview.QRPrinter.Free;
QPreview.QRPrinter := nil;
end;
procedure TQMPreviewForm.mniScaleClick(Sender: TObject);
begin
if not (Sender is TMenuItem) then Exit;
Case (Sender as TMenuItem).Tag of
0: QPreview.ZoomToFit;
1: QPreview.ZoomToWidth;
else
begin
QPreview.Zoom := (Sender as TMenuItem).Tag;
QPreview.UpdateZoom;
end;
end;
SetZoom(QPreview.Zoom);
(Sender as TMenuItem).Checked := True;
end;
procedure TQMPreviewForm.btnOutputClick(Sender: TObject);
var
aExportFilter : TQRExportFilter;
begin
aExportFilter := nil;
with TSaveDialog.Create(Application) do
try
Title:= srvSaveDlgCaption;
Filter:= QRExportFilterLibrary.SaveDialogFilterString;
DefaultExt := cQRPDefaultExt;
if Execute then
begin
btnOutput.Enabled := False;
Application.ProcessMessages;
if FilterIndex=1 then
QPreview.QRPrinter.Save(Filename)
else if FilterIndex<=QRExportFilterLibrary.Filters.Count+1 then
begin
try
aExportFilter:= TQRExportFilterLibraryEntry(
QRExportFilterLibrary.Filters[FilterIndex-2]).ExportFilterClass.Create(Filename);
QPreview.QRPrinter.ExportToFilter(aExportFilter);
finally
aExportFilter.Free;
end
end;
MessageDlg(srvOutputed, mtInformation, [mbOk], 0);
end;
finally
Free;
btnOutput.Enabled := True;
end;
end;
procedure TQMPreviewForm.btnPriorClick(Sender: TObject);
begin
SetPageNumber(QPreview.PageNumber-1);
end;
procedure TQMPreviewForm.btnNextClick(Sender: TObject);
begin
SetPageNumber(QPreview.PageNumber+1);
end;
procedure TQMPreviewForm.btnGoClick(Sender: TObject);
var
pnum,k: Integer;
pnstr,captionstr: String;
begin
captionstr := Format(srvInputDlgCaption, [PageCount]);
pnstr := IntToStr(QPreview.PageNumber);
if InputQuery(captionstr, srvInputDlgLCaption,pnstr) then
begin
val(pnstr, pnum, k);
if (pnum < 1) or (pnum > PageCount) then pnum := 1;
SetPageNumber(pnum);
end;
end;
procedure TQMPreviewForm.btnZoomClick(Sender: TObject);
var
P:TPoint;
begin
p := BtnZoom.ClientToScreen(Point(0,BtnZoom.Height));
PopupMenu1.Popup(p.x,p.y);
end;
procedure TQMPreviewForm.btnSetClick(Sender: TObject);
procedure StFalse;
begin
btnPrint.Enabled := False;
btnOutput.Enabled := False;
btnGo.Enabled := False;
btnZoom.Enabled := False;
BtnSet.Enabled := False;
StatusBar.Panels[1].Text := '';
StatusBar.Panels[2].Text := '';
end;
begin
if not QM_PageSetup(QMReportConsole, False) then Exit;
QPreview.Hide;
QPreview.Tag := 1;
if QMReportConsole is TQMReportConsole then
begin
StFalse;
TQMReportConsole(QMReportConsole).ReDraw;
end
else if QMReportConsole is TQMPrintQuickRep then
begin
StFalse;
TQMPrintQuickRep(QMReportConsole).ReDraw;
end
else Exit;
SetPageNumber(1);
mniFull.Checked := True;
QM_QRep.PreviewModal;
QPreview.Tag := 0;
end;
procedure TQMPreviewForm.btnPrintClick(Sender: TObject);
begin
QM_QRep.PrinterSetup;
if QM_QRep.Tag=0 then QM_QRep.Print;
end;
procedure TQMPreviewForm.QM_QRepOnPreview(Sender: TObject);
begin
QPreview.QRPrinter := TQRPrinter(Sender);
end;
procedure TQMPreviewForm.FormCreate(Sender: TObject);
begin
Localize;
QPreview.Hide;
QPreview.Tag := 0;
PageCount := 0;
spProcess.Parent := StatusBar;
spProcess.SetBounds(1,3,0,15);
lblPercent.Parent := StatusBar;
lblPercent.SetBounds(1,5,150,13);
WindowState:=wsMaximized;
Update;
end;
procedure TQMPreviewForm.StFinish;
begin
StatusBar.Panels[3].Text := srvStusFinish;
Process(100);
btnPrint.Enabled := QPreview.QRPrinter.PageCount > 0;
btnOutput.Enabled := btnPrint.Enabled;
btnGo.Enabled := btnPrint.Enabled;
btnZoom.Enabled := btnPrint.Enabled;
BtnSet.Enabled := True;
end;
procedure TQMPreviewForm.QPreviewPageAvailable(Sender: TObject;
PageNum: Integer);
begin
PageCount := PageNum;
PageNumChange();
if FQM_QRep.DataSet = nil then StFinish;
QPreview.ZoomToFit;
QPreview.UpdateZoom;
SetZoom(QPreview.Zoom);
if QPreview.Tag = 0 then QPreview.Show;
end;
procedure TQMPreviewForm.QPreviewProgressUpdate(Sender: TObject;
Progress: Integer);
begin
Process(Progress);
if Progress = 100 then StFinish
else StatusBar.Panels[3].Text := srvStusRun;
end;
procedure TQMPreviewForm.QPreviewMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
if QPreview.ZoomState = qrZoomToFit then
begin
QPreview.Zoom := 100;
QPreview.UpdateZoom;
mni100.Checked := true;
end
else
begin
QPreview.ZoomToFit;
mniFull.Checked := true;
end;
SetZoom(QPreview.Zoom);
end;
end;
procedure TQMPreviewForm.Process(Ps: Integer);
begin
spProcess.Width := Round(Ps*3/2);
lblPercent.Caption := IntToStr(Ps)+'%';
end;
procedure TQMPreviewForm.FormResize(Sender: TObject);
begin
QPreview.UpdateZoom;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -