16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:Panelをそのままプリント"
この発言は #00723 TN さんのPanelをそのままプリント に対するコメントです
もっと簡単にできました.ホントにそのまんま.
普通にPanelを貼って普通にコンポを載せておき,ボタンを押すと,
縦横を紙に合わせて拡縮して紙いっぱいに印刷します.WinControlとその
BorderStyleもいちおうOK.
等倍でない場合フォントの都合でLabelの字が切れたりします.
縦横等倍にすればOK
Pen,Brushなどに工夫の余地有り.
procedure TForm1.Button1Click(Sender: TObject);
var
DC: HDC;
DevPPIX, DevPPIY: integer;
begin
try
Printer.BeginDoc;
DC := Printer.Canvas.Handle;
DevPPIX := GetDeviceCaps( DC, LOGPIXELSX );
DevPPIY := GetDeviceCaps( DC, LOGPIXELSY );
SetMapMode( DC, MM_ANISOTROPIC );
SetViewPortExtEx(DC, DevPPIX, DevPPIY, nil );
SetViewPortOrgEx(DC, 0, 0, nil );
SetWindowExtEx( DC,
Round( PagePanel.Width * DevPPIX / Printer.PageWidth ),
Round( PagePanel.Height * DevPPIY / Printer.PageHeight ), nil);
// 幅を合わせて等倍
// Round( PagePanel.Width * DevPPIX / Printer.PageWidth ), nil);
PagePanel.PaintTo(DC, 0, 0);
finally
Printer.EndDoc;
end;
end;
プリンタ:BJC455J モノクロインク 360X360dpi
ドライバ:Cannon BJ Raster Printer Driver V2.31
OS:Windows NT4.0 SP3
TN(CQJ01721)
Original document by TN 氏 ID:(CQJ01721)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|