在SynEdit 中实现查找和替换功能

本文介绍如何在C++Builder中利用SynEdit插件实现强大的查找和替换功能,包括配置步骤及具体的代码实现。
在C++ Builder中使用 SynEdit 插件时,功能的确强大,但是常用的  查找和替换功能却不好作了,尤其没有接触过的人,太麻烦了。其实 SynEdit 自带了搜索功能,很简单,很强大!
1. 准备工作:
    (1)在你设置好的界面中加入 SynEdit 控件,我的命名是 rve,当然,这是个误会,我是怕改多了程序麻烦.
    (2) 加入SynEditSearch控件, 我的命名是SynEditSearch1,默认。
    (3)  将 rve(synEdit) 的 SearchEngine 的改为 SynEditSearch1。
    (4)  加入FindDialog控件, 命名为 FindDialog1;
    (5) 加入ReplaceDialog控件,命名为ReplaceDialog1;
    (6) 加入 声明 TSynSearchOptions m_sschOption;
基本上一半完成了。不过接下来的才是比较麻烦!

2. 实现:
   (1) 在 FindDialog1 的OnFind事件中加入以下程序:
//-------------------------------------------------------------------------------------------------------------------------------
       m_sschOption.Clear();

    if ( FindDialog1->Options.Contains(frMatchCase) ) // 大小写敏感
    {
        m_sschOption << ssoMatchCase;
    }

    if ( FindDialog1->Options.Contains(frWholeWord)) // 全字符匹配
    {
        m_sschOption << ssoWholeWord;
    }

    if ( !FindDialog1->Options.Contains(frDown)) //向上搜索
    {
        m_sschOption << ssoBackwards;
    }
    //else m_sschOption << ssoFrontwards;

    if ( rve->SearchReplace( FindDialog1->FindTextA, "", m_sschOption) == 0)
    {
        AnsiString sMessage;
        sMessage.printf("Could not found /" %s /" ", FindDialog1->FindTextA );
        // if could not found, show hint
         Application->MessageBox(sMessage.c_str(), "Hint", MB_ICONINFORMATION);
    }

//-------------------------------------------------------------------------------------------------------------------------------

(2)  在ReplaceDialog1的 OnReplace 事件中添加如下代码

//-------------------------------------------------------------------------------------------------------------------------------
    m_sschOption.Clear();

    if ( ReplaceDialog1->Options.Contains(frMatchCase) ) // 大小写敏感
    {
        m_sschOption << ssoMatchCase;
    }

    if ( ReplaceDialog1->Options.Contains(frWholeWord)) // 全字符匹配
    {
        m_sschOption << ssoWholeWord;
    }

    if ( !ReplaceDialog1->Options.Contains(frDown)) //向上搜索
    {
        m_sschOption << ssoBackwards;
    }

    if ( ReplaceDialog1->Options.Contains(frReplaceAll)  )
    {
        m_sschOption << ssoReplaceAll;
    }
    else
    {
        m_sschOption << ssoReplace;
    }
   
    if ( rve->SearchReplace( ReplaceDialog1->FindTextA,
                            ReplaceDialog1->ReplaceTextA , m_sschOption) == 0)
    {
        AnsiString sMessage;
        sMessage.printf("Could not found /" %s /" ", FindDialog1->FindTextA );
        // if could not found, show hint
        Application->MessageBox(sMessage.c_str(), "Hint", MB_ICONINFORMATION);
    }
//-------------------------------------------------------------------------------------------------------------------------------

大功告成!现在运行试试看。对了,在你的按钮或者菜单的 OnClick事件中加入  FindDialog1->Execute();或者 ReplaceDialog1->Execute();
这个是我当初用到的时候作的,希望对需要的朋友有所帮助!
只为抛砖引玉,如有不妥,敬请指教!
SynEdit Studio Readme谢谢使用SynEdit Studio;此控件包基于基于SynEdit加强,增加了一些第三方的SynEdit控件自己写的控件;原SynEdit控件包开发者:Pieter Zijlstra;增强修改包作者:姚乔锋 yaoqiaofeng@sohu.com最近的版本请关注www.delphibox.comwww.delphifans.com;SynEdit Studio History修改版本 2005.06.8 01.SynEditActions,修正若是Action放在工具条上时会不断的闪烁的Bug; 02.TSynEdit,修正了控件出现'has no parent window'异常的可能,未经测试;修改版本 2005.06.1 01.TSynEdit,修改滚动条不现示的BUG; 02.TSynEdit,修改控件可能会出现错误的异常; 03.SynEditActions,基本完成,更新注册,并重做了个Demo;修改版本 2005.05.29 01.TSynEdit,稍稍修改使用缓冲技术后可能出现的异常; 02.SynEditActions,一个包含各种synedit动作的单元,目前只提供测试,没有注册单元;修改版本 2005.05.23 01.SynSpellReg,修正了这个单元注册时会找不到dcr文件的错误; 02.TSynEdit,修正了按END键到下一行开头等其它键类似的定位错误; 03.TSynEdit,修正了快速录入大量文本闪烁问题,使用缓冲技术API锁定;修改版本 2005.05.20 01.TSynAutoCorrect,改正控件原先不支持中文输入的特点; 02.TSynEdit,增加一个属性ActiveLine,类属性,具体参考TSynActiveLine; 03.TSynEdit,增加一个属性LineDivider,类属性,具体参考TSynLineDivider; 04.TSynEdit,增加一个属性WordWrap,类属性,具体参考TSynWordWrap; 05.TSynEdit,增加一个属性RightEdge,类属性,具体参考TSynRightEdge; 06.TSynEdit,修改高亮当前行的方式,在自动换行的情况也只高亮一行; 07.TSynEdit,当行间距大于零时,原本文本会显示于靠上,现修改于垂直中间对齐; 08.TSynEdit,增加一个属性LineSpacing,可指定行间距; 09.TSynEdit,增加一个属性LineSpacingRule,可指定行间距类型; 10.TSynEdit,修正当控件是在一个子窗口上时,若是焦点转回到主窗口中某个控件后再转回来时会不能显示光标的BUG; 11.TSynEdit,修正当第一列显示的字符是双字节字符的第二个字节时,在高亮当前行情况下会把第一个字节显示在行号区上的BUG; 12.TSynEdit,修正了DoCaseChange,加快转换字母大小写的处理速度精简代码,也避免出现一些双字节字符的丢失; 13.TSynEdit,修正画右边线的代码,避免有时右边线颜色显示出错; 14.TSynEdit,修正了改变属性TEXT后不能UNDO的特性; 15.TSynEditSource,新添加的自己写的控件,用于存储Synedit的属性,详细请查看单元SynEditSource; 16.TSynEditSearcher,新添加的自己写的类,用于简化Synedit搜索,详细请查看单元SynEditSearcher; 17.TSynUniSyn,新添加的修改过的第三方控件,一个通用的Highlighter,详细请查看单元SynUniHighlighter; 18.TSynSpellCheck,新添加的第三方控件,一个拼写检查控件,详细请查看单元SynSpellCheck; 19.TSynEditor,新增加的TSynEdit的继承控件,增加对编辑文档管理的支持一些增强型功能 20.SynMsgDialog,一个消息框单元,参照Dialogs中MessageDlg的代码进行改进并重写; 21.SynEditStrRes,一个字符串常量声明单元,存储增加的自定义的控件中用到的字符串;编译环境 系统 Windows2000 (Build 2195: Service Pack 3) 工具 Borland Delphi 6 (Build 6.240) Update Pack 2 无错编译通过,并测试正常.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值