1

私は TRichEdit (Delphi XE2) に取り組んでいます。

リッチエディット テキスト ボックスに保護されたテキストが含まれているかどうかを確認する方法はありますか? また、完全なテキストを反復せずに、その保護されたテキストの開始位置。

現在、私は以下のコードを使用しています

source.SelStart := charNo; //source is richedit name and charno is the                     
                        //iterating loop 
source.SelLength := 1;
if (source.SelAttributes.Protected) then

上記のコードは、テキストが大きいと実行に時間がかかります。

これは、以前は Delphi 4 で正常に動作していました

同じコードが Delphi XE2 でより多くの時間を話し、Delphi 4 でより少ない時間を話し、Delphi XE2 でこれを行う適切な方法である理由を誰か教えてください。

4

1 に答える 1

1

テキスト属性を検索する方法はありません。個々の文字を反復し、それらの属性を照会することが唯一のオプションです。

コードを高速化するには、次のことができます。

  1. およびプロパティを個別に設定する代わりに、EM_SETSELまたはウィンドウ メッセージを使用してください。EM_EXSETSELSelStartSelLength

  2. ウィンドウ メッセージを使用して、反復中に RichEdit の内部通知 ( 、、 など) をEM_SETEVENTMASKオフにします。EN_HSCROLLEN_VSCROLLEN_SELCHANGE

  3. WM_SETREDRAWウィンドウ メッセージを使用して、反復中に RichEdit が再描画されないようにすることも検討してください。

于 2015-02-05T20:05:39.963 に答える