文字列データの中の手特定文字列を検索し、見つかった場合にTRichEditまたはTMemo 上で表示し、きちんと発見箇所をハイライトさせたいのです。ハイライトはできますし、TRichEdit では色も付けられます(ハイライトの色は知識がないので選べていません)が、ハイライトしているのがスクロール具合によっては、上部にあるいは下部に隠れてしまいます。なぜでしょうか?
pp:=pos(WordToFind,foundData.Text);
if pp=0 then exit;
foundData.SetFocus;
foundData.SelStart:=pp-1;
foundData.SelLength:=Length(WordToFind);
簡単なようですが、TRichEdit と TMemo ではちょっと違いがあるみたいで、TMemo ではSetFocus が不要なのにTRichEdit では、これがないとハイライトしませんよね。このへんの知識不足がたぶん表記の問題の元にありそうです。
ご指導をお願いいたします。
ハイライト下文字が隠れてしまうのは下の命令を使用すると直ると思います。
TControl.Perform(EM_SCROLLCARET, 0, 0);
これを使うと、カーソルが見えるような位置まで飛んでくれます。
あと、TRichEditでSetFocusがないとハイライトが見えないと言うのは、
TRichEditがフォーカスが外れているときはハイライトを見せない様に
しているからだと思います。
TRichEditのプロパティで「HideSelection」をFalseにすると
フォーカスが外れている時に隠す処理はしません。
>簡単なようですが、TRichEdit と TMemo ではちょっと違いがあるみたいで、
>TMemo ではSetFocus が不要なのにTRichEdit では、これがないとハイライト
>しませんよね
ハイライトとは、選択状態のことですね。
Focus がなくても、選択状態の表示を維持するには、
HideSelection プロパティを False にします。
おそらくTRichEditの方だけこれがTrueになっているのでしょう。
また、HideSelection プロパティを False にしておけば、
SetFocus しなくても、選択部分へスクロールして表示されます。
ありがとうございました。ただチェックをはずせ、true/false をうっかりいじってしまっているぞ、っていういつもの低次元なことだったのですね。僕にとってはこんなことでも大変なこと。数時間、数日間かかるのですから。
御礼申し上げます。
ツイート | ![]() |