ボタン押下時にイメージ貼り付けを行ってみたところ
procedure TForm1.Button2Click(Sender: TObject);
begin
keybd_event(VK_SNAPSHOT, 0, 0, 0);
//クリップボードのBMPをImage2に貼り付け
Image2.Picture.Assign(Clipboard);
end;
「無効なクリップボードフォーマット」と表示される事や、
クリップボードのイメージが古い場合があります。
ボタン押下時のイメージを貼り付けるには、何が必要でしょうか?
以下のコードで20回ほど試してみましたが、正常に動作しました。
やまもとさんの環境でも一度試してみてください。
procedure TForm1.Button1Click(Sender: TObject);
begin
keybd_event(VK_SNAPSHOT, 0, 0, 0);
Application.ProcessMessages;
Image1.Picture.Assign(Clipboard);
end;
ありがとうございます。
うまくいきました。
ヘルプでは、ProcessMessagesを調べると
アプリケーションがメッセージキューを処理できるよう,その実行を一時的に停止します。
とありますが、なぜ正常に動いたのか?よく理解できていません。
お手数ですが、簡単にで構いません。お願いできないでしょうか?
ウィンドウズのメッセージ処理についての知識が必要です。
ひとことではなかなか説明しづらいかも。
MLの過去ログでの、ながーい議論を読んでみると参考になるかもしれません。
http://130.158.124.192/~takeuchi/delphi/browse.cgi?index=065885
Bitmapを貼り付けるなら、
if Clipboard.HasFormat(CF_BITMAP) then
Image1.Picture.Assign(Clipboard);
とすれば、クリップボードのデータ種類がBITMAPの時だけ
処理されるので、余計なエラーは緩和されるのでは?
もし確認するなら CF_PICTURE のほうがよいかも。
それからキーを押したら離すことも忘れずに。
Windows関連を調べてみます。
ありがとうございました。
ツイート | ![]() |