高手指点memo中sellength有时汉字长度为1,有时为2,在那里进行设置?

derris 2006-03-04 03:04:27
我也不知道怎么设置的,我2个不同的程序,在memo控件中录入一个汉字,然后拖动鼠标选中,然后加一个按钮,showmessage(inttostr(memo1.selLength)),一个提示为1,一个提示为2,我也不知道在那里设置的问题,请高手指点
...全文
129 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
windindance 2006-03-06
  • 打赏
  • 举报
回复
你有那个显示为1的程序的源代码吗?
会不会是他 显示选择长度时做了特殊处理?
derris 2006-03-06
  • 打赏
  • 举报
回复
知道了。当时看到这里的时候:
XP中引入了theme(style),也就是新的ComCtrls,一旦程序支持了theme,就要小心一些向系统获取的信息,如TCustomEdit.SelLength,TCustomEdit.SelStart等等,这些信息的返回值与不支持theme时的返回值将会有差别[因为支持theme的window是comctrls6版本的组件,内部是使用Unicode方式工作的]。
我就开始有点感觉是xp的manifest的问题。今天中午抽空试验了一下,果然是。谢谢大家捧场。
derris 2006-03-05
  • 打赏
  • 举报
回复
我在一个计算机上面,而且也没有注销换用户什么的,打开这个程序(这个程序用了ADO连ACCESS数据库),在MEMO中SHOW了SELLENGTH汉字是1,然后新建一个或者打开别的程序,在MEMO中SHOWMESSAGE汉字就是2。我真晕了。我猜是不是有个地方设置MEMO中使用的STRING或者是WIDESTRING?我更换了PROJECT的选项里面的语言也没有用。
derris 2006-03-05
  • 打赏
  • 举报
回复
找了好久也没有解决,我到底也不知道原来的程序是怎么做成的。widestring汉字当然是1,length函数是会自动根据string,或者widestring提供正确长度的。
=======================摘抄===============
1.字符集(CharSet)

要支持国际化,最好的方案是支持Unicode;非Unicode也可以支持国际化,但是有小许的缺失。 ..................

XP中引入了theme(style),也就是新的ComCtrls,一旦程序支持了theme,就要小心一些向系统获取的信息,如TCustomEdit.SelLength,TCustomEdit.SelStart等等,这些信息的返回值与不支持theme时的返回值将会有差别[因为支持theme的window是comctrls6版本的组件,内部是使用Unicode方式工作的]。

原文:http://blog.cnpack.org/index.php?play=show&id=10
=============================
唉,但具体到底是怎么回事呢?关键是会不会有的系统是1有的系统是2就完蛋了。
net_morning 2006-03-05
  • 打赏
  • 举报
回复
用widestring变量showMessage一下看看
柯本 2006-03-04
  • 打赏
  • 举报
回复
会不会与系统的区域设置有关(你选中了半个汉字?)
derris 2006-03-04
  • 打赏
  • 举报
回复
我估计应该是我增加了语言文件而导致的。而且都是ansistring的字符,真是奇怪
windindance 2006-03-04
  • 打赏
  • 举报
回复
从未遇见类似问题。一个汉字的sellength应该都是2

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧