ダイアログにフォーカスを残したまま検索するには?

解決


東海岸  2004-12-02 05:21:47  No: 12001

現在  Delphi6 Personal を使用してメモ帳づくりをしています。そこで、
findDailogのヘルプにあったコードを試したところ、検索ダイアログのボタンを押すとフォーカスがメインとダイアログの間を行ったり来たりになり、連続で押すと画面がちらつきます。メモ帳のようにダイアログにフォーカスを残したまま、検索文字列を選択状態にする方法はないものでしょうか?
過去ログを検索したところ、"StringGlid"に関するものがあり試したところ検索ボタンを押しても変化なし、でした。
何か解決方法がありましたら、よろしくお願いします。

*- - - - - - - - 以下、ヘルプ・サンプルコード - - - - - - - - - -*

ボタンをクリックすると[検索]ダイアログボックスが表示されます。「FInd what」テキストを入力して[次を検索]ボタンをクリックすると,TRichEdit 内で一致する最初の文字列が選択されます。

procedure TForm1.Button1Click(Sender: TObject);
begin
  FindDialog1.Position := Point(RichEdit1.Left + RichEdit1.Width, RichEdit1.Top);
  FindDialog1.Execute;
end;

procedure TForm1.FindDialog1Find(Sender: TObject);
var
  FoundAt: LongInt;
  StartPos, ToEnd: Integer;
begin
  with RichEdit1 do
  begin
    { 検索は現在選択されている場所から開始される }
    { 何も選択されていない場合は,テキストの最初から開始される }
    if SelLength <> 0 then
      StartPos := SelStart + SelLength
    else
      StartPos := 0;
    { ToEnd は検索範囲の文字数を示す }
    ToEnd := Length(Text) - StartPos;
    FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]);
    if FoundAt <> -1 then
    begin
      SetFocus;
      SelStart := FoundAt;
      SelLength := Length(FindDialog1.FindText);
    end;
  end;
end;


りおりお  2004-12-02 05:42:07  No: 12002

RichEdit1 の HideSelection プロパティーを false にして、上記コード中の
SetFocus を取る


東海岸  2004-12-03 07:01:28  No: 12003

りおりおさん、ありがとうございました。おかげさまで解決です。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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