画面全体を印刷するには?

解決


AD太郎  2004-07-21 19:10:12  No: 10019

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;


Mr.XRAY  URL  2004-08-04 23:37:00  No: 10020

質問のタイトルは「画面全体」となっていますが,
本文中では,
>「画面全体にある2つ以上のFormを...」
となっています.

これは,一つ一つのFormを別の用紙に印刷するというこでしょうか.
それとも画面全体を1つの画像として印刷したいのでしょうか.

また,FormというのはDelphiで作成し,実行しているFormのことでしょうか.

それとも,他のアプリなどのウィンドウも含めたウィンドウのことでしょうか.
もし,ウィンドウの意味でしたら,たとえば,FormのButtonをクリックして表示
した,ダイアログ等も含むことになりますが...


AD太郎  2004-09-03 20:43:05  No: 10021

遅れてすいません。とりあえず画面全体を1つの画像として印刷したいです。


Mr.XRAY  URL  2004-09-05 06:44:43  No: 10022

あれまっ,レスが...

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;


Mr.XRAY  URL  2004-09-05 06:54:44  No: 10023

おっといけない,印刷の向きが横でしたね.以下の様にして下さい.
あとは適当に調整して下さい.

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;


AD太郎  2004-09-06 22:50:20  No: 10024

ありがとうございます。これを参考にプレビュー画面を作り、画面全体を印刷することが出来ました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加