4 个解决方案
#1
以前用过,因为现在机子上没装syn控件,所以工程没法打开看。
记得syn提供了一个比较简单的方法,它有一个TSynEditSearch控件。
把TSynEditSearch加到窗体上,把你的TSynEdit的SearchEngine设为刚才那个TSynEditSearch,然后加个TFindDialog来显示查找对话框。
这是我的TFindDialog的查找和查找下一个的事件函数代码,
其中m_dlgFind就是TFindDialog,m_sedtMain就是TSynEdit,m_sschOption是个TSynSearchOptions型变量,替换也是通过给TSynSearchOptions加一个属性实现的。
代码如下:
//查找
void __fastcall TfrmMain::m_dlgFindFind(TObject *Sender)
{
m_sschOption.Clear();
if (m_dlgFind->Options.Contains(frMatchCase)) //大小写敏感
{
m_sschOption << ssoMatchCase;
}
if (m_dlgFind->Options.Contains(frWholeWord)) //全字符匹配
{
m_sschOption << ssoWholeWord;
}
if (!m_dlgFind->Options.Contains(frDown)) //向上搜索
{
m_sschOption << ssoBackwards;
}
if (m_sedtMain->SearchReplace(m_dlgFind->FindTextA, "", m_sschOption) == 0)
{
AnsiString sMessage;
sMessage.printf("找不到\"%s\"", m_dlgFind->FindTextA);
//如果找不到,就出一个提示
MessageBox(
NULL,
sMessage.c_str(),
"提示",
MB_ICONINFORMATION
);
}
}
//查找下一个
void __fastcall TfrmMain::m_miFindNextClick(TObject *Sender)
{
//如果要搜的文本是空的,就打开查找对话框
if (m_dlgFind->FindTextA == "")
{
m_miFindClick(Sender);
}
else
{
if (m_sedtMain->SearchReplace(m_dlgFind->FindTextA, "", m_sschOption) == 0)
{
AnsiString sMessage;
sMessage.printf("找不到\"%s\"", m_dlgFind->FindTextA);
//如果找不到,就出一个提示
MessageBox(
Handle,
sMessage.c_str(),
"提示",
MB_ICONINFORMATION
);
}
}
}
记得syn提供了一个比较简单的方法,它有一个TSynEditSearch控件。
把TSynEditSearch加到窗体上,把你的TSynEdit的SearchEngine设为刚才那个TSynEditSearch,然后加个TFindDialog来显示查找对话框。
这是我的TFindDialog的查找和查找下一个的事件函数代码,
其中m_dlgFind就是TFindDialog,m_sedtMain就是TSynEdit,m_sschOption是个TSynSearchOptions型变量,替换也是通过给TSynSearchOptions加一个属性实现的。
代码如下:
//查找
void __fastcall TfrmMain::m_dlgFindFind(TObject *Sender)
{
m_sschOption.Clear();
if (m_dlgFind->Options.Contains(frMatchCase)) //大小写敏感
{
m_sschOption << ssoMatchCase;
}
if (m_dlgFind->Options.Contains(frWholeWord)) //全字符匹配
{
m_sschOption << ssoWholeWord;
}
if (!m_dlgFind->Options.Contains(frDown)) //向上搜索
{
m_sschOption << ssoBackwards;
}
if (m_sedtMain->SearchReplace(m_dlgFind->FindTextA, "", m_sschOption) == 0)
{
AnsiString sMessage;
sMessage.printf("找不到\"%s\"", m_dlgFind->FindTextA);
//如果找不到,就出一个提示
MessageBox(
NULL,
sMessage.c_str(),
"提示",
MB_ICONINFORMATION
);
}
}
//查找下一个
void __fastcall TfrmMain::m_miFindNextClick(TObject *Sender)
{
//如果要搜的文本是空的,就打开查找对话框
if (m_dlgFind->FindTextA == "")
{
m_miFindClick(Sender);
}
else
{
if (m_sedtMain->SearchReplace(m_dlgFind->FindTextA, "", m_sschOption) == 0)
{
AnsiString sMessage;
sMessage.printf("找不到\"%s\"", m_dlgFind->FindTextA);
//如果找不到,就出一个提示
MessageBox(
Handle,
sMessage.c_str(),
"提示",
MB_ICONINFORMATION
);
}
}
}
#2
多谢, 我下去试试看,
#3
不错, 很可惜 Syn插件没有提供 help, 很多东西不能查, 而且他的例子只能用 Delphi才能看,比较难弄,
#4
十分感谢1楼兄弟,给我指条明路,经过我自己研究,解决了替换,全部替换等问题,都很简单,我已经将完成的程序和过程发到本人 blog http://blog.csdn.net/lonelyforest, 如果那位兄弟&我一样,需要这个东西,可以去看看。有片关于 SynEdit 的查找实现。
#1
以前用过,因为现在机子上没装syn控件,所以工程没法打开看。
记得syn提供了一个比较简单的方法,它有一个TSynEditSearch控件。
把TSynEditSearch加到窗体上,把你的TSynEdit的SearchEngine设为刚才那个TSynEditSearch,然后加个TFindDialog来显示查找对话框。
这是我的TFindDialog的查找和查找下一个的事件函数代码,
其中m_dlgFind就是TFindDialog,m_sedtMain就是TSynEdit,m_sschOption是个TSynSearchOptions型变量,替换也是通过给TSynSearchOptions加一个属性实现的。
代码如下:
//查找
void __fastcall TfrmMain::m_dlgFindFind(TObject *Sender)
{
m_sschOption.Clear();
if (m_dlgFind->Options.Contains(frMatchCase)) //大小写敏感
{
m_sschOption << ssoMatchCase;
}
if (m_dlgFind->Options.Contains(frWholeWord)) //全字符匹配
{
m_sschOption << ssoWholeWord;
}
if (!m_dlgFind->Options.Contains(frDown)) //向上搜索
{
m_sschOption << ssoBackwards;
}
if (m_sedtMain->SearchReplace(m_dlgFind->FindTextA, "", m_sschOption) == 0)
{
AnsiString sMessage;
sMessage.printf("找不到\"%s\"", m_dlgFind->FindTextA);
//如果找不到,就出一个提示
MessageBox(
NULL,
sMessage.c_str(),
"提示",
MB_ICONINFORMATION
);
}
}
//查找下一个
void __fastcall TfrmMain::m_miFindNextClick(TObject *Sender)
{
//如果要搜的文本是空的,就打开查找对话框
if (m_dlgFind->FindTextA == "")
{
m_miFindClick(Sender);
}
else
{
if (m_sedtMain->SearchReplace(m_dlgFind->FindTextA, "", m_sschOption) == 0)
{
AnsiString sMessage;
sMessage.printf("找不到\"%s\"", m_dlgFind->FindTextA);
//如果找不到,就出一个提示
MessageBox(
Handle,
sMessage.c_str(),
"提示",
MB_ICONINFORMATION
);
}
}
}
记得syn提供了一个比较简单的方法,它有一个TSynEditSearch控件。
把TSynEditSearch加到窗体上,把你的TSynEdit的SearchEngine设为刚才那个TSynEditSearch,然后加个TFindDialog来显示查找对话框。
这是我的TFindDialog的查找和查找下一个的事件函数代码,
其中m_dlgFind就是TFindDialog,m_sedtMain就是TSynEdit,m_sschOption是个TSynSearchOptions型变量,替换也是通过给TSynSearchOptions加一个属性实现的。
代码如下:
//查找
void __fastcall TfrmMain::m_dlgFindFind(TObject *Sender)
{
m_sschOption.Clear();
if (m_dlgFind->Options.Contains(frMatchCase)) //大小写敏感
{
m_sschOption << ssoMatchCase;
}
if (m_dlgFind->Options.Contains(frWholeWord)) //全字符匹配
{
m_sschOption << ssoWholeWord;
}
if (!m_dlgFind->Options.Contains(frDown)) //向上搜索
{
m_sschOption << ssoBackwards;
}
if (m_sedtMain->SearchReplace(m_dlgFind->FindTextA, "", m_sschOption) == 0)
{
AnsiString sMessage;
sMessage.printf("找不到\"%s\"", m_dlgFind->FindTextA);
//如果找不到,就出一个提示
MessageBox(
NULL,
sMessage.c_str(),
"提示",
MB_ICONINFORMATION
);
}
}
//查找下一个
void __fastcall TfrmMain::m_miFindNextClick(TObject *Sender)
{
//如果要搜的文本是空的,就打开查找对话框
if (m_dlgFind->FindTextA == "")
{
m_miFindClick(Sender);
}
else
{
if (m_sedtMain->SearchReplace(m_dlgFind->FindTextA, "", m_sschOption) == 0)
{
AnsiString sMessage;
sMessage.printf("找不到\"%s\"", m_dlgFind->FindTextA);
//如果找不到,就出一个提示
MessageBox(
Handle,
sMessage.c_str(),
"提示",
MB_ICONINFORMATION
);
}
}
}
#2
多谢, 我下去试试看,
#3
不错, 很可惜 Syn插件没有提供 help, 很多东西不能查, 而且他的例子只能用 Delphi才能看,比较难弄,
#4
十分感谢1楼兄弟,给我指条明路,经过我自己研究,解决了替换,全部替换等问题,都很简单,我已经将完成的程序和过程发到本人 blog http://blog.csdn.net/lonelyforest, 如果那位兄弟&我一样,需要这个东西,可以去看看。有片关于 SynEdit 的查找实现。