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

解決


やまもと  2005-03-18 20:09:47  No: 13826

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

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

以下のコードで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

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

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

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


つっか  2005-03-19 02:28:37  No: 13829

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


平蔵  2005-03-19 06:32:28  No: 13830

Bitmapを貼り付けるなら、

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

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


つっか  2005-03-19 07:46:03  No: 13831

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


やまもと  2005-03-19 17:20:28  No: 13832

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


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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