用Array of WideChar编辑TEdit.Text的问题

龙鹰心腹 2008-03-29 01:03:04
我有个结构,里面有个字段是用的Array of WideChar,在用TEdit控件编辑时
按下面的方法获得了编辑结果,但是在删除了内容时就在结果后面出现了乱码。
应该怎么解决?


Var
EdNodeNameValue : WideString;

EdNodeNameValue := Edit1.Text
for TempStrLen := 1 to length(EdNodeNameValue) do
begin
PSubLayer(Node.Data)^.SubName[TempStrLen-1] := EDNodeNameValue[TempStrLen];
end;

...全文
69 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihuasoft 2008-03-29
  • 打赏
  • 举报
回复
没关系的!不用乘以2了
龙鹰心腹 2008-03-29
  • 打赏
  • 举报
回复
恩,直接在最后加个元素赋#0最简单,不过还是担心出错,我再试试吧,谢谢你了!
龙鹰心腹 2008-03-29
  • 打赏
  • 举报
回复
数据定义的时候已经定长了的,Array[0..255] of WideChar
主要是漏了FillChar(SubNmae,256,#0)
不知道这个能对WideChar类型使用吗?还是只能对Char使用?Length需要乘2不?
lihuasoft 2008-03-29
  • 打赏
  • 举报
回复
我又汗自己一下:

或者自己在数组的最后一个元素之后,再增加一个元素,赋值为#0,也可以达到效果!
lihuasoft 2008-03-29
  • 打赏
  • 举报
回复
或者不用FillChar,用ZeroMemory也行。
lihuasoft 2008-03-29
  • 打赏
  • 举报
回复
上面的一些单词,我只是为了表达意思而写上的,因为我不知你的全部有效代码,所以只是意思到了就行了,你不要照抄啊!

一句话:就是每次用完ArrayofWideChar之后,用FillChar给它每个元素全部赋值为#0,其中有一个#0就是我们想要的那个。
lihuasoft 2008-03-29
  • 打赏
  • 举报
回复

估计是少了一个#0的原因。

因为在SubName[length(EdNodeNameValue)-1]之后也就是说在这个WideChar数组的第length(EdNodeNameValue)个元素之后,没有人为地加入一个#0结束符,所以,当Array of WideChar转换为字符串类型显示时,字符串并没有到这个位置而止,而后面的字符是我们不想要的乱码。

当第一次使用这个数组时,全部空间被填充了#0,所以没事。

所以,要在那个循环赋值之前,在EdNodeNameValue := Edit1.Text这句之后,写:

SetLength(给Array of WideChar赋长度的语句)----我没有看到,但建议加上(这不是问题所在)
FillChar(数组, Length, #0);----(就是这句了)

试一下吧。你的代码不全,我无法帮你试。

说错了不要打俺板子。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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