CnPack Forum » 技术板块灌水区 » 在Delphi 2007 下用TMemo控件的朋友小心了!


2007-11-21 21:00 Passion
在Delphi 2007 下用TMemo控件的朋友小心了!

Delphi 2007 下的VCL有不少新的改动,其中一项是TMemo的SelStart和SelLength等属性,

在以前的Delphi中,SelStart是根据字节数来定的,比如Memo中是字符串“a啊b吧aa”,欲把光标放在b字后,只需要SelStart := 4;即可。

而在Delphi 2007中,SelStart是根据字符数来确定的,欲把光标放“a啊b吧aa”的b字后,得SelStart := 3;才行。如果写了SelStart := 4;,光标则会出现在吧字后。

这个问题在Memo的查找替换时很明显,尤其是根据Length(string)进行长度判断的时候,字符和字节的混淆会给程序带来很显著的bug,包括CnWizards中的字符串编辑器的查找替换功能,以及编辑器专家收集面板的查找替换功能。

除了修改代码外,目前还未发现好的解决方案。:Q

2007-11-21 22:15 zzzl
update3的tmemo没有右键菜单,有什么办法解决?

2007-12-1 14:11 guoqingaa
一句话,对照delphi7 的代码
dephi2007 和 delphi7 的对比后,自己改~~
我只看代码~~最求结果:mad:

2008-2-23 15:06 dwf3110
回复 #1 Passion 的帖子

字符串s:WideString,虽然每个字符 字节数双字节了,Length(s)=字节数;
其他字符串s:AnsiString(ShortString), Length(s)=字节数;
也就是说,字符类型发生了改变引起了上面的改变。

[[i] 本帖最后由 dwf3110 于 2008-2-23 15:09 编辑 [/i]]

页: [1]


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.