⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pagesetup.pas

📁 delphi制作表格的控件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
// *****************************************************************************
//
// 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 + -