検索でヒットした文字列をハイライトし隠れないようにするには?

解決


オン赤  2002-08-13 18:04:14  No: 1265

文字列データの中の手特定文字列を検索し、見つかった場合に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 では、これがないとハイライトしませんよね。このへんの知識不足がたぶん表記の問題の元にありそうです。
ご指導をお願いいたします。


Brock  2002-08-13 18:35:38  No: 1266

ハイライト下文字が隠れてしまうのは下の命令を使用すると直ると思います。
TControl.Perform(EM_SCROLLCARET, 0, 0);
これを使うと、カーソルが見えるような位置まで飛んでくれます。

あと、TRichEditでSetFocusがないとハイライトが見えないと言うのは、
TRichEditがフォーカスが外れているときはハイライトを見せない様に
しているからだと思います。
TRichEditのプロパティで「HideSelection」をFalseにすると
フォーカスが外れている時に隠す処理はしません。


hatena  2002-08-13 18:48:07  No: 1267

>簡単なようですが、TRichEdit と TMemo ではちょっと違いがあるみたいで、
>TMemo ではSetFocus が不要なのにTRichEdit では、これがないとハイライト
>しませんよね

ハイライトとは、選択状態のことですね。

Focus がなくても、選択状態の表示を維持するには、
HideSelection プロパティを False にします。
おそらくTRichEditの方だけこれがTrueになっているのでしょう。

また、HideSelection プロパティを False にしておけば、
SetFocus しなくても、選択部分へスクロールして表示されます。


オン赤  2002-08-13 19:42:42  No: 1268

ありがとうございました。ただチェックをはずせ、true/false をうっかりいじってしまっているぞ、っていういつもの低次元なことだったのですね。僕にとってはこんなことでも大変なこと。数時間、数日間かかるのですから。
御礼申し上げます。


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








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