📄 eerpagesetup.pas
字号:
unit EERPageSetup;
//----------------------------------------------------------------------------------------------------------------------
//
// This file is part of fabFORCE DBDesigner4.
// Copyright (C) 2002 Michael G. Zinner, www.fabFORCE.net
//
// DBDesigner4 is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// DBDesigner4 is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with DBDesigner4; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
//----------------------------------------------------------------------------------------------------------------------
//
// Unit EERPageSetup
// ---------------------
// Version 1.0, 13.03.2003, Mike
// Description
// Contains the TEERPageSetupForm Class which will allow the user to print
// the EERModel
//
// Changes:
// Version 1.0, 13.03.2003, Mike
// initial version
//
//----------------------------------------------------------------------------------------------------------------------
interface
uses
SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
QStdCtrls, QPrinters, QExtCtrls, QButtons, EERModel, QComCtrls,
Math, Qt;
type
TEERPageSetupForm = class(TForm)
BottomPnl: TPanel;
CenterPnl: TPanel;
Panel1: TPanel;
Panel2: TPanel;
MainGroupBox: TGroupBox;
PrinterPnl: TPanel;
WidthPnl: TPanel;
Panel6: TPanel;
Panel7: TPanel;
PaintBox: TPaintBox;
Image1: TImage;
PropertiesBtn: TButton;
PageSizeGroupBox: TGroupBox;
PageSizeCBox: TComboBox;
OrientationGroupBox: TGroupBox;
LandscapeImg: TImage;
PortraitImg: TImage;
LandscapeRBtn: TRadioButton;
PortraitRBtn: TRadioButton;
HPageSizeTBar: TTrackBar;
WidthLbl: TLabel;
Panel3: TPanel;
PagesPnl: TPanel;
GroupBox6: TGroupBox;
HPagesSpinEdit: TSpinEdit;
VPagesSpinEdit: TSpinEdit;
Label2: TLabel;
Label3: TLabel;
PrintPnl: TPanel;
GroupBox7: TGroupBox;
PrintAllPagesCBox: TRadioButton;
PrintSelPagesCBox: TRadioButton;
GroupBox4: TGroupBox;
Label1: TLabel;
CopiesEd: TSpinEdit;
StartPrintBtn: TBitBtn;
PrintDlgBtn: TBitBtn;
PageSetupBtn: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure SetModel(theModel: TEERModel);
procedure SetSelPagesArraySize;
procedure ResetSelPages;
procedure PrinterCBoxCloseUp(Sender: TObject);
procedure PropertiesBtnClick(Sender: TObject);
procedure PageSizeCBoxCloseUp(Sender: TObject);
function GetPageSizeStr(nr: TPageSize): string;
function GetPageSizeNr(s: string): TPageSize;
function GetPageSize(s: string): TSize;
procedure ResizeEERModelPages;
procedure SetPrinterValues;
procedure PortraitRBtnClick(Sender: TObject);
procedure StartPrintBtnClick(Sender: TObject);
procedure PaintBoxPaint(Sender: TObject);
procedure PaintBoxMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure PrintAllPagesCBoxClick(Sender: TObject);
procedure HPageSizeTBarChange(Sender: TObject);
procedure HPagesSpinEditChanged(Sender: TObject; NewValue: Integer);
procedure FormShow(Sender: TObject);
procedure VPagesSpinEditChanged(Sender: TObject; NewValue: Integer);
procedure HideEdits;
procedure ShowEdits;
procedure SetModelSelPages;
procedure StoreSelPagesInModel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure PrintDlgBtnClick(Sender: TObject);
procedure PageSetupBtnClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
EERModel: TEERModel;
ModelBmp: TBitmap;
//SelPages: Array of Array of Boolean;
SelPages: Array [0..51, 0..51] of Boolean;
lastPageX, lastPageY: integer;
PreviewZoomFactor: double;
SizeTBarActive,
SpinEditActive: Boolean;
end;
var
EERPageSetupForm: TEERPageSetupForm;
implementation
uses MainDM;
{$R *.xfm}
procedure TEERPageSetupForm.FormCreate(Sender: TObject);
begin
DMMain.InitForm(self);
ModelBmp:=TBitmap.Create;
lastPageX:=0;
lastPageY:=0;
PreviewZoomFactor:=1;
SizeTBarActive:=False;
SpinEditActive:=False;
end;
procedure TEERPageSetupForm.FormDestroy(Sender: TObject);
begin
ModelBmp.Free;
end;
procedure TEERPageSetupForm.FormShow(Sender: TObject);
begin
if(Assigned(EERModel))then
begin
//Set Dialog Height
if(Not(PrintPnl.Visible))then
ClientHeight:=Round(EERModel.EERModel_Height*PreviewZoomFactor+160)
else
ClientHeight:=Round(EERModel.EERModel_Height*PreviewZoomFactor+70);
MainGroupBox.Align:=alNone;
MainGroupBox.Align:=alClient;
end;
end;
procedure TEERPageSetupForm.SetModel(theModel: TEERModel);
var PrinterName: WideString;
begin
EERModel:=theModel;
//Set Bitmap size
ModelBmp.Width:=PaintBox.Width-4;
PreviewZoomFactor:=ModelBmp.Width/EERModel.EERModel_Width;
ModelBmp.Height:=Round(EERModel.EERModel_Height*PreviewZoomFactor);
//Draw to Model onto the Bitmap
ModelBmp.Canvas.Pen.Color:=clWhite;
ModelBmp.Canvas.Brush.Color:=clWhite;
ModelBmp.Canvas.Rectangle(Rect(0, 0, ModelBmp.Width-1, ModelBmp.Height-1));
//No Text Output
EERModel.PaintModel(ModelBmp.Canvas,
PreviewZoomFactor*100,
0, 0, 0, 0, [EERTable, EERRegion, EERNote, EERRelation],
72, False);
if(EERModel.ModelPrinter<>'')then
begin
//!!! This isn't working at the moment
PrinterName:=EERModel.ModelPrinter;
QPrinter_setPrinterName(QPrinterH(Printer.Handle), PWideString(@PrinterName));
Printer.SetPrinter(EERModel.ModelPrinter);
end;
//Set Spin Edits and TBars
HPagesSpinEdit.Value:=Ceil(EERModel.HPageCount-0.01);
HPageSizeTBar.Max:=Round(EERModel.EERModel_Width*PreviewZoomFactor);
HPageSizeTBar.Position:=Round(EERModel.PageSize.cx*PreviewZoomFactor);
//Initialize Selection Array
SetSelPagesArraySize;
//Clear Selection Array
//ResetSelPages;
//Set Pages as stores in Model
SetModelSelPages;
//Set Printer Orientation
Printer.Orientation:=EERModel.PageOrientation;
Printer.PrintAdapter.PageSize:=GetPageSizeNr(EERModel.PageFormat);
SetPrinterValues;
//Activate OnChange Events of Edits
SizeTBarActive:=True;
SpinEditActive:=True;
end;
procedure TEERPageSetupForm.SetSelPagesArraySize;
//var i: integer;
begin
{SetLength(SelPages, HPagesSpinEdit.Value);
for i:=0 to HPagesSpinEdit.Value-1 do
SetLength(SelPages[i], VPagesSpinEdit.Value);}
end;
procedure TEERPageSetupForm.ResetSelPages;
var i, j: integer;
begin
for i:=0 to Ceil(EERModel.HPageCount-0.01)-1 do
for j:=0 to Ceil(EERModel.VPageCount-0.01)-1 do
SelPages[i, j]:=False;
end;
procedure TEERPageSetupForm.SetModelSelPages;
var i, j: integer;
begin
for i:=0 to Ceil(EERModel.HPageCount-0.01)-1 do
for j:=0 to Ceil(EERModel.VPageCount-0.01)-1 do
begin
SelPages[i, j]:=EERModel.SelectedPages[i+(Ceil(EERModel.HPageCount-0.01)-1)*j];
if(SelPages[i, j])then
PrintSelPagesCBox.Checked:=True;
end;
end;
procedure TEERPageSetupForm.StoreSelPagesInModel;
var i, j: integer;
begin
for i:=0 to Ceil(EERModel.HPageCount-0.01)-1 do
for j:=0 to Ceil(EERModel.VPageCount-0.01)-1 do
EERModel.SelectedPages[i+(Ceil(EERModel.HPageCount-0.01)-1)*j]:=SelPages[i, j];
end;
procedure TEERPageSetupForm.PropertiesBtnClick(Sender: TObject);
begin
if(Printer.PrintAdapter.ExecuteSetup)then
SetPrinterValues;
end;
procedure TEERPageSetupForm.PrinterCBoxCloseUp(Sender: TObject);
begin
//Printer.SetPrinter(PrinterCBox.Items[PrinterCBox.ItemIndex]);
end;
procedure TEERPageSetupForm.SetPrinterValues;
begin
//Display Printer Values after changes
//PrinterCBox.ItemIndex:=PrinterCBox.Items.IndexOf(Printer.OutputDevice);
PageSizeCBox.ItemIndex:=PageSizeCBox.Items.IndexOf(
GetPageSizeStr(Printer.PrintAdapter.PageSize));
case Printer.Orientation of
poPortrait:
begin
PortraitRBtn.Visible:=False;
PortraitRBtn.Checked:=True;
PortraitRBtn.Visible:=True;
PortraitImg.Show;
LandscapeImg.Hide;
end;
poLandscape:
begin
LandscapeRBtn.Visible:=False;
LandscapeRBtn.Checked:=True;
LandscapeRBtn.Visible:=True;
PortraitImg.Hide;
LandscapeImg.Show;
end;
end;
// Set Model PageSettings
ResizeEERModelPages;
PaintBoxPaint(self);
end;
procedure TEERPageSetupForm.ResizeEERModelPages;
var PrinterName: WideString;
begin
//Calculate Page Settings of the EERModel
//from EERModel.PageSize.cx Value
if(Printer.PageWidth-Printer.Margins.cx*2-1)>
(Printer.PageHeight-Printer.Margins.cy*2-1)then
EERModel.PageAspectRatio:=(Printer.PageWidth-Printer.Margins.cx*2-1)/
(Printer.PageHeight-Printer.Margins.cy*2-1)
else
EERModel.PageAspectRatio:=(Printer.PageHeight-Printer.Margins.cy*2-1)/
(Printer.PageWidth-Printer.Margins.cx*2-1);
QPrinter_PrinterName(QPrinterH(Printer.Handle), PWideString(@PrinterName));
EERModel.ModelPrinter:=PrinterName;
EERModel.PageOrientation:=Printer.Orientation;
if(EERModel.PageOrientation=poPortrait)then
EERModel.PageSize.cy:=Round(EERModel.PageSize.cx*EERModel.PageAspectRatio)
else
EERModel.PageSize.cy:=Round(EERModel.PageSize.cx/EERModel.PageAspectRatio);
EERModel.HPageCount:=EERModel.EERModel_Width/EERModel.PageSize.cx;
EERModel.VPageCount:=EERModel.EERModel_Height/EERModel.PageSize.cy;
//Refresh Spin Edits
SpinEditActive:=False;
try
HPagesSpinEdit.Value:=Ceil(EERModel.HPageCount-0.01);
VPagesSpinEdit.Value:=Ceil(EERModel.VPageCount-0.01);
finally
SpinEditActive:=True;
end;
//Refresh TBar
SizeTBarActive:=False;
try
HPageSizeTBar.Position:=Round(EERModel.PageSize.cx*PreviewZoomFactor);
finally
SizeTBarActive:=True;
end;
end;
function TEERPageSetupForm.GetPageSizeStr(nr: TPageSize): string;
begin
case nr of
psA0:
GetPageSizeStr:='A0 (841 x 1189 mm)';
psA1:
GetPageSizeStr:='A1 (594 x 841 mm)';
psA2:
GetPageSizeStr:='A2 (420 x 594 mm)';
psA3:
GetPageSizeStr:='A3 (297 x 420 mm)';
psA4:
GetPageSizeStr:='A4 (210x297 mm, 8.26x11.7 inches)';
psA5:
GetPageSizeStr:='A5 (148 x 210 mm)';
psA6:
GetPageSizeStr:='A6 (105 x 148 mm)';
psA7:
GetPageSizeStr:='A7 (74 x 105 mm)';
psA8:
GetPageSizeStr:='A8 (52 x 74 mm)';
psA9:
GetPageSizeStr:='A9 (37 x 52 mm)';
psB0:
GetPageSizeStr:='B0 (1030 x 1456 mm)';
psB1:
GetPageSizeStr:='B1 (728 x 1030 mm)';
psB10:
GetPageSizeStr:='B10 (32 x 45 mm)';
psB2:
GetPageSizeStr:='B2 (515 x 728 mm)';
psB3:
GetPageSizeStr:='B3 (364 x 515 mm)';
psB4:
GetPageSizeStr:='B4 (257 x 364 mm)';
psB5:
GetPageSizeStr:='B5 (182x257 mm, 7.17x10.13 inches)';
psB6:
GetPageSizeStr:='B6 (128 x 182 mm)';
psB7:
GetPageSizeStr:='B7 (91 x 128 mm)';
psB8:
GetPageSizeStr:='B8 (64 x 91 mm)';
psB9:
GetPageSizeStr:='B9 (45 x 64 mm)';
psC5E:
GetPageSizeStr:='C5E (163 x 229 mm)';
psComm10E:
GetPageSizeStr:='Comm10E (105 x 241 mm, US Common #10 Envelope)';
psDLE:
GetPageSizeStr:='DLE (110 x 220 mm)';
psExecutive:
GetPageSizeStr:='Executive (7.5x10 inches, 191x254 mm)';
psFolio:
GetPageSizeStr:='Folio (210 x 330 mm)';
psLedger:
GetPageSizeStr:='Ledger (432 x 279 mm)';
psLegal:
GetPageSizeStr:='Legal (8.5x14 inches, 216x356 mm)';
psLetter:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -