UniPrintForm.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:3k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit UniPrintForm;
  2. interface
  3. uses
  4.   SysUtils, Dialogs, ExtCtrls, DBCtrls, StdCtrls, Graphics,
  5.   Mask, DB, DBTables, Printers, FMTBcd, SqlExpr, ComCtrls,
  6.   Classes, Controls, Forms, math, DBXpress;
  7. type
  8.   TNavigator = class(TForm)
  9.     PrintAllButton: TButton;
  10.     SQLConnection1: TSQLConnection;
  11.     EmplData: TSQLDataSet;
  12.     ProgressBar1: TProgressBar;
  13.     EmplCountData: TSQLDataSet;
  14.     procedure PrintAllButtonClick(Sender: TObject);
  15.   private
  16.     { Private declarations }
  17.   public
  18.     { Public declarations }
  19.   end;
  20. var
  21.   Navigator: TNavigator;
  22. implementation
  23. {$R *.DFM}
  24. procedure PrintOutDataSet (data: TDataSet;
  25.   progress: TProgressBar; Font: TFont; maxSize: Integer = 30);
  26. var
  27.   PrintFile: TextFile;
  28.   I: Integer;
  29.   sizeStr: string;
  30.   oldFont: TFontRecall;
  31. begin
  32.   // assign the printer to a file
  33.   AssignPrn (PrintFile);
  34.   Rewrite (PrintFile);
  35.   // set the font and keep the original one
  36.   oldFont := TFontRecall.Create (Printer.Canvas.Font);
  37.   try
  38.     Printer.Canvas.Font := Font;
  39.     try
  40.       data.Open;
  41.       try
  42.         // print header (field names) in bold
  43.         Printer.Canvas.Font.Style := [fsBold];
  44.         for I := 0 to data.FieldCount - 1 do
  45.         begin
  46.           sizeStr := IntToStr (min (
  47.             data.Fields[i].DisplayWidth, maxSize));
  48.           Write (PrintFile, Format ('%-' + sizeStr + 's',
  49.             [data.Fields[i].FieldName]));
  50.         end;
  51.         Writeln (PrintFile);
  52.         // for each record of the dataset
  53.         Printer.Canvas.Font.Style := [];
  54.         while not data.EOF do
  55.         begin
  56.           // print out each field of the record
  57.           for I := 0 to data.FieldCount - 1 do
  58.           begin
  59.             sizeStr := IntToStr (min (
  60.               data.Fields[i].DisplayWidth, maxSize));
  61.             Write (PrintFile, Format ('%-' + sizeStr + 's',
  62.               [data.Fields[i].AsString]));
  63.           end;
  64.           Writeln (PrintFile);
  65.           // advance ProgressBar
  66.           progress.Position := progress.Position + 1;
  67.           data.Next;
  68.         end;
  69.       finally
  70.         // close the dataset
  71.         data.Close;
  72.       end;
  73.     finally
  74.       // reassign the original printer font
  75.       oldFont.Free;
  76.     end;
  77.   finally
  78.     // close the printer/file
  79.     System.CloseFile (PrintFile);
  80.   end;
  81. end;
  82. procedure TNavigator.PrintAllButtonClick(Sender: TObject);
  83. var
  84.   Font: TFont;
  85. begin
  86.   // set ProgressBar range
  87.   EmplCountData.Open;
  88.   try
  89.     ProgressBar1.Max := EmplCountData.Fields[0].AsInteger;
  90.   finally
  91.     EmplCountData.Close;
  92.   end;
  93.           Font := TFont.Create;
  94.   try
  95.     Font.Name := 'Courier New';
  96.     Font.Size := 9;
  97.     PrintOutDataSet (EmplData, ProgressBar1, Font);
  98.   finally
  99.     Font.Free;
  100.   end;
  101. end;
  102. end.