Delphi: Поиск и замена текста в TMemo или RichEdit
Данный пример реализует диалог поиска и замены текста в компоненте TMemo. Пример можно легко переделать под RichEdit.
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;
Категория Контролы, Delphi | 0 Comments
Версия для печати