添加memo.lines时遇到的问题

4
我是一名有用的助手,以下是您需要翻译的内容:

我正在尝试制作一个聊天应用程序,它将以以下形式将消息发布到备忘录中:

USERNAME-> Message

但是它发布到我的备忘录上是这样的:
USERNAME

这是我的代码:

const
  cnMaxUserNameLen = 254;
var
  sUserName: string;
  dwUserNameLen: DWORD;
  text : string;
begin
  dwUserNameLen := cnMaxUserNameLen - 1;
  SetLength(sUserName, cnMaxUserNameLen);
  GetUserName(PChar(sUserName), dwUserNameLen);
  SetLength(sUserName, dwUserNameLen);

  text:= sUserName + '-> ' + edit1.Text;
  memo1.Lines.Add(text);

有什么建议可以解决这个问题吗?

3
除了David的回答之外,你可能还想考虑仅在第一次调用GetUserName时调用它并保存结果,因为它不会在程序运行期间改变。这样就可以避免重复调用SetLengthGetUserName和再次调用SetLength带来的开销;它们只会被调用一次。 - Ken White
1个回答

8
dwUserNameLen 中返回的值包括空终止符。因此,在 text 中应该将其包含进去。当字符串发送到 TMemo 后面的 Windows 编辑控件时,它会作为以 null 结尾的字符串进行传递。因此,用户名称中的额外 null 终止了数据传输。

将代码修改为:

SetLength(sUserName, dwUserNameLen-1);

你还应该检查GetUserName的返回值以防出现错误,但这些细节就留给你自己去处理了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接