Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.227 Beiträge
 
Delphi 12 Athens
 
#7

AW: TComPort 4.0, OnRXChar, Zeile erkennen

  Alt 4. Nov 2010, 13:00
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat