¿Cómo se evita que se inicie un nuevo manejo de eventos cuando ya se está ejecutando un evento?Delphi y evitar el manejo de eventos
Presioné un botón1 y se inició el controlador de eventos, p. trabajo lento de impresión Existen varios controles en los botones de formulario, ediciones, combos y quiero que se permita un nuevo evento solo después de finalizar el controlador de ejecución.
He utilizado la variable fRunning para bloquear el controlador en el controlador de eventos compartidos. ¿Hay alguna manera más inteligente de manejar esto?
procedure TFormFoo.Button_Click(Sender: TObject);
begin
if not fRunning then
try
fRunning := true;
if (Sender = Button1) then // Call something slow ...
if (Sender = Button2) then // Call something ...
if (Sender = Button3) then // Call something ...
finally
fRunning := false;
end;
end;
Esta buena solución si solo hay un Button1 en su forma. El OnClick de Button1 está deshabilitado, pero Button2 puede activar un nuevo evento OnClick si se llama a Application.ProcessMessages durante el manejo del evento Button1. – pKarelian
Gracias dummzeuch. El contenedor de interfaz es una forma muy práctica de destruir el objeto de evento temporal. No tienes que llamar gratis(). – pKarelian
+1 pero en * teoría *, existe la posibilidad de que el evento no se vuelva a conectar durante un tiempo. En la práctica, creo que es seguro suponer que la instancia de interfaz se destruye cuando se realiza la llamada (y el controlador de eventos se vuelve a adjuntar). –