0

私の問題は、Delphi progies が怖がらせて死に至らしめるものにあります - Windows のリッチ エディット (XP および XP 以前のバージョン)。

状況:

フォームのOnCreateにEM_AUTOURLDETECTIONを追加しました。ターゲット -> RichEdit1. 次に、フォームを表示した後に「折りたたまれた」フォームがあります。RichEdit コントロールは静的で、表示され、有効になっていますが、フォーム ウィンドウが折りたたまれているため「非表示」になっています。

Button1 を使用し、フォームの Constraints および Size プロパティを変更して、フォームを展開および折りたたむことができます。

初めてフォームを展開した後、RichEdit1 コントロール内の URL が強調表示されます。しかし、2 回目、3 回目、4 回目など... フォームを折りたたんで展開すると、RichEdit1 コントロールは URL を強調表示しなくなります。

私はEM_SETTEXTMODEメッセージ、WM_UPDATEUISTATE、基本的なWM_TEXTメッセージも試しました->運がありません。このmerssageは、キーボードストローク(仮想キーコード)を送信している間は実際に機能します(検出を有効にします)が、テキストが変更された場合はそうではないようです。また、リッチエディット コントロールを動的にするコードを書き直そうと考えています。これで問題は解決しますか?

おそらく解決策は、OnPaint / OnDraw メソッドをオーバーライドして、フォームの折りたたみまたは展開時にハイライト (フォーマット) が失われないようにすることですか?

奇妙なことに、Embarcadero のドキュメントには、この関数はテキストが変更された瞬間に機能しなければならないと書かれています。うまくいかないのはなぜですか?

どんな助けでも感謝します。私がこのコミュニティ Wiki を作成しているのは、これがよくある問題であり、一緒に解決策を見つけられるからですよね? :)

また、フォローアップと関連する質問:

OnPaint をオーバーライド

RichEdit 2.0 で URL を自動検出するには?

http://www.vbforums.com/archive/index.php/t-59959.html

4

1 に答える 1

0

よくわかりませんが、非表示から表示に切り替えると、リッチエディットのウィンドウが再作成されますか? この場合、独自の派生 TRichEdit クラスを作成し、WINdows ハンドル (TWinControl.CreateHandle) を作成する関数をオーバーライドし、そこに EM_AUTOURLDETECTION を追加します。

于 2010-01-31T16:55:15.607 に答える