Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #10  
Antiguo 08-02-2010
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 20
look Va camino a la fama
Cita:
Empezado por jbautista Ver Mensaje
Hola que tal, bueno tengo un problema al liberar Form creados en tiempo de ejecución, el siguiente codigo me funciona perfectamente:

Código Delphi [-] {si el Form no esta creado se crea y se muestra, y si le vuelven a dar click al boton entonces solo lo muestra.} if not Assigned(Form_Prueba) then begin Application.CreateForm(TForm_Prueba, Form_Prueba); Form_Prueba.Show; end else begin if Form_Prueba.WindowState <> wsNormal then Form_Prueba.WindowState := wsNormal; Form_prueba.SetFocus ; end;


Como esta en modo "Show" se libera el mismo Form desde el evento OnClose con FreeAndNil y funciona bien.

Código Delphi [-]procedure TForm_Prueba.FormClose(Sender: TObject; var Action: TCloseAction); begin FreeAndNil(Form_Prueba); end;


Pero si deseo agregar un botón "Salir" en mi Form_Prueba al llamar a "Close" me genera un error... supongo que esto es por que FreeAndNil termina los procesos pendientes... y como OnClose es llamado desde otro evento a pesar de hacer el FreeandNil, regresa a terminar el evento OnClick (esto lo probe poniendo Showmessages y si regresa)

Código Delphi [-]procedure TForm_Prueba.btnSalirClick(Sender: TObject); begin //Showmessage(''); close; //Showmessage(''); {Este se msg se muestra a pesar del FreeAndNil} end;


{*************************************************************************************************** ***************}
Anteriormente tenia en el OnClose el llamado a Release, pero al perecer no libera al Form:

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


por al hacer la siguiente validación, el Assigned alparecer si lo encuentra :

Código Delphi [-] if not Assigned(Form_Prueba) then ... end;


Esto me confunde, ya que se supone que Release internamente hace su propio Free... y lo ocupaba por que el Release sirve para cuando se quiere liberar el mismo Form que lo invoco a diferencia del Free que es para liberar externamente...

La pregunta general es ¿Como puedo liberar correctamente mi Form desde su evento Onclose y desde un botón "Salir" que invoque a Close; Y que respete la validación: ?

Código Delphi [-] if not Assigned(Form_Prueba) then begin Application.CreateForm(TForm_Prueba, Form_Prueba); Form_Prueba.Show; end else begin if Form_Prueba.WindowState <> wsNormal then Form_Prueba.WindowState := wsNormal; Form_prueba.SetFocus ; end;


De antemano gracias y ojala puedan ayudarme!
Buen día saludos.


Código Delphi [-]
  if not Assigned(Form_Prueba) then 
  begin
     Form_Prueba:= TForm_Prueba.Create(nil);
     Form_Prueba.Show;
  end else begin
    if Form_Prueba.WindowState <> wsNormal  then
      Form_Prueba.WindowState :=  wsNormal;
    Form_prueba.SetFocus ;
  end;




procedure TForm_Prueba.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  freeandnil(Form_prueba);
end;
__________________
all your base are belong to us
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Assigned y Free gluglu Varios 4 14-05-2007 21:03:37
Problemas FreeAndNil OscarG OOP 4 09-11-2005 12:48:46
Invalid Pointer Operation con Free y Assigned adlfv OOP 3 07-10-2005 00:17:06
Database not assigned!! cwelx Conexión con bases de datos 1 29-09-2004 22:06:40
Left side cannot be assigned to gbece7mx7 Varios 2 29-10-2003 19:01:24


La franja horaria es GMT +2. Ahora son las 00:28:16.


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