Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #6  
Antiguo 07-04-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
NO, NO Y NO.

El problema es grave, como indica un abstract error y un access violation, y el problema no es de código sino de concepto, para eso tendrás que estudiarlo.

Las clases bases de un form usan abstract; virtual etc en sus métodos, por tanto si te dan esos errores es que estas lanzando las ventanas mal. Normalmente es porque no identificas el Parent/Owner de una ventana o que le das información incongruente, mira este código:

Código Delphi [-]
Form1 := Tform1.Create(application);
....

Form1.Free;

El error está en decirle que el objeto Application es el encargado de destruir la ventana, pero despues te encargas tú por código de liberarla. Cuando termine tu programa el objeto Application intentará destruir el Form1, pero como ya está destruido.... Access violation.

De la misma forma al cerrar esa ventana una y otra vez te dará un error de Abstract Error, (es lo más probable).

Tienes que tener claro que el Parent de una ventana, por ejemplo, es solo para saber dentro de qué control se va a mostrar.

El Owner (dueño) de un control/ventana es el que se encarga de destruirlo, y puede ser distinto al Parent (Padre).

A ese código se suma otro error más. Cuando se hace el Form1.Free, la memoria se libera, pero la variable Form1 se queda apuntando a la zona de memoria donde estaba, por tanto, si vuelves a llamar a Form1.Free en compilación no da fallos, pero en Ejecución dará un Access Violation.

Formas correctas:
Código Delphi [-]
try
  Form1 := Tform1.Create(nil);
...
finally
  FreeandNil(Form1);
end;
Se crea, pero nadie lo destruirá.... porque lo destruyo por código yo.


Código Delphi [-]

  Form1 := Tform1.Create(Application);
...
El objeto se destruye cuando termina la aplicación, es decir, desde que se crea, hasta que finalice la applicación, el Form1 estará en Memoria.

Hay otras formas, por ejemplo con ventanas modales, pero todo se resume a lo mismo: Indicar bien los Owner y tener controlado (conceptualmente) cuando y donde se destruyen las ventanas.



Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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
Detener un error de access violation de la DbGrid - delphi..... uper Varios 1 21-09-2005 21:54:42
Error Access Violation en Paquetes (Packages) DarKraZY OOP 4 13-09-2005 14:35:31
Maldito ... Access violation Error (QuickReports) User_baja1 Impresión 1 20-04-2005 10:29:32
Error Access Violation samame Conexión con bases de datos 1 01-04-2004 10:48:10
Error Access Violation con Crystal 9 samame Impresión 0 30-03-2004 14:03:17


La franja horaria es GMT +2. Ahora son las 07:59:42.


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