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;
テキストが複数行 ( TMemoTStrings
のプロパティの実際の型であるコレクションの文字列Lines
) にある場合は、次のようにすることができます。
Memo1.Lines[Memo1.Lines.Count - 1] := Memo1.Lines[Memo1.Lines.Count - 1] + sReceivedChars;
したがって、テキスト全体を 1 つの文字列にすることなく、メモの最後の行 (文字列コレクションの最後の文字列) にいくつかの文字を追加します。