📄 frxpreview.pas
字号:
if FZoom < 0.3 then
FZoom := 0.3;
SetZoom(FZoom);
end
else
begin
with FWorkspace do
begin
if Horz then
HorzPosition := HorzPosition + Round(-Delta / Abs(Delta)) * 20
else
VertPosition := VertPosition + Round(-Delta / Abs(Delta)) * 20;
end;
end;
end;
{ TfrxPreviewForm }
procedure TfrxPreviewForm.FormCreate(Sender: TObject);
begin
{$IFDEF FR_COM}
Icon.Handle := LoadIcon(hInstance, 'SDESGNICON');
{$ENDIF}
Caption := frxGet(100);
PrintB.Caption := frxGet(101);
PrintB.Hint := frxGet(102);
OpenB.Caption := frxGet(103);
OpenB.Hint := frxGet(104);
SaveB.Caption := frxGet(105);
SaveB.Hint := frxGet(106);
ExportB.Caption := frxGet(107);
ExportB.Hint := frxGet(108);
FindB.Caption := frxGet(109);
FindB.Hint := frxGet(110);
ZoomWholePageB.Caption := frxGet(111);
ZoomWholePageB.Hint := frxGet(112);
ZoomPageWidthB.Caption := frxGet(113);
ZoomPageWidthB.Hint := frxGet(114);
Zoom100B.Caption := frxGet(115);
Zoom100B.Hint := frxGet(116);
Zoom50B.Caption := frxGet(117);
Zoom50B.Hint := frxGet(118);
ZoomCB.Hint := frxGet(119);
PageSettingsB.Caption := frxGet(120);
PageSettingsB.Hint := frxGet(121);
OutlineB.Caption := frxGet(122);
OutlineB.Hint := frxGet(123);
HandToolB.Caption := frxGet(124);
HandToolB.Hint := frxGet(125);
ZoomToolB.Caption := frxGet(126);
ZoomToolB.Hint := frxGet(127);
NewPageB.Caption := frxGet(128);
NewPageB.Hint := frxGet(129);
DelPageB.Caption := frxGet(130);
DelPageB.Hint := frxGet(131);
DesignerB.Caption := frxGet(132);
DesignerB.Hint := frxGet(133);
{$IFDEF FR_LITE}
DesignerB.Hint := DesignerB.Hint + #13#10 + 'This feature is not available in FreeReport';
{$ENDIF}
FirstB.Caption := frxGet(134);
FirstB.Hint := frxGet(135);
PriorB.Caption := frxGet(136);
PriorB.Hint := frxGet(137);
NextB.Caption := frxGet(138);
NextB.Hint := frxGet(139);
LastB.Caption := frxGet(140);
LastB.Hint := frxGet(141);
CancelB.Caption := frxGet(2);
PageE.Hint := frxGet(142);
FullScreenBtn.Hint := frxGet(150);
PdfB.Hint := frxGet(151);
EmailB.Hint := frxGet(152);
ZoomCB.Items.Clear;
ZoomCB.Items.Add('25%');
ZoomCB.Items.Add('50%');
ZoomCB.Items.Add('75%');
ZoomCB.Items.Add('100%');
ZoomCB.Items.Add('150%');
ZoomCB.Items.Add('200%');
ZoomCB.Items.Add(frxResources.Get('zmPageWidth'));
ZoomCB.Items.Add(frxResources.Get('zmWholePage'));
Toolbar.Images := frxResources.PreviewButtonImages;
FPreview := TfrxPreview.Create(Self);
FPreview.Parent := Self;
FPreview.Align := alClient;
FPreview.OnPageChanged := OnPageChanged;
ActiveControl := FPreview;
SetWindowLong(PageE.Handle, GWL_STYLE, GetWindowLong(PageE.Handle, GWL_STYLE) or ES_NUMBER);
FFullScreen := False;
FPDFExport := nil;
FEmailExport := nil;
end;
procedure TfrxPreviewForm.Init;
var
i, j, k: Integer;
m, e: TMenuItem;
begin
with Report.PreviewOptions do
begin
if Maximized then
WindowState := wsMaximized;
if MDIChild then
FormStyle := fsMDIChild;
FPreview.OutlineVisible := OutlineVisible;
FPreview.OutlineWidth := OutlineWidth;
FPreview.Zoom := Zoom;
FPreview.ZoomMode := ZoomMode;
NewPageB.Enabled := AllowEdit;
DelPageB.Enabled := AllowEdit;
{$IFDEF FR_LITE}
DesignerB.Enabled := False;
{$ELSE}
DesignerB.Enabled := AllowEdit;
{$ENDIF}
PrintB.Visible := pbPrint in Buttons;
OpenB.Visible := pbLoad in Buttons;
SaveB.Visible := pbSave in Buttons;
ExportB.Visible := pbExport in Buttons;
FindB.Visible := pbFind in Buttons;
PdfB.Visible := False;
EmailB.Visible := False;
ZoomWholePageB.Visible := pbZoom in Buttons;
ZoomPageWidthB.Visible := pbZoom in Buttons;
Zoom100B.Visible := pbZoom in Buttons;
Zoom50B.Visible := pbZoom in Buttons;
Sep3.Visible := pbZoom in Buttons;
FullScreenBtn.Visible := pbZoom in Buttons;
if not (pbZoom in Buttons) then
Sep1.Free;
OutlineB.Visible := pbOutline in Buttons;
OutlineB.Down := OutlineVisible;
PageSettingsB.Visible := pbPageSetup in Buttons;
if not (OutlineB.Visible or PageSettingsB.Visible) then
Sep2.Free;
HandToolB.Visible := pbTools in Buttons;
ZoomToolB.Visible := pbTools in Buttons;
if not (pbTools in Buttons) then
Sep5.Free;
NewPageB.Visible := pbEdit in Buttons;
DelPageB.Visible := pbEdit in Buttons;
DesignerB.Visible := (pbEdit in Buttons) and (frxDesignerClass <> nil);
if not (pbEdit in Buttons) then
Sep7.Free;
FirstB.Visible := pbNavigator in Buttons;
PriorB.Visible := pbNavigator in Buttons;
NextB.Visible := pbNavigator in Buttons;
LastB.Visible := pbNavigator in Buttons;
Sep4.Visible := pbNavigator in Buttons;
if not (pbNavigator in Buttons) then
Sep6.Free;
CancelB.Visible := not (pbNoClose in Buttons);
Toolbar.ShowCaptions := ShowCaptions;
end;
if (frxExportFilters.Count = 0) or
((frxExportFilters.Count = 1) and (frxExportFilters[0].Filter = frxDotMatrixExport)) then
ExportB.Visible := False;
for i := 0 to frxExportFilters.Count - 1 do
begin
if frxExportFilters[i].Filter = frxDotMatrixExport then
continue;
m := TMenuItem.Create(ExportPopup);
ExportPopup.Items.Add(m);
m.Caption := TfrxCustomExportFilter(frxExportFilters[i].Filter).GetDescription + '...';
m.Tag := i;
m.OnClick := ExportMIClick;
if TfrxCustomExportFilter(frxExportFilters[i].Filter).ClassName = 'TfrxPDFExport' then
begin
FPDFExport := TfrxCustomExportFilter(frxExportFilters[i].Filter);
PdfB.Visible := pbExportQuick in Report.PreviewOptions.Buttons;
end;
if TfrxCustomExportFilter(frxExportFilters[i].Filter).ClassName = 'TfrxMailExport' then
begin
FEmailExport := TfrxCustomExportFilter(frxExportFilters[i].Filter);
EmailB.Visible := pbExportQuick in Report.PreviewOptions.Buttons;
end;
end;
if Report.ReportOptions.Name <> '' then
Caption := Report.ReportOptions.Name;
FPreview.Init;
k := 0;
RightMenu.Images := ToolBar.Images;
for i := 0 to ToolBar.ButtonCount - 1 do
begin
if (ToolBar.Buttons[i].Style <> tbsCheck) and
(ToolBar.Buttons[i].Visible) and
(ToolBar.Buttons[i].Hint <> '') then
begin
m := TMenuItem.Create(RightMenu);
RightMenu.Items.Add(m);
m.Caption := ToolBar.Buttons[i].Hint;
m.OnClick := ToolBar.Buttons[i].OnClick;
m.ImageIndex := ToolBar.Buttons[i].ImageIndex;
if Assigned(ToolBar.Buttons[i].DropdownMenu) then
for j := 0 to ToolBar.Buttons[i].DropdownMenu.Items.Count - 1 do
begin
e := TMenuItem.Create(m);
e.Caption := ToolBar.Buttons[i].DropdownMenu.Items[j].Caption;
e.Tag := ToolBar.Buttons[i].DropdownMenu.Items[j].Tag;
e.OnClick := ToolBar.Buttons[i].DropdownMenu.Items[j].OnClick;
m.Add(e);
end;
end;
if ToolBar.Buttons[i].Style = tbsSeparator then
begin
if k = 1 then
break;
m := TMenuItem.Create(RightMenu);
RightMenu.Items.Add(m);
m.Caption := '-';
Inc(k);
end;
end;
PopupMenu := RightMenu;
end;
procedure TfrxPreviewForm.UpdateControls;
procedure EnableControls(cAr: array of TControl; Enabled: Boolean);
var
i: Integer;
begin
for i := 0 to High(cAr) do
begin
cAr[i].Enabled := Enabled;
if (cAr[i] is TToolButton) and not Enabled then
TToolButton(cAr[i]).Down := False;
end;
end;
begin
EnableControls([PrintB, OpenB, SaveB, ExportB, PdfB, EmailB, FindB, PageSettingsB],
(not FPreview.FRunning) and (FPreview.PageCount > 0));
EnableControls([NewPageB, DelPageB, DesignerB],
not FPreview.FRunning and Report.PreviewOptions.AllowEdit);
end;
procedure TfrxPreviewForm.PrintBClick(Sender: TObject);
begin
if not frxPrinters.HasPhysicalPrinters then
frxErrorMsg(frxResources.Get('clNoPrinters')) else
FPreview.Print;
Enabled := True;
end;
procedure TfrxPreviewForm.OpenBClick(Sender: TObject);
begin
FPreview.LoadFromFile;
end;
procedure TfrxPreviewForm.SaveBClick(Sender: TObject);
begin
FPreview.SaveToFile;
end;
procedure TfrxPreviewForm.FindBClick(Sender: TObject);
begin
FPreview.Find;
end;
procedure TfrxPreviewForm.ZoomWholePageBClick(Sender: TObject);
begin
FPreview.ZoomMode := zmWholePage;
UpdateZoom;
end;
procedure TfrxPreviewForm.ZoomPageWidthBClick(Sender: TObject);
begin
FPreview.ZoomMode := zmPageWidth;
UpdateZoom;
end;
procedure TfrxPreviewForm.Zoom100BClick(Sender: TObject);
begin
FPreview.Zoom := 1;
UpdateZoom;
end;
procedure TfrxPreviewForm.Zoom50BClick(Sender: TObject);
begin
FPreview.ZoomMode := zmManyPages;
UpdateZoom;
end;
function TfrxPreviewForm.GetReport: TfrxReport;
begin
Result := Preview.Report;
end;
procedure TfrxPreviewForm.UpdateZoom;
begin
ZoomCB.Text := IntToStr(Round(FPreview.Zoom * 100)) + '%';
end;
procedure TfrxPreviewForm.ZoomCBClick(Sender: TObject);
var
s: String;
begin
FPreview.SetFocus;
if ZoomCB.ItemIndex = 6 then
ZoomPageWidthBClick(nil)
else if ZoomCB.ItemIndex = 7 then
ZoomWholePageBClick(nil)
else
begin
s := ZoomCB.Text;
if Pos('%', s) <> 0 then
s[Pos('%', s)] := ' ';
while Pos(' ', s) <> 0 do
Delete(s, Pos(' ', s), 1);
if s <> '' then
FPreview.Zoom := frxStrToFloat(s) / 100;
end;
PostMessage(Handle, WM_UPDATEZOOM, 0, 0);
end;
procedure TfrxPreviewForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_ESCAPE then
CancelBClick(Self);
if Key = VK_F11 then
SwitchToFullScreen;
if Key = VK_F1 then
frxResources.Help(Self);
end;
procedure TfrxPreviewForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
if ActiveControl = ZoomCB then
ZoomCBClick(nil);
if ActiveControl = PageE then
PageEClick(nil);
end;
end;
procedure TfrxPreviewForm.WMUpdateZoom(var Message: TMessage);
begin
UpdateZoom;
end;
procedure TfrxPreviewForm.OutlineBClick(Sender: TObject);
begin
FPreview.OutlineVisible := OutlineB.Down;
FPreview.UpdateZoom;
end;
procedure TfrxPreviewForm.PageSettingsBClick(Sender: TObject);
begin
FPreview.PageSetupDlg;
end;
procedure TfrxPreviewForm.SelectToolBClick(Sender: TObject);
begin
if HandToolB.Down then
FPreview.Tool := ptHand
else if ZoomToolB.Down then
FPreview.Tool := ptZoom
end;
procedure TfrxPreviewForm.OnPageChanged(Sender: TfrxPreview; PageNo: Integer);
var
FirstPass: Boolean;
begin
FirstPass := False;
if FPreview.PreviewPages <> nil then
FirstPass := not FPreview.PreviewPages.Engine.FinalPass;
if FirstPass then
StatusBar.Panels[0].Text := frxResources.Get('clFirstPass') + ' ' +
IntToStr(FPreview.PageCount)
else
StatusBar.Panels[0].Text := Format(frxResources.Get('clPageOf'),
[PageNo, FPreview.PageCount]);
PageE.Text := IntToStr(PageNo);
end;
procedure TfrxPreviewForm.PageEClick(Sender: TObject);
begin
FPreview.PageNo := StrToInt(PageE.Text);
FPreview.SetFocus;
end;
procedure TfrxPreviewForm.FirstBClick(Sender: TObject);
begin
FPreview.First;
end;
procedure TfrxPreviewForm.PriorBClick(Sender: TObject);
begin
FPreview.Prior;
end;
procedure TfrxPreviewForm.NextBClick(Sender: TObject);
begin
FPreview.Next;
end;
procedure TfrxPreviewForm.LastBClick(Sender: TObject);
begin
FPreview.Last;
end;
procedure TfrxPreviewForm.FormMouseWheel(Sender: TObject;
Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
var Handled: Boolean);
begin
FPreview.MouseWheelScroll(WheelDelta, False, ssCtrl in Shift);
end;
procedure TfrxPreviewForm.DesignerBClick(Sender: TObject);
begin
FPreview.Edit;
end;
procedure TfrxPreviewForm.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
CanClose := not FPreview.FRunning;
end;
procedure TfrxPreviewForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if FFreeOnClose then
Action := caFree;
end;
procedure TfrxPreviewForm.NewPageBClick(Sender: TObject);
begin
FPreview.AddPage;
end;
procedure TfrxPreviewForm.DelPageBClick(Sender: TObject);
begin
FPreview.DeletePage;
end;
procedure TfrxPreviewForm.CancelBClick(Sender: TObject);
begin
if FPreview.FRunning then
FPreview.Cancel else
Close;
end;
procedure TfrxPreviewForm.ExportMIClick(Sender: TObject);
begin
FPreview.Export(TfrxCustomExportFilter(frxExportFilters[TMenuItem(Sender).Tag].Filter));
Enabled := True;
end;
procedure TfrxPreviewForm.DesignerBMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
pt: TPoint;
begin
pt := DesignerB.ClientToScreen(Point(0, 0));
if Button = mbRight then
HiddenMenu.Popup(pt.X, pt.Y);
end;
procedure TfrxPreviewForm.Showtemplate1Click(Sender: TObject);
begin
FPreview.EditTemplate;
end;
procedure TfrxPreviewForm.SetMessageText(const Value: String);
begin
StatusBar.Panels[1].Text := Value;
Application.ProcessMessages;
end;
procedure TfrxPreviewForm.SwitchToFullScreen;
begin
if not FFullScreen then
begin
StatusBar.Visible := False;
ToolBar.Visible := False;
FOldBS := BorderStyle;
FOldState := WindowState;
BorderStyle := bsNone;
WindowState := wsMaximized;
FFullScreen := True;
end
else
begin
WindowState := FOldState;
BorderStyle := FOldBS;
FFullScreen := False;
StatusBar.Visible := True;
ToolBar.Visible := True;
end;
end;
procedure TfrxPreviewForm.FullScreenBtnClick(Sender: TObject);
begin
SwitchToFullScreen;
end;
procedure TfrxPreviewForm.PdfBClick(Sender: TObject);
begin
if Assigned(FPDFExport) then
FPreview.Export(FPDFExport);
end;
procedure TfrxPreviewForm.EmailBClick(Sender: TObject);
begin
if Assigned(FEmailExport) then
FPreview.Export(FEmailExport);
end;
procedure TfrxPreviewForm.WMActivateApp(var Msg: TWMActivateApp);
begin
if IsIconic(Application.Handle) then
begin
ShowWindow(Application.Handle, SW_RESTORE);
SetActiveWindow(Handle);
end;
inherited;
end;
procedure TfrxPreviewForm.WMSysCommand(var Msg: TWMSysCommand);
begin
if Msg.CmdType = SC_MINIMIZE then
if not Report.PreviewOptions.MDIChild then
ShowWindow(Application.Handle, SW_MINIMIZE)
else
inherited
else
inherited;
end;
end.
//<censored>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -