Form1つの印刷は出来るのですが、画面全体にある2つ以上のFormを印刷できません。色々やってもわからないのでご教授お願いします。
procedure TForm3.SpeedButton1Click(Sender: TObject);
begin
if PrintDialog1.Execute then
begin
Screen.Cursor := crHourGlass; //カーソルチェンジ
with Printer do
begin
try
Orientation := poLandscape; //印刷方向を横にセット
BeginDoc; //印刷設定
try
ここにどういうコードを書いたらいいでしょうか?
EndDoc; //印刷開始
finally
Screen.Cursor := crDefault; //カーソルを戻す
end;
end;
end;
end;
質問のタイトルは「画面全体」となっていますが,
本文中では,
>「画面全体にある2つ以上のFormを...」
となっています.
これは,一つ一つのFormを別の用紙に印刷するというこでしょうか.
それとも画面全体を1つの画像として印刷したいのでしょうか.
また,FormというのはDelphiで作成し,実行しているFormのことでしょうか.
それとも,他のアプリなどのウィンドウも含めたウィンドウのことでしょうか.
もし,ウィンドウの意味でしたら,たとえば,FormのButtonをクリックして表示
した,ダイアログ等も含むことになりますが...
遅れてすいません。とりあえず画面全体を1つの画像として印刷したいです。
あれまっ,レスが...
https://www.petitmonte.com/bbs/answers?question_id=1299
とか,
http://homepage2.nifty.com/Mr_XRAY/Halbow/Notes/N009.html
を参考にしてみて下さい.また,以下のコードも試してみて下さい.
ただし,私が勝手にデスクトップ画面のキャプチャーと解釈しています.
このコードの中のplSetPrinter1.PaperWidthは用紙幅です.取得方法は
なんとか自力で...
//====================================================================
// デスクトップ画面を印刷
// プリンタへの印刷領域を決めるために,拙作のプリンタ設定コンポーネ
// ントを使用.usesにPrintersが必要
//====================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
DesktopDC: HDc;
DesktopCanvas: TCanvas;
DesktopRect: TRect;
ARect: TRect;
AWidth : Integer;
begin
{自分自身を印刷しないために最小化}
Application.Minimize;
{デスクトップのデバイスコンテキストハンドルを取得}
DesktopDC := GetWindowDC(GetDeskTopWindow);
try
{デスクトップ用のTCanvasを生成}
DesktopCanvas := TCanvas.Create;
{Canvasのハンドルにデバイスコンテキストハンドルをアサイン}
DesktopCanvas.Handle := DesktopDC;
{サイズを取得}
DesktopRect := Rect(0, 0, Screen.Width, Screen.Height);
{印刷領域の設定}
ARect.Left :=200;
ARect.Top :=200;
ARect.Right :=plSetPrinter1.PaperWidth-300;
AWidth :=(ARect.Right-ARect.Left);
ARect.Bottom:=Trunc(AWidth*(Screen.Height/Screen.Width))+ARect.Top;
{印刷}
Printer.BeginDoc;
try
Printer.Canvas.CopyRect(ARect, DesktopCanvas, DesktopRect);
finally
Printer.EndDoc;
end;
finally
{デバイスコンテキストハンドルを開放}
ReleaseDC(GetDesktopWindow, DesktopDC);
{このFormのサイズを元に戻す}
Application.Restore;
end;
end;
おっといけない,印刷の向きが横でしたね.以下の様にして下さい.
あとは適当に調整して下さい.
procedure TForm1.Button1Click(Sender: TObject);
var
DesktopDC: HDc;
DesktopCanvas: TCanvas;
DesktopRect: TRect;
ARect: TRect;
AWidth : Integer;
begin
{自分自身を印刷しないために最小化}
Application.Minimize;
{デスクトップのデバイスコンテキストハンドルを取得}
DesktopDC := GetWindowDC(GetDeskTopWindow);
try
{デスクトップ用のTCanvasを生成}
DesktopCanvas := TCanvas.Create;
{Canvasのハンドルにデバイスコンテキストハンドルをアサイン}
DesktopCanvas.Handle := DesktopDC;
{サイズを取得}
DesktopRect := Rect(0, 0, Screen.Width, Screen.Height);
{印刷方向を横に}
plSetPrinter1.Orientation:=poLandscape;
{印刷領域の設定}
ARect.Left :=600;
ARect.Top :=150;
ARect.Right :=plSetPrinter1.PaperWidth-700;
AWidth :=(ARect.Right-ARect.Left);
ARect.Bottom:=Trunc(AWidth*(Screen.Height/Screen.Width))+ARect.Top;
{印刷}
Printer.BeginDoc;
try
Printer.Canvas.CopyRect(ARect, DesktopCanvas, DesktopRect);
finally
Printer.EndDoc;
end;
finally
{デバイスコンテキストハンドルを開放}
ReleaseDC(GetDesktopWindow, DesktopDC);
{このFormのサイズを元に戻す}
Application.Restore;
end;
end;
ありがとうございます。これを参考にプレビュー画面を作り、画面全体を印刷することが出来ました。
ツイート | ![]() |