RichEditの内容もForm.Printで印刷させるには?

解決


Quest  2011-04-06 19:53:47  No: 40425

Delphi2007でフォームにRichEditを載せ、Form.Printで印刷したところ
RichEditの中身だけ印刷されません。
他のコンポもあるので、出来ればForm.Print一発で印刷したいのですが
何かいい方法はないでしょうか?


Mr.XRAY  2011-04-08 22:42:14  No: 40426

こんにちは,Mr.XRAYです.

>出来ればForm.Print一発で印刷したいのですが

ということですが,

>Form.Printで印刷したところ
>RichEditの中身だけ印刷されません。

なので無理かも知れません.
以下のスレッドの下の方のコードが参考にならないでしょうか.
動作確認はしていません.ご了承ください.

checkboxとradiobuttonの印刷について
https://www.petitmonte.com/bbs/answers?question_id=6524


Quest  2011-04-09 01:08:07  No: 40427

Mr.XRAYさん、こんにちは。

リンク先を参考にして、望む処理ができました。
「一発」という訳にはいきませんでしたが
大した手間も無くできました。
今後のためにコードを載せておきます。
ありがとうございました。

下記のコードで
if PrinterSetupDialog1.Execute then Form1.Print;
と、同等の結果が得られます。

function PrintWindow(hwnd: HWND; hdcBlt: HDC; nFlags: UINT): BOOL; stdcall; external 'user32.dll';
var
  BMP: TBitmap;
  ALeft: Integer;
  ATop: Integer;
  AWidth: Integer;
  AHeight: Integer;
  ARect: TRect;
begin
  if PrinterSetupDialog1.Execute then
  begin
    BMP := TBitmap.Create;
    try
      BMP.Height := Form1.ClientHeight;
      BMP.Width := Form1.ClientWidth;
      BMP.Canvas.Lock;
      try
        PrintWindow(Form1.Handle, BMP.Canvas.Handle, 1);
      finally
        BMP.Canvas.Unlock;
      end;
      Printer.BeginDoc;
      try
        ALeft   := 0;
        ATop    := 0;
        AWidth  := Printer.PageWidth;
        AHeight := Trunc (AWidth * BMP.Height / BMP.Width);
        ARect := Rect(ALeft, ATop, AWidth, AHeight);
        Printer.Canvas.StretchDraw(ARect, BMP);
      finally
        Printer.EndDoc;
      end;
    finally
      BMP.Free;
    end;
  end;
end;


Quest  2011-04-09 01:12:56  No: 40428

おっと、これだとちょっと誤解しそうですね。

function PrintWindow(hwnd: HWND; hdcBlt: HDC; nFlags: UINT): BOOL; stdcall; external 'user32.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
  BMP: TBitmap;
  ALeft: Integer;
  ・
  ・
  ・
こういう事です。


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

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






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