home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 December / Chip_2001-12_cd1.bin / zkuste / delphi / kompon / d345 / PPREV.ZIP / BenPreview / PageSetupDlg.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-04-11  |  7.3 KB  |  261 lines

  1. unit PageSetupDlg;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, ExtCtrls, PrevPrinter, Buttons, Printers, FormSettings;
  8.  
  9. type
  10.   TPageSetupForm = class(TForm)
  11.     PageMarginGroup: TGroupBox;
  12.     InchBut: TRadioButton;
  13.     CentBut: TRadioButton;
  14.     Label1: TLabel;
  15.     Label2: TLabel;
  16.     Label3: TLabel;
  17.     Label4: TLabel;
  18.     LeftEdit: TEdit;
  19.     RightEdit: TEdit;
  20.     TopEdit: TEdit;
  21.     BotEdit: TEdit;
  22.     PageOrientGroup: TGroupBox;
  23.     PortBut: TRadioButton;
  24.     LandBut: TRadioButton;
  25.     PortShape: TShape;
  26.     LandShape: TShape;
  27.     OKBut: TBitBtn;
  28.     CancelBut: TBitBtn;
  29.     HeaderGroup: TGroupBox;
  30.     Label5: TLabel;
  31.     HeaderEdit: TEdit;
  32.     Label6: TLabel;
  33.     HdrMarginEdit: TEdit;
  34.     HdrLeftBut: TRadioButton;
  35.     HdrCenterBut: TRadioButton;
  36.     HdrRightBut: TRadioButton;
  37.     HdrFontBut: TBitBtn;
  38.     FooterGroup: TGroupBox;
  39.     Label7: TLabel;
  40.     Label8: TLabel;
  41.     FooterEdit: TEdit;
  42.     FtrMarginEdit: TEdit;
  43.     FtrLeftBut: TRadioButton;
  44.     FtrCenterBut: TRadioButton;
  45.     FtrRightBut: TRadioButton;
  46.     FtrFontBut: TBitBtn;
  47.     PageNumGroup: TGroupBox;
  48.     Panel1: TPanel;
  49.     PageBotBut: TRadioButton;
  50.     PageTopBut: TRadioButton;
  51.     PageNoneBut: TRadioButton;
  52.     Panel2: TPanel;
  53.     PageLeftBut: TRadioButton;
  54.     PageCenterBut: TRadioButton;
  55.     PageRightBut: TRadioButton;
  56.     Label9: TLabel;
  57.     PageNumEdit: TEdit;
  58.     PageNumFontBut: TBitBtn;
  59.     PrinterSetupBut: TBitBtn;
  60.     PrinterSetupDialog1: TPrinterSetupDialog;
  61.     FooterFontDialog: TFontDialog;
  62.     HeaderFontDialog: TFontDialog;
  63.     PageNumFontDialog: TFontDialog;
  64.     SetDefaultBut: TBitBtn;
  65.     FormSettings1: TFormSettings;
  66.     procedure FormShow(Sender: TObject);
  67.     procedure OKButClick(Sender: TObject);
  68.     procedure PortButClick(Sender: TObject);
  69.     procedure PrinterSetupButClick(Sender: TObject);
  70.     procedure PageNumFontButClick(Sender: TObject);
  71.     procedure HdrFontButClick(Sender: TObject);
  72.     procedure FtrFontButClick(Sender: TObject);
  73.     procedure SetDefaultButClick(Sender: TObject);
  74.   protected
  75.     procedure  Data_To_Form;
  76.     procedure  Form_To_Data;
  77.     procedure  EnumToChkBox(n: integer; p: TWinControl);
  78.     function   ChkBoxToEnum(p: TWinControl): integer;
  79.     procedure  FontToBut(f: TFont; b: TButton; fd: TFontDialog);
  80.     procedure  DoFontDlg(b: TButton; fd: TFontDialog);
  81.   public
  82.     TextOpt    : TTextOptions;
  83.     pp         : TPreviewPrinter;
  84.     function   Execute: integer;
  85.     procedure  GetDefaults;
  86.   end;
  87.  
  88. var
  89.   PageSetupForm: TPageSetupForm;
  90.  
  91. implementation
  92.  
  93. {$R *.DFM}
  94.  
  95. function TPageSetupForm.Execute: integer;
  96. begin
  97.    Result := ShowModal;
  98. end;
  99.  
  100. procedure TPageSetupForm.FormShow(Sender: TObject);
  101. begin
  102.    Data_To_Form;
  103. end;
  104.  
  105. procedure TPageSetupForm.OKButClick(Sender: TObject);
  106. begin
  107.    Form_To_Data;
  108. end;
  109.  
  110. procedure TPageSetupForm.PrinterSetupButClick(Sender: TObject);
  111. begin
  112.    PrinterSetupDialog1.Execute;
  113. end;
  114.  
  115. procedure TPageSetupForm.EnumToChkBox(n: integer; p: TWinControl);
  116. var
  117.    i : integer;
  118.    c : TControl;
  119. begin
  120.    for i := 0 to p.ControlCount-1 do begin
  121.       c := p.Controls[i];
  122.       if c is TRadioButton then
  123.          if c.Tag = n then
  124.             TRadioButton(c).Checked := True;
  125.    end;
  126. end;
  127.  
  128. function TPageSetupForm.ChkBoxToEnum(p: TWinControl): integer;
  129. var
  130.    i : integer;
  131.    c : TControl;
  132. begin
  133.    Result := -1;
  134.    for i := 0 to p.ControlCount-1 do begin
  135.       c := p.Controls[i];
  136.       if c is TRadioButton then
  137.          if TRadioButton(c).Checked then
  138.             Result := c.Tag;
  139.    end;
  140. end;
  141.  
  142. procedure TPageSetupForm.FontToBut(f: TFont; b: TButton; fd: TFontDialog);
  143. begin
  144.    fd.Font := f;
  145.    b.Caption := Format('%s %d pt', [f.Name, f.Size]);
  146. end;
  147.  
  148. procedure TPageSetupForm.DoFontDlg(b: TButton; fd: TFontDialog);
  149. begin
  150.    if fd.Execute then
  151.       FontToBut(fd.Font, b, fd);
  152. end;
  153.  
  154. procedure TPageSetupForm.PortButClick(Sender: TObject);
  155. var
  156.    b : boolean;
  157. begin
  158.    b := PortBut.Checked;
  159.    PortShape.Visible := b;
  160.    LandShape.Visible := not b;
  161. end;
  162.  
  163. procedure TPageSetupForm.PageNumFontButClick(Sender: TObject);
  164. begin
  165.    DoFontDlg(PageNumFontBut, PageNumFontDialog);
  166. end;
  167.  
  168. procedure TPageSetupForm.HdrFontButClick(Sender: TObject);
  169. begin
  170.    DoFontDlg(HdrFontBut, HeaderFontDialog);
  171. end;
  172.  
  173. procedure TPageSetupForm.FtrFontButClick(Sender: TObject);
  174. begin
  175.    DoFontDlg(FtrFontBut, FooterFontDialog);
  176. end;
  177.  
  178. procedure TPageSetupForm.Data_To_Form;
  179. begin
  180.    // Page Margins
  181.    EnumToChkBox(integer(pp.Units), PageMarginGroup);
  182.    LeftEdit.Text  := Format('%1.3n', [TextOpt.MarginLeft]);
  183.    RightEdit.Text := Format('%1.3n', [TextOpt.MarginRight]);
  184.    TopEdit.Text   := Format('%1.3n', [TextOpt.MarginTop]);
  185.    BotEdit.Text   := Format('%1.3n', [TextOpt.MarginBottom]);
  186.  
  187.    // Page Orientation
  188.    EnumToChkBox(integer(pp.Orientation), PageOrientGroup);
  189.    PortButClick(nil);
  190.  
  191.    // Page Number Options
  192.    EnumToChkBox(integer(TextOpt.PrintPageNumber), Panel1);
  193.    EnumToChkBox(integer(TextOpt.PageNumAlign), Panel2);
  194.    PageNumEdit.Text := TextOpt.PageNumText;
  195.    FontToBut(TextOpt.PageNumFont, PageNumFontBut, PageNumFontDialog);
  196.  
  197.    // Header
  198.    HeaderEdit.Text := TextOpt.Header;
  199.    HdrMarginEdit.Text := Format('%1.3n', [TextOpt.HeaderMargin]);
  200.    EnumToChkBox(integer(TextOpt.HeaderAlign), HeaderGroup);
  201.    FontToBut(TextOpt.HeaderFont, HdrFontBut, HeaderFontDialog);
  202.  
  203.    // Footer
  204.    FooterEdit.Text := TextOpt.Footer;
  205.    FtrMarginEdit.Text := Format('%1.3n', [TextOpt.FooterMargin]);
  206.    EnumToChkBox(integer(TextOpt.FooterAlign), FooterGroup);
  207.    FontToBut(TextOpt.FooterFont, FtrFontBut, FooterFontDialog);
  208. end;
  209.  
  210. procedure TPageSetupForm.Form_To_Data;
  211. begin
  212.    // Page Margins
  213.    pp.Units := TUnits(ChkBoxToEnum(PageMarginGroup));
  214.    TextOpt.MarginLeft   := StrToFloat(LeftEdit.Text);
  215.    TextOpt.MarginTop    := StrToFloat(TopEdit.Text);
  216.    TextOpt.MarginRight  := StrToFloat(RightEdit.Text);
  217.    TextOpt.MarginBottom := StrToFloat(BotEdit.Text);
  218.  
  219.    // Page Orientation
  220.    pp.Orientation := TPrinterOrientation(ChkBoxToEnum(PageOrientGroup));
  221.  
  222.    // Page Number Options
  223.    TextOpt.PrintPageNumber := TPrintPageNumber(ChkBoxToEnum(Panel1));
  224.    TextOpt.PageNumAlign    := TAlignment(ChkBoxToEnum(Panel2));
  225.    TextOpt.PageNumText     := PageNumEdit.Text;
  226.    TextOpt.PageNumFont     := PageNumFontDialog.Font;
  227.  
  228.    // Header
  229.    TextOpt.Header       := HeaderEdit.Text;
  230.    TextOpt.HeaderMargin := StrToFloat(HdrMarginEdit.Text);
  231.    TextOpt.HeaderAlign  := TAlignment(ChkBoxToEnum(HeaderGroup));
  232.    TextOpt.HeaderFont   := HeaderFontDialog.Font;
  233.  
  234.    // Footer
  235.    TextOpt.Footer       := FooterEdit.Text;
  236.    TextOpt.FooterMargin := StrToFloat(FtrMarginEdit.Text);
  237.    TextOpt.FooterAlign  := TAlignment(ChkBoxToEnum(FooterGroup));
  238.    TextOpt.FooterFont   := FooterFontDialog.Font;
  239. end;
  240.  
  241.  
  242. procedure TPageSetupForm.SetDefaultButClick(Sender: TObject);
  243. begin
  244.    if MessageDlg('Are you sure you want to save these values as the Default Settings?',
  245.       mtWarning, mbYesNoCancel, 0) = mrYes then begin
  246.       FormSettings1.SaveValues := True;
  247.       FormSettings1.SaveSettings;
  248.       FormSettings1.SaveValues := False;
  249.    end;
  250. end;
  251.  
  252. procedure TPageSetupForm.GetDefaults;
  253. begin
  254.    Data_To_Form;
  255.    FormSettings1.LoadSettings;
  256.    Form_To_Data;
  257. end;
  258.  
  259.  
  260. end.
  261.