Есть ли лучший способ добавить несколько символов в TMemo?

Я использую TMemo для хранения полученных символов от последовательного порта для просмотра. Когда они прибывают, я делаю:

Memo1.Text := Memo1.Text + sReceivedChars;

Это прекрасно работает, но я полагаю, что это довольно неэффективно, нужно получить существующий текст, прежде чем объединить мои несколько символов, а затем записать его обратно. Мне бы очень хотелось, чтобы функция SendChars() или что-то подобное. Есть ли лучший способ просто добавить несколько символов в конце существующего текста?

2 ответа

Решение

Я не знаю, считаете ли вы, что это стоит того, но вы можете сделать что-то вроде этого:

procedure TForm1.Button1Click(Sender: TObject);
var
  index: Integer;
  NewText: string;
begin
  NewText := 'Append This';
  index := GetWindowTextLength (Memo1.Handle);
  SendMessage(Memo1.Handle, EM_SETSEL, index, index);
  SendMessage (Memo1.Handle, EM_REPLACESEL, 0, Integer(@NewText[1]));
end;

Если ваш текст состоит из более чем одной строки (строки TStrings Коллекция, которая является фактическим типом Lines свойство TMemo), то вы можете сделать это:

Memo1.Lines[Memo1.Lines.Count - 1] := Memo1.Lines[Memo1.Lines.Count - 1] + sReceivedChars;

Таким образом, вы добавляете несколько символов в последнюю строку (последнюю строку в коллекции строк) заметки, не переводя весь текст в одну строку.

Другие вопросы по тегам