File: udlgpagesetup.pas

package info (click to toggle)
lazarus 2.2.6%2Bdfsg2-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 219,980 kB
  • sloc: pascal: 1,944,919; xml: 357,634; makefile: 270,608; cpp: 57,115; sh: 3,249; java: 609; perl: 297; sql: 222; ansic: 137
file content (139 lines) | stat: -rw-r--r-- 3,509 bytes parent folder | download | duplicates (4)
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.