delphi7
Windows7
フォームにPanelが貼ってあって、そのPanelにいくつかのImageが貼ってあります。
そのPanelをBitmapとしてキャプチャしようと思っています。
(PanelにImageが貼ってある状態の見た目をキャプチャしたい)
現在はBitbitを利用してPanelをキャプチャしていますが、これだと処理中にPanelの前面に何か別のフォーム等があると、それが重なった状態でキャプチャされてしまいます。
それでは困るので、調べていたところ「DrawToBitmap」という私の要望通りのメソッドが存在するような情報を発見しました(以下URL)。
しかし残念ながら、このメソッドの使用方法がわかりませんでした。
このメソッドの使用方法か、別のフォーム等が重なっていてもPanelをキャプチャできる他の方法をご存じの方がいらっしゃいましたら、教えていただきたいです。
よろしくお願いします。
こんにちは,
TPanel ということであれば,PrintWindow 関数を使用すれば可能です.
http://mrxray.on.coocan.jp/Delphi/plSamples/368_ScreenCaptureTest.htm#list13
//その時アクティブなウィンドウをキャプチャー
hTargetWnd := Windows.GetForegroundWindow;
ここの hTargetWnd を,目的の TPanel のハンドルにしてください.
Mr.XRAYさん
レスありがとうございます。
希望通りに動きました。
PrintWindowの使い方に少し悩みましたが
過去記事でこれまたMr.XRAYさんの解説を読んで理解しました。
https://www.petitmonte.com/bbs/answers?question_id=6524
重ね重ね、ありがとうございました!
すみませんリンクがおかしいですね。
帰宅してから、PCで正しいリンクを貼り直します。
>PrintWindowの使い方に少し悩みましたが
え !?
PrintWindow(hTargetWnd, bmpOrigin.Canvas.Handle, 0);
で分かりませんか?
う〜ん.私のサイトの記事は難解と言われていますが,
PrintWindow(hTargetWnd, bmpOrigin.Canvas.Handle, 0);
PrintWindow(ターゲット,つまり目的のウィンドウのハンドル,
ビットマップのCanvasのハンドル,
0);
と読み取れませんか?
う〜む.悩んでしまいます.
初心者の頃はハンドルの概念とかが難しいからではないでしょうか?
>初心者の頃はハンドルの概念とかが難しいからではないでしょうか?
そうですね.
で,他の記事を読んで見て,改めて理解するということはよくありますね.
大変失礼しました.
サイトの記事を,なんとかして理解しやすいように,と思う気持ちから,とご理解ください.
誤解を与えてしまいごめんなさい。
Mr.XRAYさんの仰っていることはつたわりました。
delphiのVCLに定義されていないので
function PrintWindow( hwnd : HWND; hdcBlt : HDC; nFlags : UINT ) : BOOL; stdcall; external 'user32.dll';
を追加しなくてはいけない、という部分が初めての経験だったものですから、
そこに悩んでしまいました。
どちらにせよ初心者だから理解できなかった部分なのですが、
Mr.XRAYさんの表現が伝わりづらかった訳ではないです。
この度は本当にありがとうございました∧∧
> function PrintWindow( hwnd : HWND; hdcBlt : HDC; nFlags : UINT ) : BOOL; stdcall; external 'user32.dll';
>を追加しなくてはいけない、という部分が初めての経験だったものですから、
>そこに悩んでしまいました。
スミマセンね.添付のファイルには,全ソースコードを含めていましたが,サイトの記事は,
interface 部を省略していました.手抜きでした.
今,interface 部も含めたコードに修正しておきました.
【過去記事】「checkboxとradiobuttonの印刷について」
https://www.petitmonte.com/bbs/answers?question_id=6524
先ほどリンクを失敗した記事です。
これでも失敗していた場合はあきらめますw
このQ&Aサイトの上記の題名で調べれば出てきます。
もし同様の悩みを持った方がいれば参考にするといいかもしれません。
Mr.XRAYさん
確認しました。
迅速な対応ありがとうございました。
この質問掲示板以外でもいつもホームページのサンプルを参考にさせていただいているので、本当にお世話になっております。
今回は、素人から見ると特殊な部分があったので理解が遅れてしまいましたが、いつもはそのまま使えるくらいわかりやすいので、本当に助かっています。
この場を借りていつものお礼を申し上げます。
これからもよろしくお願いします^^
ツイート | ![]() |