PDA

Ver la Versión Completa : Forma que no se cierra


rhino0nt
14-10-2010, 18:27:54
Tengo un sistema MDI, al llamar una forma hija realizo en el evento FormShow() una validación para revisar si existen los registros suficientes para trabajar con la forma, si no existen se debe cerrar asi que efectuo la revisión y de ser 0 el resultado envío un mensaje y llamo la función Close, pero el mensaje aparece y la forma no se cierra, la forma aparece en pantalla, al hacer la depuración veo que se ejecuta la línea de Close pero nunca se efectua la acción, que estoy haciendo mal?

ecfisa
14-10-2010, 19:52:11
Hola.

¿ Ya probaste asignando Action a caFree en el evento OnClose ?


procedure TForm1.MDIChildClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
end;




Saludos. :)

rhino0nt
14-10-2010, 20:08:50
Lo solucione con este post de Roman:



Una forma de hacerlo:

Código:
const
CM_CLOSE = WM_USER + 1;

type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure CMClose(var Message: TMessage); message CM_CLOSE;
end;

implementation

procedure TForm2.CMClose(var Message: TMessage);
begin
ModalResult := mrOk;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
PostMessage(Handle, CM_CLOSE, 0, 0);
end;
PostMessage manda el mensaje pero sólo hasta que se procese el resto de mensajes, en este caso hasta que todos los mensajes necesarios para que el formulario termine de cargarse se procesen. Así, en el manejador del mensaje CM_CLOSE pones ya el valor deseado para ModalResult.

// Saludos

El problema es por el momento en que se llama el evento Close dentro del ciclo de vida de la forma, pero esto lo resuelve.

Gracias a todos.