unit UFind;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, DBCtrls;
type
TFFind = class(TForm)
ReplaceDialog1: TReplaceDialog;
FindDialog1: TFindDialog;
BFind: TButton;
RichEdit1: TRichEdit;
BReplace: TButton;
procedure BFindClick(Sender: TObject);
procedure FindDialog1Find(Sender: TObject);
procedure BReplaceClick(Sender: TObject);
procedure ReplaceDialog1Replace(Sender: TObject);
procedure ReplaceDialog1Find(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FFind: TFFind;
implementation
{$R *.dfm}
procedure TFFind.FormCreate(Sender: TObject);
begin
BFind.Caption :='查找...';
BReplace.Caption :='替换...';
RichEdit1.Text :='Welcome,This is a RichEdit Component!';
end;
procedure TFFind.BFindClick(Sender: TObject);
begin
//确定查找对话框的显示位置
FindDialog1.Position := Point(RichEdit1.Left + Richedit1.Width,
Richedit1.Top+RichEdit1.Height);
//显示查找对话框
FindDialog1.Execute;
end;
//查找对话框的查找功能
procedure TFFind.FindDialog1Find(Sender: TObject);
var
FoundAt: LongInt; //特定字符串的位置
StartPos, ToEnd: Integer; //查找的起始位置和查找长度
begin
if Richedit1.SelLength = 0 then
StartPos := 0 //如果尚未开始查找,则从头开始查找
else //否则,从上次查找的结果之后开始查找
StartPos := Richedit1.SelStart + Richedit1.SelLength ;
ToEnd := Length(Richedit1.Text) - StartPos;
FoundAt := Richedit1.FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]);
//如果已找到特定字符串,则进行如下处理
if FoundAt <> -1 then
begin
Richedit1.SetFocus; //设置焦点
Richedit1.SelStart := FoundAt;
Richedit1.SelLength := Length(FindDialog1.FindText);
end
else
//如果未找到特定字符串,则进行如下处理
if (MessageDlg('已搜索到文档尽头,未发现要搜索的字符串,是否从头搜索?', mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
Richedit1.SelLength :=0;
end;
procedure TFFind.BReplaceClick(Sender: TObject);
begin
//确定替换对话框的显示位置
ReplaceDialog1.Position := Point(RichEdit1.Left + RichEdit1.Width,
RichEdit1.Top+RichEdit1.Height);
//显示替换对话框
ReplaceDialog1.Execute;
end;
//替换对话框的查找功能
procedure TFFind.ReplaceDialog1Find(Sender: TObject);
var
FoundAt: LongInt; //特定字符串的位置
StartPos, ToEnd: Integer; //查找的起始位置和查找长度
begin
if Richedit1.SelLength = 0 then
StartPos := 0 //如果尚未开始查找,则从头开始查找
else //否则,从上次查找的结果之后开始查找
StartPos := Richedit1.SelStart + Richedit1.SelLength ;
ToEnd := Length(Richedit1.Text) - StartPos;
FoundAt := Richedit1.FindText(ReplaceDialog1.FindText, StartPos, ToEnd, [stMatchCase]);
//如果已找到特定字符串,则进行如下处理
if FoundAt <> -1 then
begin
Richedit1.SetFocus; //设置焦点
Richedit1.SelStart := FoundAt;
Richedit1.SelLength := Length(ReplaceDialog1.FindText);
end
else
//如果未找到特定字符串,则进行如下处理
if (MessageDlg('已搜索到文档尽头,未发现要搜索的字符串,是否从头搜索?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
Richedit1.SelLength :=0;
end;
//替换对话框的替换功能
procedure TFFind.ReplaceDialog1Replace(Sender: TObject);
var
FoundAt: LongInt; //特定字符串的位置
StartPos, ToEnd: Integer; //查找的起始位置和查找长度
begin
if RichEdit1.SelLength=0 then
ReplaceDialog1Find(nil) //如果尚未找到特定字符串,则查找
else
begin
StartPos :=RichEdit1.SelStart+length(ReplaceDialog1.ReplaceText)-RichEdit1.SelLength+1;
RichEdit1.SelText := ReplaceDialog1.ReplaceText;
ToEnd := Length(RichEdit1.Text) - StartPos;
FoundAt := RichEdit1.FindText(ReplaceDialog1.FindText, StartPos, ToEnd, [stMatchCase]);
//如果已找到特定字符串,则进行如下处理
if FoundAt <> -1 then
begin
RichEdit1.SetFocus;
RichEdit1.SelStart := FoundAt;
RichEdit1.SelLength := Length(ReplaceDialog1.FindText);
end
else
//如果未找到特定字符串,则进行如下处理
if (MessageDlg('已搜索到文档尽头,未发现要替换的字符串,是否从头搜索?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
RichEdit1.SelLength :=0;
end ;
end;
end.
应用查找替换对话框
最新推荐文章于 2020-04-29 08:31:07 发布
本文介绍了一个基于Delphi的富文本编辑器中实现的查找与替换功能,包括如何定位文本、执行查找操作及替换操作的具体流程。通过实例代码展示了如何使用查找对话框和替换对话框,并详细说明了在富文本组件中进行查找和替换的方法。
3080

被折叠的 条评论
为什么被折叠?



