1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
{
*****************************************************************************
This file is part of the Printer4Lazarus package
See the file COPYING.modifiedLGPL.txt, included in this distribution,
for details about the license.
*****************************************************************************
}
unit udlgpagesetup;
{$mode objfpc}{$H+}
interface
uses
// LCL
Classes, Forms, ExtCtrls, StdCtrls, Menus, Controls,
// Printers
Printers, framePageSetup;
type
{ TDlgPageSetup }
TDlgPageSetup = class(TForm)
btnCancel: TButton;
btnPrinter: TButton;
btnOk: TButton;
frmPageSetup: TframePageSetup;
PanelButtons: TPanel;
procedure btnPrinterClick(Sender: TObject);
procedure FormClose(Sender: TObject; var {%H-}CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
FMenu: TPopupMenu;
FSavedPaperName: string;
FSavedOrientation: TPrinterOrientation;
FSavedPrinterIndex: Integer;
procedure MenuPrinterClick(Sender: TObject);
public
procedure SetControls(AEnablePreview, AEnableMargins, AEnablePapers,
AEnableOrientation: boolean);
end;
var
dlgPageSetup: TDlgPageSetup;
implementation
{$R udlgpagesetup.lfm}
{ TDlgPageSetup }
procedure TDlgPageSetup.btnPrinterClick(Sender: TObject);
var
mi: TMenuItem;
pnt: TPoint;
i: integer;
begin
if not Assigned(FMenu) then
FMenu:= TPopupMenu.Create(Self);
FMenu.Items.Clear;
if Printer.Printers.Count=0 then exit;
for i:= 0 to Printer.Printers.Count-1 do
begin
mi:= TMenuItem.Create(Self);
mi.Caption:= Printer.Printers[i];
mi.Checked:= i=Printer.PrinterIndex;
mi.RadioItem:= true;
mi.OnClick:= @MenuPrinterClick;
FMenu.Items.Add(mi);
end;
pnt:= btnPrinter.ClientToScreen(Point(0, 0));
FMenu.PopUp(pnt.X, pnt.Y);
end;
procedure TDlgPageSetup.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
if ModalResult = mrCancel then
begin
Printer.PaperSize.PaperName := FSavedPaperName;
Printer.Orientation := FSavedOrientation;
Printer.PrinterIndex := FSavedPrinterIndex;
end;
end;
procedure TDlgPageSetup.FormCreate(Sender: TObject);
begin
// Save selected printer and paper, to be restore if dialog is cancelled
FSavedPaperName := Printer.PaperSize.PaperName;
FSavedOrientation := Printer.Orientation;
FSavedPrinterIndex := Printer.PrinterIndex;
AutoSize := False;
AutoSize := True;
end;
procedure TDlgPageSetup.FormShow(Sender: TObject);
begin
// adjust height for themes
with frmPageSetup do
if not EnablePreview then
Height := panSetup.Height
else
Height := panSetup.Height + panPreview.Height;
MoveToDefaultPosition;
end;
procedure TDlgPageSetup.MenuPrinterClick(Sender: TObject);
begin
if Sender is TMenuItem then
begin
Printer.SetPrinter((Sender as TMenuItem).Caption);
frmPageSetup.Initialize(
frmPageSetup.EnablePreview,
frmPageSetup.EnableMargins,
frmPageSetup.EnablePapers,
frmPageSetup.EnableOrientation
);
frmPageSetup.UpdatePageSize;
end;
end;
procedure TDlgPageSetup.SetControls(AEnablePreview, AEnableMargins, AEnablePapers,
AEnableOrientation: boolean);
begin
frmPageSetup.Initialize(AEnablePreview, AEnableMargins, AEnablePapers, AEnableOrientation);
{ with frmPageSetup do
if not EnablePreview then
Height := panSetup.Height
else
Height := panSetup.Height + panPreview.Height;}
end;
end.
|