Bei dem "Count" scheint was nicht zu stimmen, denn dieses hast du grade doppelt ... als Parameter und als lokale Variable (aber hier sollte Delphi ja mecker)
ansonsten ... wozu doppelt suchen:
Delphi-Quellcode:
procedure TForm1.SplitBuffer(var Value: String; Data: TStringList);
var
i : Integer;
begin
while true do
begin
i := Pos(#$D#$A, Value);
if i = 0 then exit;
Data.Add(LeftStr(Value, i - 1)); // Data.Add(Copy(Value, 1, i - 1));
Delete(Value, i + 1);
end;
end;
procedure TForm1.OnRxChar(Sender: TObject; Count: Integer);
var
ReceivedData : AnsiString;
i: Integer;
begin
ComPort_Connection.ReadStr(ReceivedData, Count);
TextBuffer := TextBuffer + ReceivedData;
NewLines.Clear;
SplitBuffer(TextBuffer, NewLines);
// Analyse NewLines here...
end;
und notfalls kann man es auch direkt in der Schleife verarbeiten und sich so die StringList sparen:
Delphi-Quellcode:
procedure TForm1.OnRxChar(Sender: TObject; Count: Integer);
var
ReceivedData : AnsiString;
i: Integer;
begin
ComPort_Connection.ReadStr(ReceivedData, Count);
TextBuffer := TextBuffer + ReceivedData;
while true do
begin
i := Pos(#$D#$A, TextBuffer);
if i = 0 then break;
Value := LeftStr(TextBuffer, i - 1); // Value := Copy(TextBuffer, 1, i - 1);
// Analyse Value here...
end;
end;
und beim Trennen der Verbindung, dann noch den Rest verarbeiten
Delphi-Quellcode:
if TextBuffer <> '' then
begin
// Analyse TextBuffer here...
end;