Mega Code Archive

 
Categories / Delphi / VCL
 

How to search in a TMemo using a TFindDialog

Title: How to search in a TMemo using a TFindDialog private { Private declarations } FSelPos: integer; public { Public declarations } end; var Form1 : TForm1; implementation {$R *.dfm} procedure TForm1.FindDialog1Find(Sender : TObject); var S : string; startpos : integer; begin with TFindDialog(Sender) do begin {If the stored position is 0 this cannot be a find next. } if FSelPos = 0 then Options := Options - [frFindNext]; { Figure out where to start the search and get the corresponding text from the memo. } if frfindNext in Options then begin { This is a find next, start after the end of the last found word. } StartPos := FSelPos + Length(Findtext); S := Copy(Memo1.Lines.Text, StartPos, MaxInt); end else begin { This is a find first, start at the, well, start. } S := Memo1.Lines.Text; StartPos := 1; end; { Perform a global case-sensitive search for FindText in S } FSelPos := Pos(FindText, S); if FSelPos 0 then begin { Found something, correct position for the location of the start of search. } FSelPos := FSelPos + StartPos - 1; Memo1.SelStart := FSelPos - 1; Memo1.SelLength := Length(FindText); Memo1.SetFocus; end else begin { No joy, show a message. } if frfindNext in Options then S := Concat('There are no further occurences of "', FindText, '" in Memo1.') else S := Concat('Could not find "', FindText, '" in Memo1.'); MessageDlg(S, mtError, [mbOK], 0); end; end; end; // Show the FindDialog // Den FindDialog anzeigen procedure TForm1.Button1Click(Sender : TObject); begin FSelPos := 0; FindDialog1.Execute; end;