我正在使用 TMemo 来保存从串行端口接收到的字符以供查看。当他们到达时,我正在做:
Memo1.Text := Memo1.Text + sReceivedChars;
这很好用,但我认为它效率很低,必须先获取现有文本,然后再连接我的几个字符,然后再写回去。我真的很想要一个“SendChars()”函数或类似的东西。有没有更好的方法在现有文本的末尾简单地添加几个字符?
我不知道你是否认为这值得,但你可以这样做:
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;
因此,您将一些字符添加到备忘录的最后一行(字符串集合中的最后一个字符串),而不是将整个文本放入单个字符串中。