Delphi: Поиск и замена текста в TMemo или RichEdit
Данный пример реализует диалог поиска и замены текста в компоненте TMemo. Пример можно легко переделать под RichEdit.
procedure TMainForm.FindItemClick(Sender: TObject); begin FPos:=Memo.SelStart; FindDialog.FindText:=Memo.SelText; FindDialog.Position:=Point(MainForm.Left+(MainForm.Width div 3),MainForm.Top); FindDialog.Options:=FindDialog.Options+[frHideUpDown,frHideWholeWord]; FindDialog.Execute; end; procedure TMainForm.FindDialogFind(Sender: TObject); begin if frMatchCase in FindDialog.Options then Memo.SelStart:=Pos(FindDialog.FindText, Copy(Memo.Lines.Text,FPos+1, Length(Memo.Lines.Text)))+FPos-1 else Memo.SelStart:=Pos(AnsiLowerCase(FindDialog.FindText), AnsiLowerCase(Copy(Memo.Lines.Text,FPos+1, Length(Memo.Lines.Text))))+FPos-1; if Memo.SelStart>=FPos then begin Memo.SelLength:=Length(FindDialog.FindText); FPos:=Memo.SelStart+Memo.SelLength+1; end else if Application.MessageBox(PChar('Текст "'+FindDialog.FindText+ '" не найден. Продолжить поиск?'),'Сообщение', mb_YesNo or mb_IconQuestion)<>mrYes then FindDialog.CloseDialog; Memo.SetFocus; end; procedure TMainForm.ReplaceItemClick(Sender: TObject); begin FPos:=Memo.SelStart; ReplaceDialog.FindText:=Memo.SelText; ReplaceDialog.Position:=Point(MainForm.Left+(MainForm.Width div 3),MainForm.Top); ReplaceDialog.Options:=FindDialog.Options+ [frHideUpDown,frHideWholeWord]; ReplaceDialog.Execute; end; procedure TMainForm.ReplaceDialogFind(Sender: TObject); begin if frMatchCase in ReplaceDialog.Options then Memo.SelStart:=Pos(ReplaceDialog.FindText, Copy(Memo.Lines.Text,FPos+1, Length(Memo.Lines.Text)))+FPos-1 else Memo.SelStart:=Pos(AnsiLowerCase(ReplaceDialog.FindText), AnsiLowerCase(Copy(Memo.Lines.Text,FPos+1, Length(Memo.Lines.Text))))+FPos-1; if Memo.SelStart>=FPos then begin Memo.SelLength:=Length(ReplaceDialog.FindText); FPos:=Memo.SelStart+RichEdit.SelLength+1; end else if Application.MessageBox(PChar('Текст "'+ReplaceDialog.FindText+ '" не найден. Продолжить поиск?'),'Сообщение', mb_YesNo or mb_IconQuestion)<>mrYes then ReplaceDialog.CloseDialog; Memo.SetFocus; end; procedure TMainForm.ReplaceDialogReplace(Sender: TObject); begin if Memo.SelText<>'' then Memo.SelText:=ReplaceDialog.ReplaceText; if frReplaceAll in ReplaceDialog.Options then ReplaceDialogFind(Self); end;
