我正在研究TRichEdit(Delphi XE2)。
有什么方法可以检查richedit文本框是否包含受保护的文本?也是受保护文本的起始位置,而不是遍历整个文本。
目前我正在使用以下代码
source.SelStart := charNo; //source is richedit name and charno is the
//iterating loop
source.SelLength := 1;
if (source.SelAttributes.Protected) then
当文本很大时,上面的代码需要花费大量时间来执行。
这曾经在delphi 4中正常工作
有人可以告诉为什么相同的代码在delphi XE2中说更多的时间,而在Delphi 4中用更少的时间也是在Delphi XE2中执行此操作的正确方法?
答案 0 :(得分:1)
无法搜索文本属性。迭代单个字符并查询其属性是唯一的选择。
要加快代码速度,您可以:
使用EM_SETSEL
或EM_EXSETSEL
窗口消息,而不是单独设置SelStart
和SelLength
属性。
使用EM_SETEVENTMASK
窗口消息关闭RichEdit的内部通知(例如EN_HSCROLL
,EN_VSCROLL
和EN_SELCHANGE
)正在迭代。
您可能还会考虑使用WM_SETREDRAW
窗口消息来禁用RichEdit在重复时重新绘制。