☆簡単な印刷サンプル

[Windowsフォームアプリケーション]
.NET Framework SDKを見ながら、簡単な印刷サンプルを作ってみました。
このサンプルは、テキストファイルを読み込んでPrintDialogで設定された内容で印刷し
ます。(実際には印刷せずにFuji Xerox Docuworksに印刷して確認しました。)
 1.Windowsフォームアプリケーションを新規作成します。
 2.Button1, PrintDocument1, PrintDialog1を配置します。
 3.usesに System.IO を追加します。
 4.フォームのPrivate宣言に
    StreamToPrint: StreamReader;
    PrintFont: System.Drawing.Font;
   と記述します。
 5.Button1のClickイベントとPrintDocument1のPrintPageイベントに
   下記のプログラムを設定します。

procedure TWinForm1.Button1_Click(sender: System.Object; 
 e: System.EventArgs);
begin
 PrintDialog1.Document := PrintDocument1;

 if PrintDialog1.ShowDialog <> 
   System.Windows.Forms.DialogResult.OK then Exit;

 PrintDocument1.PrinterSettings := PrintDialog1.PrinterSettings;

 StreamToPrint := StreamReader.Create('c:\PrintMe.txt');
         ↑↑テキストファイル名は適当に設定して。
 try
  PrintFont := System.Drawing.Font.Create('Arial', 10);
  PrintDocument1.Print;
 finally
  StreamToPrint.Close;
 end;
end;


procedure TWinForm1.PrintDocument1_PrintPage(sender: System.Object;
 e: System.Drawing.Printing.PrintPageEventArgs);
var
 lpp: Single;
 yPos: Single;
 Count: Integer;
 LeftMargin: Single;
 TopMargin: Single;
 Line: String;
begin
 Count := 0;
 LeftMargin := e.MarginBounds.Left;
 TopMargin := e.MarginBounds.Top;

 lpp := e.MarginBounds.Height / PrintFont.GetHeight(e.Graphics);
 Line := StreamToPrint.ReadLine;

 while (Count < lpp) do
 begin
  yPos := TopMargin + (Count * PrintFont.GetHeight(e.Graphics));
  e.Graphics.DrawString (Line, PrintFont, Brushes.Black, 
   LeftMargin, yPos, StringFormat.Create);
  Inc(Count);
  if (Count < lpp) then
   Line := StreamToPrint.ReadLine;
 end;

 //これではLineが偶然空白行だった場合、
 //次ページが印刷されないのだがサンプルということでお許しを(^^;
 e.HasMorePages := (Line <> ''); 
end;

|