今回はDelphi/400のアプリケーションで画面を直接プリンタに印刷する方法についてご紹介します。
Delphi/400では帳票ツール等を使って帳票機能を作成することがありますが、
ケースによっては画面をそのままプリンタへ印刷したい場合もあるかと思います。
画面を印刷する場合、画面となるフォームにはPrintメソッドが用意されています。
これを使うだけで既定のプリンタを使って画面を印刷することができます。
// 例)
Form1.Print; // Form1がSelfであれば省略も可
またプリンタを選択する場合は、
TPrintDialogダイアログコンポーネントを使用すれば簡単に実装可能です。
// 例)
if PrintDialog1.Execute then
begin
Print;
end;
ただし、画面は何の調整もなしに印刷されますので、
用紙にフィットさせる必要がある場合はPrintscaleプロパティが便利です。
// 例)
if PrintDialog1.Execute then
begin
Printscale := poPrintToFit; // 印刷をフィットさせる
Print;
end;
帳票ではありませんが、画面に表示された内容を数行でプリンタに印刷できます。
非常に便利な機能ですので、是非ご活用下さい。
画面全体ではなく指定のコンポーネントのみを印刷したい場合は、
Canvasを使って描画したものを印刷させます。
例えばImage1(TImage)だけを印刷する場合は
以下のようにロジックを記述します。
BeginDocメソッドで印刷ジョブを開始し、
EndDocメソッドで印刷ジョブを終了し実際の印刷を開始します。
印刷の内容をPrinterのCanvasプロパティに描画します。
今回大きさは用紙サイズに合わせて拡大しています。
// 例)
procedure TForm1.Button1Click(Sender: TObject);
var
rect : TRect ;
begin
if MessageDlg('印刷しますか?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
begin
// ページを印刷する
with Printer do
begin
BeginDoc;
// 大きさを指定
rect.Top := 0;
rect.Left := 0;
rect.Bottom := Trunc(( PageWidth / Image1.Picture.Width) * Image1.Picture.Height);
rect.Right := PageWidth;
// ファイルを描画
Printer.Canvas.StretchDraw(rect, Image1.Picture.Graphic);
EndDoc;
end;
end;
end;
<関連記事>
【Delphi】画面キャプチャー機能の実装 | Migaro. Tips
(ミガロ.情報マガジン「MIGARO News!!」Vol.174 2015年5月号より)
(画像印刷については、旧Tips Delphi/400 入門 Tips19「プログラムからの印刷」より)