проблемы с memo.lines.add - PullRequest
       3

проблемы с memo.lines.add

4 голосов
/ 22 ноября 2011

Я пытаюсь создать приложение для чата, которое отправит сообщение в заметку в форме, подобной этой:

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);

Есть предложения, как это исправить?

1 Ответ

8 голосов
/ 22 ноября 2011

Значение, возвращаемое в dwUserNameLen , включает нулевой терминатор .И вы, таким образом, включаете его в text.Когда строка отправляется в элемент управления редактирования Windows за TMemo, строка передается как строка с нулевым символом в конце.Таким образом, случайный ноль из имени пользователя прекращает передачу данных.

Измените код следующим образом:

SetLength(sUserName, dwUserNameLen-1);

Вы также должны проверить возвращаемое значение GetUserName в случае, если естьошибка, но я оставлю эту деталь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...