Hola:
Para que el bucle se pare y atienda los mensajes de windows, puedes hacer en su interior:
Application.ProcessMessages;
Ahora bien, si tu bucle se repite muchas veces y el proceso que se realiza en su interior es muy rápido, esta llamada te lo va a enlentecer mucho. En ese caso es mejor que hagas algo como:
Cont := 0;
Pulsada:= False;
while not (Pulsada) do
begin
// Aquí iría tu proceso
.
.
.
// Sólo se llama a ProcessMessages una vez de cada 100
// iteraciones
if (cont mod 100) = 0 then
begin
Application.ProcessMessages;
end;
INC(cont);
end;
El código del botón Cancelar sería, simplemente,
Pulsada := True;
donde "Pulsada" sería una variable global.
Un saludo.
|