delphinotepadfinddialog

Implement F3 Find Next using TFindDialog


I've implemented a search using the TFindDialog on my form. Everything works well except that I cannot find a way to mimic the "F3 - Find Next" behaviour as in Notepad. Once you have entered a search string, pressing F3 finds the next instance without opening the search dialog.

Regards, Pieter.


Solution

  • Here's a sketch how one could do this:

    type
      TForm1 = class(TForm)
        FindDialog1: TFindDialog;
        procedure FindDialog1Find(Sender: TObject);
        procedure SearchFind1Execute(Sender: TObject);
        procedure SearchFindNext1Execute(Sender: TObject);
      private
        FSearchText: string;
        procedure Search;
      end;
    

    and

    procedure TForm1.Search;
    begin
      // Do the real searching here...
      MessageBox(Handle, PChar('Looking for "' + FSearchText + '".'), nil, 0);
    end;
    
    procedure TForm1.SearchFind1Execute(Sender: TObject);
    begin
      // Triggered by Ctrl-F
      FindDialog1.FindText := FSearchText;
      FindDialog1.Execute;
    end;
    
    procedure TForm1.SearchFindNext1Execute(Sender: TObject);
    begin
      // Triggered by F3
      if FSearchText = '' then
        SearchFind1.Execute
      else
        Search;
    end;
    
    procedure TForm1.FindDialog1Find(Sender: TObject);
    begin
      // Triggered by button click in FindDialog1
      FSearchText := FindDialog1.FindText;
      Search;
    end;