RichEdit 系コンポーネントが Free したタイミングで WM_DRAWCLIPBOARD メッセージを投げてしまう

解決


Terry  2022-08-28 01:29:17  No: 150398  IP: 192.*.*.*

お世話になっています

自作アプリの一機能でクリップボード監視をしているのですが
予期せぬタイミングでコピー通達が来て困っています
送る側のアプリも多重起動した同じアプリだったりするのでどうにか対処したいのですが
色々テストしてみたところ表題が原因のようです

実際の開発は Delphi2009+JEDI ですが
以下の最小限テストは Delphi 10.4.2 Sydney Community Edition - VCL32bit でも再現します
OS はWindows10 21H1(19043.1889) です

フォームに TRichEdit とボタンを貼り付け、RichEdit の内容を適当に選択~コピーしますと
WM_DRAWCLIPBOARD メッセージがクリップボードビューアーウィンドウに送られます
そのあとボタンクリックなどで
RichEdit1.Free;
とすると再び送られてしまうのです
コンポーネントを Free せずにアプリ終了でも発生する時があります
自作アプリでは別窓表示なども用いていますのでその窓を閉じる時には必ず発生します

秀丸のクリップボード監視では「同じ内容は無視」する設定がありますが
重複コピーもあり得るし画像コピーもあるというアプリの性質上それも出来ません

TJvRichEdit でも同様ですが TMemo では発生しない
OS のワードパッドでは適当に書いたり貼り付けて~コピー~「保存せずに終了」すると起こったりするので
これはもう回避する方法はないのでしょうか?

以上、よろしくお願いいたしますm(_ _)m

編集 削除
AAAAA  2022-08-28 04:26:59  No: 150399  IP: 192.*.*.*

2回WM_DRAWCLIPBOARD送られてるみたい。

クリップボードSave
クリップボードClear
RichEdit.Free
クリップボードLoad

とかすれば回避はできるかも

編集 削除
Terry  2022-08-28 10:12:08  No: 150401  IP: 192.*.*.*

AAAAA さんありがとうございます
とりあえず FormOnClose で試してみると
Clipboard.Open;
RichEdit1.Free;
Clipboard.Close;
Action:=caFree;
なるほどこれでうまくいっているようです(フォーム毎に仕込むのはなんかむなしいですが)
ありがとうごさいました

編集 削除