Menu

[r2000]: / trunk / Src / UPageSetupDlgMgr.pas  Maximize  Restore  History

Download this file

190 lines (165 with data), 6.0 kB

  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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
{
* UPageSetupDlgMgr.pas
*
* Implements a class that manages the Page Setup dialog box.
*
* $Rev$
* $Date$
*
* ***** BEGIN LICENSE BLOCK *****
*
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is UPageSetupDlgMgr.pas
*
* The Initial Developer of the Original Code is Peter Johnson
* (http://www.delphidabbler.com/).
*
* Portions created by the Initial Developer are Copyright (C) 2007-2010 Peter
* Johnson. All Rights Reserved.
*
* Contributor(s)
* NONE
*
* ***** END LICENSE BLOCK *****
}
unit UPageSetupDlgMgr;
interface
uses
// Delphi
Classes,
// Project
UBaseObjects;
type
{
TPageSetupDlgMgr:
Class that manages the Page Setup dialog box. The class sets the dialog's
properties, converting between units used by application and units used by
dialog box. It also persists information entered by user in the dialog box.
}
TPageSetupDlgMgr = class(TNoConstructObject)
strict private
class function MMToDlgUnits(const Value: Double): Integer;
{Converts millimeters to units required by Page Setup dialog.
@param Value [in] Millimeters to convert.
@return Converted value in dialog box units.
}
class function DlgUnitsToMM(const Value: Integer): Double;
{Converts units used by Page Setup dialog into millimeters.
@param Dialog box units to convert.
@return Converted value in millimeters.
}
public
class function Execute(AOwner: TComponent): Boolean;
{Configures and displays page setup dialog box and updates persistent page
setup properties as required.
@return True if user OKs dialog and False if user cancels.
}
end;
implementation
uses
// Delphi
SysUtils, Dialogs,
// Project
UExceptions, UMeasurement, UPageSetupDialogEx, UPreferences, UPrintInfo;
{ TPageSetupDlgMgr }
class function TPageSetupDlgMgr.DlgUnitsToMM(const Value: Integer): Double;
{Converts units used by Page Setup dialog into millimeters.
@param Dialog box units to convert.
@return Converted value in millimeters.
}
const
// Bug error message
cBadValueBug = '.DlgUnitsToMM: Unexpected TMeasurementUnits value';
begin
// See comments in MMToDlgUnits for details of how dialog stores values
case Preferences.MeasurementUnits of
muInches: Result := InchesToMM(Value / 1000.0);
muMillimeters: Result := Value / 100.0;
else raise EBug.Create(ClassName + cBadValueBug);
end;
end;
class function TPageSetupDlgMgr.Execute(AOwner: TComponent): Boolean;
{Configures and displays page setup dialog box and updates persistent page
setup properties as required.
@return True if user OKs dialog and False if user cancels.
}
var
Dlg: TPageSetupDialogEx; // object that encapsulates page setup dialog
// ---------------------------------------------------------------------------
procedure SetDlgMargins;
{Sets dialog's margins properties from persistent page margins.
}
begin
Dlg.MarginLeft := MMToDlgUnits(PrintInfo.PageMargins.Left);
Dlg.MarginTop := MMToDlgUnits(PrintInfo.PageMargins.Top);
Dlg.MarginRight := MMToDlgUnits(PrintInfo.PageMargins.Right);
Dlg.MarginBottom := MMToDlgUnits(PrintInfo.PageMargins.Bottom);
end;
procedure UpdatePageMargins;
{Update persistent page margins per values entered in dialog box.
}
begin
PrintInfo.PageMargins := TPageMargins.Create(
DlgUnitsToMM(Dlg.MarginLeft),
DlgUnitsToMM(Dlg.MarginTop),
DlgUnitsToMM(Dlg.MarginRight),
DlgUnitsToMM(Dlg.MarginBottom)
);
end;
// ---------------------------------------------------------------------------
begin
Dlg := TPageSetupDialogEx.Create(AOwner);
try
// Set dialog box's margin properties.
// We don't pass other values, like page size, to dialog box since it
// automatically gets these from printer's document properties.
SetDlgMargins;
// Store required units of measurement
case Preferences.MeasurementUnits of
muInches: Dlg.Units := pmInches;
muMillimeters: Dlg.Units := pmMillimeters;
end;
// Show Help button to access specified topic and disable Printers button
Dlg.Options := [psoShowHelp, psoDisablePrinter, psoMargins];
Dlg.HelpKeyword := 'PageSetupDlg';
// Display dialog box
Result := Dlg.Execute;
if Result then
// Update page margins. We convert back to mm since we always use mm when
// persisting margins.
// We don't need to record other values since dialog box automatically
// updates current printer's document properties to reflect changes.
UpdatePageMargins;
finally
FreeAndNil(Dlg);
end;
end;
class function TPageSetupDlgMgr.MMToDlgUnits(const Value: Double): Integer;
{Converts millimeters to units required by Page Setup dialog.
@param Value [in] Millimeters to convert.
@return Converted value in dialog box units.
}
const
// Bug error message
cBadValueBug = '.MMToDlgUnits: Unexpected TMeasurementUnits value';
begin
// Page Setup dialog stores different values depending on units of
// measurement being used. If millimeters are being used, dialog box stores
// values in 100ths of a millimeter. If inches are being used values are
// stored in 1000th of an inch.
case Preferences.MeasurementUnits of
muInches: Result := Round(1000.0 * MMToInches(Value));
muMillimeters: Result := Round(100 * Value);
else raise EBug.Create(ClassName + cBadValueBug);
end;
end;
end.
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.