应用查找替换对话框

来源:互联网 发布:sql server2012收费吗 编辑:程序博客网 时间:2024/06/05 00:26
unit UFind;interfaceuses  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.