こんにちは、
XE6のFMXでTFormにTPanelを配置しTPaintBoxやTButtonなどを配置しています。
そのTPanel部分を印刷したいのですが、調べたところXE3ではTPanelをTBitmapとしてキャプチャ(TPanel.MakeScreenshot関数でビットマップを生成)して、それをTPrintDialogへ渡す手法が可能だった様です。
しかし、XE6のTPanelでは、TPanelにMakeScreeshot関数が実装されていない様です。
他に、TPanelの状態をキャプチャできる関数はなさそうです。
TPanelの部分だけ印刷する手法が変わったのでしょうか?
ご教授をお願い出来ると幸です。
DELPHI XE6 FMX+Windows 10
です。
よろしくお願いします。
すみません。補足です。
簡単に示しますと、
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 );
に変わると考えてはいます。)
よろしくお願いします。
自己レスです。
始めに訂正します。
当方、今回の環境は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();
これで一応印刷出来る様です。
これに準じて色々試してみます。
お騒がせしました。
ツイート | ![]() |