Wie wäre es mit dem lesen von jeweils einem Char? (wie himitsu´s Vorschlag)
DCB.EvtChar := #0;
Beispiel:
Delphi-Quellcode:
function ReadChar(var MyChar : Char) : boolean;
var
Buffer : array[0..1] of char;
nReadChars : dword;
begin
if not ReadFile ( MyHandle,
Buffer,
1,
nReadChars,
nil) then begin
result := false;
exit;
end;
if nReadChars = 0 then
result := false
else begin
result := true;
MyByte := Buffer[0];
end;
end;
function GetAnswer(const ATimeOutInMS : Cardinal) : String;
var
i : Integer;
TimeStamp : Cardinal;
AnswerChars : Array of Char;
CurrentChar : Char;
begin
TimeStamp := GetTickCount;
Result := '';
while True do begin
if ReadChar(CurrentChar) then begin
// #13#10 beendet gültige Antwort:
if CurrentChar=#13 then break;
SetLength(AnswerChars,Length(AnswerChars)+1);
AnswerChars[High(AnswerChars)] := CurrentChar;
end;
if GetTickCount>TimeStamp+ATimeOutInMS then begin
//Result := 'Timeout beim Lesen';
exit;
end;
end;
SetLength(Result,Length(AnswerChars));
for i:= 1 to Length(AnswerChars) do Result[i] := AnswerChars[i];
end
Verknüpft mit einem "ATimeOutInMS" von 9 (ms) sollte das deinen Zwecken genügen.
Evtl. ist noch was falsch im Code. Nur im Browser getippt; er ist nicht getestet.