2017-06-07 4 views
-1

Ich habe diesen Code:Delphi Comport immer die kompletten Daten nicht

procedure Tfrm_main.cport_scanningRxChar(Sender: TObject; Count: Integer); 
begin 
    cport_scanning.ReadStr(data, Count); 
    memo3.Text := data; 
end; 

Das tatsächliche Ergebnis ist:

memo3.text := M000000; 

Dann wechselte sie in:

memo3.text := 021111D; 

das erwartete Ergebnis:

memo3.text := M000000021111D; 

Antwort

0

In Zukunft würde es hilfreich sein, anzugeben, welche Komponente Sie verwenden, insbesondere da TComPort nicht mit Delphi geliefert wird.

Die Antwort ist, weil OnRxChar aufgerufen werden kann, bevor alle Daten empfangen wurden. Ihr Code sollte lauten:

procedure Tfrm_main.cport_scanningRxChar(Sender: TObject; Count: Integer); 
begin 
    cport_scanning.ReadStr(data, Count); 
    memo3.Text := memo3.Text + data; 
end; 
+1

Stellen Sie sich vor, was passiert, wenn Sie den nächsten Code scannen (vorausgesetzt, das angeschlossene Gerät ist eine Art Barcode-Scanner). Sie sollten den Code bilden, bis eine abschließende Sequenz empfangen wird. Einige COM-Port-Komponenten können dies voreinstellen und den Rest für Sie erledigen (und ein Ereignis auslösen, wenn die vollständigen Daten empfangen werden). – Victoria

+0

Nach kurzem Blick auf [diese Bibliothek] (https://sourceforge.net/projects/comport/) würde ich sagen, dass es das 'TComDataPacket' ist, das so etwas implementiert. – Victoria

+0

Ja, ich hatte erwartet, dass sie entweder eine abschließende Sequenz oder einen anderen Indikator haben –

Verwandte Themen