鱼C论坛

 找回密码
 立即注册
查看: 3092|回复: 3

delphi ReplaceDialog 组件的使用

[复制链接]
发表于 2012-6-21 17:46:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请各位大侠帮下忙 怎么实现ReplaceDialog  组件的区别 替换和全部替换啊 就是说怎么判断点了哪一个 谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-27 14:09:50 | 显示全部楼层
点击ReplaceDialog组件图标 里边有onfind和DialogReplace事件
procedure TForm1.ReplaceDialogFind(Sender: TObject);//替换窗体ReplaceDialog的onfind事件
var
  SearchType:TSearchTypes;//替换OnFind
begin
  with ReplaceDialog do
  begin
    if frMatchCase in Options then
      SearchType:=SearchType+[stMatchCase];
    if frWholeWord in Options then
      SearchType:=SearchType+[stWholeWord];
    PerformFind(Sender,FindText,SearchType);
  end;
  RichEdit.SetFocus;
  SendMessage(RichEdit.Handle,EM_SCROLLCARET,0,0);
end;

procedure TForm1.ReplaceDialogReplace(Sender: TObject); //替换框体的OnReplace事件
var
  SearchType:TSearchTypes;
  FoundAt, StartPos, ToEnd: Integer;
  str:string;
  label Start, Start1, Start2;
begin
  with ReplaceDialog do
  begin //1
  
    if frReplace in Options then
    begin//2
      if frMatchCase in Options then
        SearchType:=SearchType+[stMatchCase];
      if frWholeWord in Options then
        SearchType:=SearchType+[stWholeWord];

      if RichEdit.Seltext = ReplaceDialog.FindText then
      begin
        RichEdit.SelText:= ReplaceDialog.ReplaceText;
        Start1: StartPos:=RichEdit.SelStart+RichEdit.SelLength;
        ToEnd:= RichEdit.GetTextLen-StartPos;
        FoundAt := RichEdit.FindText(ReplaceDialog.FindText,StartPos,ToEnd,SearchType);

        if FoundAt<>-1 then
        begin
          RichEdit.SelStart:=FoundAt;
          RichEdit.SelLength:=Length(ReplaceDialog.FindText);
          if RichEdit.Seltext='' then
          begin
            RichEdit.Selstart:=RichEdit.Selstart+2;
            goto Start1;
          end;
          SendMessage(RichEdit.Handle, EM_SCROLLCARET, 0, 0);
        end
        else
        begin
          Str:= '找不到 '''''+ReplaceDialog.FindText+'''''';
          Application.MessageBox(PChar(Str),'记事本',MB_ICONINFORMATION);
        end;

      end
      else
      begin
        Start2: StartPos:=RichEdit.SelStart+RichEdit.SelLength;
        ToEnd:= RichEdit.GetTextLen-StartPos;
        FoundAt := RichEdit.FindText(ReplaceDialog.FindText,StartPos,ToEnd,SearchType);

        if FoundAt<>-1 then
        begin
          RichEdit.SelStart:=FoundAt;
          if RichEdit.Seltext='' then
          RichEdit.SelLength:=Length(ReplaceDialog.FindText);
          begin
            RichEdit.Selstart:=RichEdit.Selstart+2;
            goto Start2;
          end;
          SendMessage(RichEdit.Handle, EM_SCROLLCARET, 0, 0);
        end
        else
        begin
          Str:= '找不到 '''''+ReplaceDialog.FindText+'''''';
          Application.MessageBox(PChar(Str),'记事本',MB_ICONINFORMATION);
        end;
      end;
    end;

    if frReplaceAll in Options then
    begin
      if frMatchCase in Options then
        SearchType:=SearchType+[stMatchCase];
      if frWholeWord in Options then
        SearchType:=SearchType+[stWholeWord];
      if RichEdit.Seltext = ReplaceDialog.FindText then
         RichEdit.SelText:= ReplaceDialog.ReplaceText;
      FindTextOld:='';
      PerformFind(Sender,FindText,SearchType);

      while PerformFind(Sender,FindText,SearchType) do
      begin
        RichEdit.SelText:= ReplaceDialog.ReplaceText;
      end;
    end;

  end;
  RichEdit.SetFocus;
  SendMessage(RichEdit.Handle,EM_SCROLLCARET,0,0);
end;

procedure TForm1.ReplaceDialogFind(Sender: TObject);
var
  SearchType:TSearchTypes;//替换OnFind
begin
  with ReplaceDialog do
  begin
    if frMatchCase in Options then
      SearchType:=SearchType+[stMatchCase];
    if frWholeWord in Options then
      SearchType:=SearchType+[stWholeWord];
    PerformFind(Sender,FindText,SearchType);
  end;
  RichEdit.SetFocus;
  SendMessage(RichEdit.Handle,EM_SCROLLCARET,0,0);
end;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-27 14:13:09 | 显示全部楼层
unction TForm1.PerformFind(Sender: TObject; FindString: String; SearchType: TSearchTypes):Boolean;//自定义过程,查找下一个
var
  FoundAt, StartPos, ToEnd: Integer;
  str:string;
  label Start;
begin
  if FindTextOld = FindString then
    with RichEdit do
    begin
      Start: StartPos:=SelStart+SelLength;
      ToEnd:=GetTextLen-StartPos;
      FoundAt:=FindText(FindString,StartPos,ToEnd,SearchType);
      if FoundAt<>-1 then
      begin
        SelStart:=FoundAt;
        SelLength:=Length(FindString);
        if Seltext='' then
        begin
          Selstart:=Selstart+2;
          goto Start;
        end;
        Result:=True;
      end
      else
      begin
        str:= '找不到 '''''+PChar(FindString)+'''''';
        Application.MessageBox(PChar(str),'记事本',MB_ICONINFORMATION);
        FindDialog.CloseDialog;
        Result:=False;
      end;
    end
  else
  begin
    FindTextOld:= FindString; 
    Result:=True;
  end;
end;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2014-10-17 08:59:32 | 显示全部楼层
写的好长啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 03:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表