📄 pagesetup.pas
字号:
// *****************************************************************************
//
// Note: This free package of source code can only be used for reference and
// learning purpose, you can distribute it freely, but please do not use
// it for profit sake.
//
// Special thanks to: RICHBBS (www.delphibbs.com)
//
// Huang Qian, Feb 2002
// Wuhan University
//
// *****************************************************************************
unit PageSetup;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls, Spin, Buttons, Printers, PreviewForm;
type
TFormPageSetup = class(TForm)
PageCtlPageSetup: TPageControl;
TabSheetPageInfo: TTabSheet;
LabelDirection: TLabel;
BevelDirection: TBevel;
LabelStartPageNo: TLabel;
TabSheetMargin: TTabSheet;
LabelMargin: TLabel;
BevelMargin: TBevel;
LabelAlign: TLabel;
BevelAlign: TBevel;
ChkBoxHorzCenter: TCheckBox;
ChkBoxVertCenter: TCheckBox;
TabSheetHF: TTabSheet;
TabSheetTitle: TTabSheet;
LabelTitle: TLabel;
BevelTitle: TBevel;
BtnOk: TButton;
BtnCancel: TButton;
ImageVertPrint: TImage;
RBtnVPrint: TRadioButton;
ImageHorzPrint: TImage;
RBtnHPrint: TRadioButton;
LabelScale: TLabel;
BevelScale: TBevel;
LabelScalePercent: TLabel;
SEditScale: TSpinEdit;
BevelPageNo: TBevel;
LabelPageNo: TLabel;
LabelTMargin: TLabel;
SEditTMargin: TSpinEdit;
LabelBMargin: TLabel;
SEditBMargin: TSpinEdit;
LabelLMargin: TLabel;
SEditLMargin: TSpinEdit;
LabelRMargin: TLabel;
SEditRMargin: TSpinEdit;
LabelHSize: TLabel;
SEditHeaderSize: TSpinEdit;
LabelFSize: TLabel;
SEditFooterSize: TSpinEdit;
LabelHF: TLabel;
BevelHF: TBevel;
GbxPageRange: TGroupBox;
RBtnPrintAll: TRadioButton;
RBtnPageRange: TRadioButton;
LabelFromPage: TLabel;
LabelToPage: TLabel;
SEditFromPage: TSpinEdit;
SEditToPage: TSpinEdit;
TabSheetGrid: TTabSheet;
GbxHeader: TGroupBox;
CbxHeaderType: TComboBox;
EditHeader1: TEdit;
EditHeader2: TEdit;
EditHeader3: TEdit;
LabelHeader1: TLabel;
LabelHeader2: TLabel;
LabelHeader3: TLabel;
LabelHeaderType: TLabel;
GbxFooter: TGroupBox;
LabelFooter1: TLabel;
LabelFooter2: TLabel;
LabelFooter3: TLabel;
LabelFooterType: TLabel;
CbxFooterType: TComboBox;
EditFooter1: TEdit;
EditFooter2: TEdit;
EditFooter3: TEdit;
LbxTitleType: TListBox;
LabelHLineStyle: TLabel;
CbxHLineStyle: TComboBox;
LabelHLineWidth: TLabel;
SEditHLineWidth: TSpinEdit;
ChkBoxHDoubleLine: TCheckBox;
LabelFLineStyle: TLabel;
CbxFLineStyle: TComboBox;
LabelFLineWidth: TLabel;
SEditFLineWidth: TSpinEdit;
ChkBoxFDoubleLine: TCheckBox;
LabelTitleDistance: TLabel;
SEditTitleDistance: TSpinEdit;
LabelTitleContent: TLabel;
LabelTitleFont: TLabel;
LabelTail: TLabel;
BevelTail: TBevel;
LbxTailType: TListBox;
LabelTailDistance: TLabel;
SEditTailDistance: TSpinEdit;
LabelTailContent: TLabel;
LabelTailFont: TLabel;
GbxSplit: TGroupBox;
RBtnHorzSplit: TRadioButton;
RBtnVertSplit: TRadioButton;
ImageHorzSplit: TImage;
ImageVertSplit: TImage;
LabelGridInfo: TLabel;
BevelGridInfo: TBevel;
ChkBoxMonoColored: TCheckBox;
ChkBoxPrintGridLine: TCheckBox;
ChkBoxPrintColTitle: TCheckBox;
ChkBoxPrintRowTitle: TCheckBox;
ChkBoxPrintFixedCols: TCheckBox;
ChkBoxPrintFixedRows: TCheckBox;
GbxConjunction: TGroupBox;
LabelTopConjunction: TLabel;
EditTopConjunction: TEdit;
LabelBottomConjunction: TLabel;
EditBottomConjunction: TEdit;
RBtnPrintConjunction: TRadioButton;
RBtnNoConjunction: TRadioButton;
BtnPrinter: TButton;
FontDialogPageSetup: TFontDialog;
SEditStartPageNo: TSpinEdit;
BtnInsertPageNo: TSpeedButton;
SBtnInsertPageCount: TSpeedButton;
SBtnInsertDate: TSpeedButton;
SBtnInsertTime: TSpeedButton;
SEditFont: TSpeedButton;
BtnTitleFont: TSpeedButton;
MemoTitleContent: TMemo;
BtnTailFont: TSpeedButton;
MemoTailContent: TMemo;
LabelTitleExtent: TLabel;
SEditTitleExtent: TSpinEdit;
BevelTitleContent: TBevel;
BevelTailContent: TBevel;
LabelTailExtent: TLabel;
SEditTailExtent: TSpinEdit;
procedure ImageHorzSplitClick(Sender: TObject);
procedure ImageVertSplitClick(Sender: TObject);
procedure ImageVertPrintClick(Sender: TObject);
procedure ImageHorzPrintClick(Sender: TObject);
procedure BtnPrinterClick(Sender: TObject);
procedure RBtnVPrintClick(Sender: TObject);
procedure RBtnHPrintClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure LbxTitleTypeClick(Sender: TObject);
procedure LbxTailTypeClick(Sender: TObject);
procedure CbxHeaderTypeChange(Sender: TObject);
procedure CbxFooterTypeChange(Sender: TObject);
procedure BtnInsertPageNoClick(Sender: TObject);
procedure SBtnInsertPageCountClick(Sender: TObject);
procedure SBtnInsertDateClick(Sender: TObject);
procedure SBtnInsertTimeClick(Sender: TObject);
procedure SEditFontClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure MemoTitleContentChange(Sender: TObject);
procedure MemoTailContentChange(Sender: TObject);
procedure SEditTitleDistanceChange(Sender: TObject);
procedure SEditTailDistanceChange(Sender: TObject);
procedure BtnTitleFontClick(Sender: TObject);
procedure BtnTailFontClick(Sender: TObject);
procedure BtnOkClick(Sender: TObject);
private
{ Private declarations }
FMainTitle, FTitle1, FTitle2, FTitle3, FTitle4, FTitle5, FTitle6 : TTitle;
FTail1, FTail2, FTail3, FTail4, FTail5, FTail6: TTitle;
FTitle: TTitle;
FTail: TTail;
FPaperSize, FPageWidth, FPageHeight: Integer;
procedure InsertEditText(AText: string);
procedure AssignEditProp(AHeader: Pointer; AEdit: TEdit);
public
{ Public declarations }
ParentGrid: Pointer;
end;
implementation
uses EasyGrid;
{$R *.DFM}
procedure TFormPageSetup.FormCreate(Sender: TObject);
begin
FMainTitle := TTitle.Create;
FTitle1 := TTitle.Create;
FTitle2 := TTitle.Create;
FTitle3 := TTitle.Create;
FTitle4 := TTitle.Create;
FTitle5 := TTitle.Create;
FTitle6 := TTitle.Create;
FTail1 := TTail.Create;
FTail2 := TTail.Create;
FTail3 := TTail.Create;
FTail4 := TTail.Create;
FTail5 := TTail.Create;
FTail6 := TTail.Create;
end;
procedure TFormPageSetup.FormDestroy(Sender: TObject);
begin
FMainTitle.Free;
FTitle1.Free;
FTitle2.Free;
FTitle3.Free;
FTitle4.Free;
FTitle5.Free;
FTitle6.Free;
FTail1.Free;
FTail2.Free;
FTail3.Free;
FTail4.Free;
FTail5.Free;
FTail6.Free;
end;
procedure TFormPageSetup.ImageHorzSplitClick(Sender: TObject);
begin
RBtnHorzSplit.Checked := True;
RBtnHorzSplit.SetFocus;
end;
procedure TFormPageSetup.ImageVertSplitClick(Sender: TObject);
begin
RBtnVertSplit.Checked := True;
RBtnVertSplit.SetFocus;
end;
procedure TFormPageSetup.ImageVertPrintClick(Sender: TObject);
begin
RBtnVPrint.Checked := True;
RBtnVPrint.SetFocus;
end;
procedure TFormPageSetup.ImageHorzPrintClick(Sender: TObject);
begin
RBtnHPrint.Checked := True;
RBtnHPrint.SetFocus;
end;
procedure TFormPageSetup.BtnPrinterClick(Sender: TObject);
begin
// 设置打印机纸张大小为指定的大小
SetPaperSize(FPaperSize,
Round(FPageHeight / ScreenToPrinterY * 10 / PrinterPixelsPerMmY),
Round(FPageWidth / ScreenToPrinterX * 10 / PrinterPixelsPerMmX));
if TEasyGrid(ParentGrid).PrinterSetup then
begin
RBtnHPrint.Checked := (Printer.Orientation = poLandscape);
RBtnVPrint.Checked := (Printer.Orientation = poPortrait);
GetPaperSize(FPaperSize, FPageHeight, FPageWidth);
// 如果是自定义纸张,则取自定义尺寸
if FPaperSize = 256 then
begin
FPageWidth := Round(FPageWidth / 10 * PrinterPixelsPerMmX * ScreenToPrinterX);
FPageHeight := Round(FPageHeight / 10 * PrinterPixelsPerMmY * ScreenToPrinterY);
end
// 否则取预定义尺寸
else
begin
FPageWidth := Round(Printer.PageWidth * ScreenToPrinterX);
FPageHeight := Round(Printer.PageHeight * ScreenToPrinterY);
end;
end;
end;
procedure TFormPageSetup.RBtnVPrintClick(Sender: TObject);
begin
Printer.Orientation := poPortrait;
FPageWidth := Round(Printer.PageWidth * ScreenToPrinterX);
FPageHeight := Round(Printer.PageHeight * ScreenToPrinterY);
end;
procedure TFormPageSetup.RBtnHPrintClick(Sender: TObject);
begin
Printer.Orientation := poLandscape;
FPageWidth := Round(Printer.PageWidth * ScreenToPrinterX);
FPageHeight := Round(Printer.PageHeight * ScreenToPrinterY);
end;
procedure TFormPageSetup.FormShow(Sender: TObject);
var
Grid: TEasyGrid;
begin
Grid := TEasyGrid(ParentGrid);
with Grid.EasyGridPageInfo.DetailPageInfo, Grid.EasyGridPageInfo.CommonPageInfo do
begin
// 第一页上的控件
RBtnHPrint.Checked := (Orientation = poLandscape);
RBtnVPrint.Checked := (Orientation = poPortrait);
SEditScale.Value := Scale;
SEditStartPageNo.Value := StartPageNo;
RBtnPrintAll.Checked := PrintAllPages;
RBtnPageRange.Checked := not PrintAllPages;
SEditFromPage.Value := StartPage + 1;
SEditToPage.Value := EndPage + 1;
FPaperSize := PaperSize;
FPageWidth := PageWidth;
FPageHeight := PageHeight;
// 第二页上的控件
SEditTMargin.Value := Round(Margin.Top / ScreenPixelsPerMmY);
SEditBMargin.Value := Round(Margin.Bottom / ScreenPixelsPerMmY);
SEditLMargin.Value := Round(Margin.Left / ScreenPixelsPerMmX);
SEditRMargin.Value := Round(Margin.Right / ScreenPixelsPerMmX);
SEditHeaderSize.Value := Round(HeaderExtent / ScreenPixelsPerMmY);
SEditFooterSize.Value := Round(FooterExtent / ScreenPixelsPerMmY);
ChkBoxHorzCenter.Checked := HorzCenter;
ChkBoxVertCenter.Checked := VertCenter;
// 第三页上的控件
CbxHeaderType.ItemIndex := 0;
CbxHeaderTypeChange(Self);
CbxFooterType.ItemIndex := 0;
CbxFooterTypeChange(Self);
// 第四页上的控件
LbxTitleType.ItemIndex := 0;
LbxTitleTypeClick(Self);
LbxTailType.ItemIndex := 0;
LbxTailTypeClick(Self);
SEditTitleExtent.Value := Round(TitleExtent / ScreenPixelsPerMmY);
SEditTailExtent.Value := Round(TailExtent / ScreenPixelsPerMmY);
// 第五页上的控件
RBtnHorzSplit.Checked := HorzSplit;
RBtnVertSplit.Checked := not HorzSplit;
RBtnPrintConjunction.Checked := PrintConjunction;
RBtnNoConjunction.Checked := not PrintConjunction;
EditTopConjunction.Text := TopConjunctionText;
EditBottomConjunction.Text := BottomConjunctionText;
ChkBoxMonoColored.Checked := MonoColored;
ChkBoxPrintGridLine.Checked := PrintGridLine;
ChkBoxPrintColTitle.Checked := PrintColTitle;
ChkBoxPrintRowTitle.Checked := PrintRowTitle;
ChkBoxPrintFixedCols.Checked := PrintFixedCols;
ChkBoxPrintFixedRows.Checked := PrintFixedRows;
FMainTitle.Assign(MainTitle);
FTitle1.Assign(Title1);
FTitle2.Assign(Title2);
FTitle3.Assign(Title3);
FTitle4.Assign(Title4);
FTitle5.Assign(Title5);
FTitle6.Assign(Title6);
FTail1.Assign(Tail1);
FTail2.Assign(Tail2);
FTail3.Assign(Tail3);
FTail4.Assign(Tail4);
FTail5.Assign(Tail5);
FTail6.Assign(Tail6);
end;
end;
procedure TFormPageSetup.LbxTitleTypeClick(Sender: TObject);
procedure GetTitleProp;
begin
with FTitle do
begin
MemoTitleContent.Clear;
MemoTitleContent.Lines.Add(Content);
MemoTitleContent.SelStart := 1;
MemoTitleContent.SelLength := 0;
MemoTitleContent.Font.Name := FontName;
MemoTitleContent.Font.Size := FontSize;
MemoTitleContent.Font.Style := FontStyle;
MemoTitleContent.Font.Color := FontColor;
SEditTitleDistance.Value := Round(Distance / ScreenPixelsPerMmY);
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -