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.
应用查找替换对话框
最新推荐文章于 2022-03-12 20:01:03 发布