XE6のFMXでTPanelの印刷

解決


yTake  2020-11-29 10:27:18  No: 149416

こんにちは、

XE6のFMXでTFormにTPanelを配置しTPaintBoxやTButtonなどを配置しています。
そのTPanel部分を印刷したいのですが、調べたところXE3ではTPanelをTBitmapとしてキャプチャ(TPanel.MakeScreenshot関数でビットマップを生成)して、それをTPrintDialogへ渡す手法が可能だった様です。
しかし、XE6のTPanelでは、TPanelにMakeScreeshot関数が実装されていない様です。
他に、TPanelの状態をキャプチャできる関数はなさそうです。
TPanelの部分だけ印刷する手法が変わったのでしょうか?
ご教授をお願い出来ると幸です。

DELPHI XE6 FMX+Windows 10
です。

よろしくお願いします。


yTake  2020-11-29 10:44:32  No: 149417

すみません。補足です。

簡単に示しますと、

var
    bmp  :  TBitmap;
 src,dst : TRectF;
Begin
 bmp  := Panel1.MakeScreenshot;         <---
 if  ( PrintDialog1.Execute ) then 
    begin
  Printer.BeginDoc;
      src := TRectF.Create( 0, 0, bmp.Width, bmp.Height );
      dst := TRectF.Create( 0, 0, Printer.PageWidth, Printer.PageHeight );
      Printer.Canvas.DrawBitmap( bmp, src, dst, 1.0 );
  Printer.EndDoc;
    end;

で、実現出来ていたものが、<--- で示した。TPanelのMakeScreenshot関数がXE6では実装されていない様です。
(    XE6では、”DrawBitmap"のところも、
Printer.Canvas.CopyRect( bmp, src, dst, 1.0 );
に変わると考えてはいます。)

よろしくお願いします。


yTake  2020-11-29 15:17:24  No: 149418

自己レスです。

始めに訂正します。
当方、今回の環境はFMXではなくてvclでした。自分で、混同してしまっていました。申し訳ございません。

TPanel部分の印刷分かりました。
"PaintTo"でTpanelの状態をビットマップへ書き出せました。

printer.BeginDoc();

dRect :=  TRect.Create( 0, 0, printer.PageWidth, printer.PageHeight );

bmp.Width   :=  Panel1.Width;
bmp.Height  :=  Panel1.Height;
TPanel.PaintTo( bmp.Canvas, 0, 0 );

sRect :=  TRect.Create( 0, 0, bmp.Width, bmp.Height );

Printer.Canvas.CopyRect( dRect, bmp.Canvas, sRect );

printer.EndDoc();

これで一応印刷出来る様です。

これに準じて色々試してみます。

お騒がせしました。


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








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