Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cuando creo los formularios dinamicamente no me los muestra (https://www.clubdelphi.com/foros/showthread.php?t=63291)

Lizette 07-02-2009 06:15:54

Cuando creo los formularios dinamicamente no me los muestra
 
Hola, saludos, tengo el siguiente problema, estoy creando formularios dinamicamente, cuando cierro el formulario frmConsultar previemente creado, utilizo close(); y crea y manda llamar el siguiente formulario.. el caso es que cuando lo ejecuto, me cierra frmConsultar, pero no me muestra el frmBuscar, no sé cual sea el problema. Le calé paso a paso, y si lo cierra, si me crea y me manda llamar frmBuscar, pero cuando termina de ejecutar ese procedimiento desaparece y no se visualiza nada.

El codigo que utilizo es el siguiente:

Código Delphi [-]
procedure TfrmConsultar.BitCancelarClick(Sender: TObject);
begin
if(BitEliminar.Visible=False)and (BitEditar.Visible=False)then
begin
 if(MessageDlg('¿Desea continuar consultando pacientes?', mtConfirmation, [mbYes,mbNo], 1)=mrYes) then
  begin
   close();
   frmBuscarPaciente:=TfrmBuscarPaciente.Create(self);
   frmBuscarPaciente.Show;
  end
 else
  begin
   close();
   frmMenu.Show;
  end;
 end;

Y en el evento o close:

Código Delphi [-]
procedure TfrmConsultarPaciente.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
Action:=caFree;
end;

Gracias por sus aportaciones.

ArdiIIa 07-02-2009 11:41:46

El código de TfrmConsultar escrito a partir de Close, no se ejecutará, dado que estás cerrando el formulario y el flujo del programa es devuelto al lugar desde donde fué llamado TfrmConsultar.... y por supuesto, si en TfrmConsultar también tienes Action:=caFree; en modo alguno se ejecutará el código.


Eso es lo que veo a simple vista...

Lizette 07-02-2009 23:13:35

mmm gracias por la observación, ya le calé en ponerle el close(); ya que me crea y me manda llamar a Buscar, pero de igual manera, no lo muestra.. Cómo le puedo hacer?

ArdiIIa 07-02-2009 23:25:59

Simplemente dejando la sentencia close la última... dejando que TfrmConsultar permanezca a la vista (parece poco elegante)

O devolver el un valor a quien llamó a TfrmConsultar y en base a ese valor hacer las operaciones pertinentes:

TfrmBuscarPaciente.Create(self); ......... etc, etc

Varias alternativas hay, así que prueba con la que mejor se adapte a tus necesidades....

rcarrillom 08-02-2009 08:38:13

Lizette, el problema si no me equivoco es el self de la línea

Código Delphi [-]
frmBuscarPaciente:=TfrmBuscarPaciente.Create(self);

ya que asignas como padre de frmBuscarPaciente a frmConsultar y al momento de destruirlo, automáticamente destruye a sus hijos, te recomiendo que cambies de Self a Application.

De igual manera dejaría y recomiendo el Close como la última instrucción de todas después del if, veo que lo repites no importa el resultado del diálogo modal

Código Delphi [-]
procedure TfrmConsultar.BitCancelarClick(Sender: TObject);
begin
  if (not BitEliminar.Visible) and (not BitEditar.Visible)then
    begin
      if MessageDlg('¿Desea continuar consultando pacientes?', mtConfirmation, [mbYes,mbNo], 1)=mrYes then
        begin
          frmBuscarPaciente:=TfrmBuscarPaciente.Create(Application);
          frmBuscarPaciente.Show
        end
      else
        frmMenu.Show;
      Close
    end
end;

Lizette 08-02-2009 09:52:54

Gracias [rcarrillom]

;)


La franja horaria es GMT +2. Ahora son las 20:45:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi