应用查找替换对话框

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.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值