Lo siento si soy molesto pero ...no me funciona, modifique con la sugerencia que me diste Roman pero no, igual se queda en ciclo infinito. En si lo que estoy capturando es una cadena proveniente del COM1,el puerto ya esta abierto y comprobado que con esta rutina captura adecuadamente, sin embargo lo que quiero es poder romper el ciclo repeat - until con ESC en caso de que por alguna razon la cadena no pudiese ser capturada (puerto dañado, cadeana enviada diferente, etc). Actualmente solo desconecto el dispositivo que envia datos para poder simular una falla y usar ESC para salir del bucle.
Código Delphi
[-]
repeat
Application.ProcessMessages ;
repeat
Application.ProcessMessages ;
until (FileRead(HandlePuerto,Num,1)=1) or (GetKeyState(VK_ESCAPE) and 128 = 128);
until (Num = Terminador) or (GetKeyState(VK_ESCAPE) and 128 = 128);
Cad:='';
for n := 1 to longCadena do
begin
repeat
Application.ProcessMessages ;
until (FileRead(HandlePuerto,Num,1)= 1) or (GetKeyState(VK_ESCAPE) and 128 = 128); Cad := Cad + chr(Num);
end;
cPeso := MidStr(Cad,3,8);
cUnits := MidStr(Cad,11,1);
cMode := MidStr(Cad,12,1);
cStatus := MidStr(Cad,13,1);