Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 01-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Problemas no hay ninguno mientras no solapes las 2 creaciones del objeto.
Esto es inaceptable:

Código Delphi [-]
procedure TFrameCamAlt.BtnSalirClick(Sender: TObject);
begin
  FrameCamAlt.Free;
end;

Porque desde una clase TFRameCamAlt, estas intentando liberar la memoria del objeto que lo instancia.

Imagina un código así:
Código Delphi [-]
var x:TFrameCamAlt;
begin 
  x := TFrameCamalt.Create(nil);

end;
Cuando el usuario pulse el botón salir, se querrá liberar la variable FrameCamAlt que sabe dios si está creada o no.

La solución a tu problema, desde mi punto de vista, es crear al frame un evento OnSalir, cuando el usuario pulsa el botón salir, se lanza ese evento, que lo recoge la ventana donde se creó el Frame, y desde allí se destruye el Frame. Resultará complejo, pero deberías hacerlo así:


Definición del Frame:
Código Delphi [-]
TFrameCamAlt = class(Tframe)
...
private 
   FOnSalir : TnotifyEvent;
public
   property OnSalir:TnotifyEvent read FOnSalir write FOnSalir;
end;

implementation

procedure TFrameCamAlt.BtnSalirclick(....);
begin
  if Assigned(FOnSalir) then FOnSalir(Self);
end;

Ahora la ventana donde quieres incluir el frame en ejecución:
Código Delphi [-]
TForm1 = class (TForm);
...
private 
    CamAlt : TFRameCamAlt;
    procedure RecibeEventoSalir(Sender:TObject);
....

implementation

procedure Tform1.FormCreate(...); supongo que creas el frame al crear el Form
begin
   CamAlt := TFRameCamAlt.Create(nil);
   CamAlt.OnSalir := RecibeEventoSalir;
end;

procedure TForm1.RecibeEventoSalir(Sender:TObject);  
begin
  FreeAndNil(CamAlt);
end;

Aquí está el detalle importante: La misma ventana que crea el frame es el que lo destruye. Además evitas dolores de cabeza, muy típico cuando depuras un programa: "El frame se crea en el form1... pero ¿donde se destruye? ahhh ... siii, en el Form25 cuando se pulsa el boton XXX"... demasiado lío compañero.


Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 01-04-2007 a las 02:40:19.
Responder Con Cita
 



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
Frames Caro Varios 4 17-06-2005 16:55:01
Varios forms, frames y un Data Module gluglu Varios 1 07-04-2005 19:28:51
Uso de Frames jdangosto OOP 7 20-01-2005 00:15:03
Frames pepelu1975 OOP 2 21-05-2004 17:32:01
Frames pepelu1975 Varios 2 17-02-2004 18:00:30


La franja horaria es GMT +2. Ahora son las 09:45:52.


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
Copyright 1996-2007 Club Delphi