Hola,
¿Pusiste un "Application.ProcessMessages"? Tiene toda la pinta de que no, pero, si lo pusiste y aún así encuentras el problema que describes... la verdad, no sé si se ganaría algo cambiando un poco las cosas tal que así:
Código Delphi
[-]
Cancelado := false;
while condiciones do
begin
Application.ProcessMessages;
if Cancelado then
Break;
operaciones;
end;
También puedes probar:
Código Delphi
[-]
Cancelado := false;
while condiciones do
begin
if Cancelado then
Break;
operaciones;
Application.ProcessMessages;
end;
O dejarlo como Román decía al principio, pero:
Código Delphi
[-]
Cancelado := false;
while condiciones and not Cancelado do
begin
operaciones;
Application.ProcessMessages;
end;
O, por otro lado,... tal vez utilizar algún "Hilo" aparte en tu aplicación para leer el archivo de marras...