Gracias por la bienvenida... he utilizado el foro para resolver muchos de mis problemas y pensé que sería bueno escribir algo para los demás.
Otra opción con 2 variables globales... en este caso, se llena QuieroCerrar, pero no se cierra y después del FormRepaint, si es True, se cierra.
Nuevamente, no aborta el FormRepaint, pero cerrará el form correctamente después de todo.
Espero que se parezca a lo que buscas.
(para acelerar el cierre, quizás puedas usar la variable global PuedoCerrar dentro del procedure FormRepaint para NO ejecutar ciertas cosas que tarden mucho.
ej. pseudocodigo
Código:
procedure FormRepaint
begin
if PuedoCerrar then
[primera cosa a realizar]
if PuedoCerrar then
[seguinda cosa a realizar]
if PuedoCerrar then
[tercera cosa a realizar]
if PuedoCerrar then
[primera cosa a realizar]
end
)
Variable global al form:
PuedoCerrar : boolean;
QuieroCerrar : boolean;
Código:
procedure TForm.FormActivate(Sender: TObject);
begin
Self.OnActivate := nil;
PuedoCerrar := False;
QuieroCerrar := False;
FormRepaint;
PuedoCerrar := True;
if (QuieroCerrar) then
Close;
end;
procedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (PuedoCerrar) then
begin
Action := caFree;
FormMain := nil;
end else
begin
Action := caNone;
QuieroCerrar := True;
end;
end;