Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
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
  #23  
Antiguo 26-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Estas usando ese mismo evento para destruir varios frames, y debe tenerse en cuenta.

Por ejemplo:
- has creado 2 frames (para simplificar los nombres) uno es "Cam" y el otro "Cli".
- Ahora cierras un frame.
- Se ejecuta el evento TForm2.RecibeEventoOnSalir que liberará de memoria los dos frames ¿eso no importa?

Lo pregunto porque yo no sé la lógica de tu programa, pero al menos no lo veo del todo correcto.

Una posible solución sería esta:
Código Delphi [-]
procedure TForm2.RecibeEventoOnSalir(Sender: TObject);
begin
  if (FrameCamAlt <> nil) and (Sender is TFrameCamAlt) then FreeAndNil(FrameCamAlt);
  if (FrameCliAlt <> nil) and (Sender is TFrameCliAlt)then FreeAndNil(FrameCliAlt);
end;

El truco viene de la definición del frame, en la línea que se lanza el evento:
Código Delphi [-]
FOnSalir(Self);
como ves, se le pasa el parámetro "Self", que será un TFrameCamAlt o un TFrameCliAlt, según quien lance el evento. De esta forma solo liberamos el Frame donde se pulse el boton salir.

No lo he dicho, pero en el OnClose del TForm2 también tendrías que mirar si hay algún frame creado para liberarlo.

El "Abstract error" viene a decir que estamos ejecutando un método que está marcado como abstracto (abstract es una palabra reservada de delphi) que precisamente se pone para eso, para evitar un problema mayor del que estas teniendo. Imagina que el programa se cierra sin indicar ningún mensaje de error... ¿por donde empiezas a buscar?.

Ahora te muestra el mensajito de error y ya sabes que el problema está en la creación y destrucción de objetos, y es más que probable que hayas creado un método así:
Código Delphi [-]
constructor Create;
procedure  Close;
cuando debería decir:
Código Delphi [-]
constructor Create;override; 
procedure  Close;override;
Para indicar que ese método que estas creando no es uno nuevo, sino que sustituye a uno existente en la clase de la que estas heredando (esa clase puede ser un Frame, un Form, etc).

Saludos y buena caza.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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
Frames Caro Varios 4 17-06-2005 17:55:01
Varios forms, frames y un Data Module gluglu Varios 1 07-04-2005 20:28:51
Uso de Frames jdangosto OOP 7 20-01-2005 01:15:03
Frames pepelu1975 OOP 2 21-05-2004 18:32:01
Frames pepelu1975 Varios 2 17-02-2004 19:00:30


La franja horaria es GMT +2. Ahora son las 14:21:48.


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