Cita:
Empezado por chileno
pero la idea inicial es cerrar la ficha
|
El punto es que es esta idea original la que no le cuadra a nadie más que a ti. ¿Para qué muestras una ventana a la que el usuario posiblemente no va a acceder (si escoge cancelar)?
Pero bueno, no soy yo quien para dictar tus gustos. Lo apunto sólo para opinar que a fin de cuentas esto puede ser confuso para el usuario.
¿Se puede hacer lo que quieres? Sí, claro que se puede. El problema es sólo, como ya has visto, que no puedes cerrar- ni, por tanto destruir -una ventana desde su propio evento OnShow. La solución entonces está en ejecutar el código que ahora tienes en este evento
posteriormente.
Aquí la idea:
Código Delphi
[-]
const
CM_AFTERSHOW = WM_USER + 1;
type
TFicha1 = class(TForm)
procedure FormShow(Sender: TObject);
private
procedure CMAfterShow(var Msg: TMessage); message CMAFTERSHOW;
end;
implementation
procedure TFicha1.FormShow(Sender: TObject);
begin
PostMessage(Self.Handle, CM_AFTERSHOW, 0, 0);
end;
procedure TForm1.CMAfterShow(var Msg: TMessage);
begin
with TFicha2.Create(nil) do
try
if ShowModal = mrCancel then Self.Close;
finally
Free;
end;
end;
PostMessage envía un mensaje a la ventana (Ficha1) que se procesará sólo hasta que terminen de procesarse los otros mensajes, lo cual se traduce en que tal mensaje no se recibirá sino hasta que el evento OnShow haya terminado por completo. Tal mensaje lo recibes con el manejador CMAfterShow desde donde sí puedes autocerrar el formulario.
// Saludos