クリップボードのイメージ貼り付けで

解決


やまもと  2005-03-18 20:09:47  No: 13826  IP: [192.*.*.*]

ボタン押下時にイメージ貼り付けを行ってみたところ

procedure TForm1.Button2Click(Sender: TObject);
begin
    keybd_event(VK_SNAPSHOT, 0, 0, 0);

    //クリップボードのBMPをImage2に貼り付け
    Image2.Picture.Assign(Clipboard);
end;

「無効なクリップボードフォーマット」と表示される事や、
クリップボードのイメージが古い場合があります。

ボタン押下時のイメージを貼り付けるには、何が必要でしょうか?

編集    削除
ふぐちゃん  2005-03-18 22:49:52  No: 13827  IP: [192.*.*.*]

以下のコードで20回ほど試してみましたが、正常に動作しました。
やまもとさんの環境でも一度試してみてください。

procedure TForm1.Button1Click(Sender: TObject);
begin
  keybd_event(VK_SNAPSHOT, 0, 0, 0);

  Application.ProcessMessages;

  Image1.Picture.Assign(Clipboard);
end;

編集    削除
やまもと  2005-03-19 00:34:05  No: 13828  IP: [192.*.*.*]

ありがとうございます。
うまくいきました。

ヘルプでは、ProcessMessagesを調べると
アプリケーションがメッセージキューを処理できるよう,その実行を一時的に停止します。
とありますが、なぜ正常に動いたのか?よく理解できていません。

お手数ですが、簡単にで構いません。お願いできないでしょうか?

編集    削除
つっか  2005-03-19 02:28:37  No: 13829  IP: [192.*.*.*]

ウィンドウズのメッセージ処理についての知識が必要です。
ひとことではなかなか説明しづらいかも。
MLの過去ログでの、ながーい議論を読んでみると参考になるかもしれません。
http://130.158.124.192/~takeuchi/delphi/browse.cgi?index=065885

編集    削除
平蔵  2005-03-19 06:32:28  No: 13830  IP: [192.*.*.*]

Bitmapを貼り付けるなら、

if Clipboard.HasFormat(CF_BITMAP) then
   Image1.Picture.Assign(Clipboard);

とすれば、クリップボードのデータ種類がBITMAPの時だけ
処理されるので、余計なエラーは緩和されるのでは?

編集    削除
つっか  2005-03-19 07:46:03  No: 13831  IP: [192.*.*.*]

もし確認するなら CF_PICTURE のほうがよいかも。
それからキーを押したら離すことも忘れずに。

編集    削除
やまもと  2005-03-19 17:20:28  No: 13832  IP: [192.*.*.*]

Windows関連を調べてみます。
ありがとうございました。

編集    削除