1

我正在研究 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 中执行此操作的正确方法吗?

4

1 回答 1

1

无法搜索文本属性。迭代单个字符并查询它们的属性是唯一的选择。

要加快代码速度,您可以:

  1. 使用EM_SETSELorEM_EXSETSEL窗口消息而不是单独设置SelStartandSelLength属性。

  2. 在您进行迭代时,使用EM_SETEVENTMASK窗口消息关闭 RichEdit 的内部通知(例如EN_HSCROLLEN_VSCROLL和)。EN_SELCHANGE

  3. 您也可以考虑WM_SETREDRAW在迭代时使用窗口消息来禁止 RichEdit 重新绘制。

于 2015-02-05T20:05:39.963 回答