Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #7  
Antiguo 27-07-2022
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Poco te pueden ayudar si no pones el código que usas.
Y aparte de eso ya han comentado antes que liberes el formulario, pues en el código lo creas:
FVerificacion := TFVerificacion.Create(Self);
¿Pero dónde lo destruyes?
Referente al codigo explique como llamo al formulario y para cerrarlo habia dicho que uso un close.
Cuando libero el formulario mediante un Free por ejemplo se produce un access_violation c0000005.
El mismo error cuando utilizo esta forma como sugirió duilioisola.

Código Delphi [-]
with TFVerificacion.Create(Self) do
begin
   Parent := PNCentral;
   Align := alClient;
   Show;
end;
Ambas formas dan el Access Violation.


Cita:
Empezado por duilioisola Ver Mensaje
Además del Action := caFree en el OnClose, quizás deberías limpiar la variable que apunta al formulario.

Código Delphi [-]
FVerificacion := TFVerificacion.Create(Self);
FVerificacion.Parent := PNCentral;
FVerificacion.Align := alClient;
FVerificacion.Show;
FVerificacion := nil; // Esta variable podría estar apuntando a un formulario ya liberado.

Yo lo que haría es:
Código Delphi [-]
with TFVerificacion.Create(Self) do
begin
   Parent := PNCentral;
   Align := alClient;
   Show;
end;
Esto evita tener que definir una variable y luego tener que acordarte de liberarla.
Colocando solo el Action := caFree en el close, hace el mismo efecto. No cambia el comportamiento.
y liberandolo causa el access violation.


Explicare nuevamente como se relacionan los formularios y como se llaman y utilizan.

- El formulario principal tiene un panel donde se muestran los demas formularios, algunos formularios simplemente se muestran fuera del panel con un tipo de borde simple.
Caracteristicas del formulario principal:
BorderStyle BsSizeable.
Con sus 3 border icons.

- El Formulario de Verificacion se muestra dentro del panel del formulario principal esto sucede desde que el programa inicia se muestra el principal ya con el de verificacion dentro, es solo para colocar usuario y contraseña y se muestra con el siguiente codigo:
Código Delphi [-]
Verificacion := TVerificacion.Create(Self);
Verificacion.Parent := PNCentral;
Verificacion.Align := alClient;
Verificacion.Show;

Cuando se colocan los datos, para cerrarlo solo se utiliza un Close. Si utilizo un free me produce un access violation.
Caracteristicas de este formulario:
Sin iconos en los bordes y el borderstyle es None.

- El formulario de configuracion al igual que el de verificacion no tiene bordes ni los iconos, y se muestra dentro del panel del formulario principal.
Es un formulario solo con botones de opciones. Por el cual se llama al formulario de Comprobantes donde esta el boton con el SaveDialog.
Para abrirlo se hace de la siguiente forma.

Código Delphi [-]
FConfiguracion := TFConfiguracion.Create(Self);
FConfiguracion.Parent := PNCentral;
FConfiguracion.Align := alClient;
FConfiguracion.Show;

(Lo cambie por el que me recomendaron pero no es la razon del problema).
Código Delphi [-]
 
with TFConfiguracion.Create(Self) do
   begin
   Parent := PNCentral;
   Align := alClient;
   Show;
   end;

y Para liberarlo se hace con un Close.

- El formulario de comprobantes se abre desde el formulario de Configuracion. Es una ventana que no se muestra dentro del panel, la llamo de la siguiente forma:
Código Delphi [-]
FComprobantes := TFComprobantes.Create(self);
 try
 FComprobantes.ShowModal;
 Finally
 FComprobantes.Free;
 end;

En este formulario es que esta el Dialog, que cuando se ejecuta y se cierra causa que el formulario de verificacion se vuelva a mostrar en el panel principal.
para abrir el dialg simplemente es un
Código Delphi [-]
if dlgguardar.Execute then
nada fuera de lo normal ni antes ni despues de este codigo.

Espero haber aclarado mas el asunto.
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
Un comportamiento extraño. TiammatMX Varios 5 03-09-2013 22:54:07
Comportamiento extraño de current_timestamp erickperez6 Firebird e Interbase 4 07-12-2011 07:42:24
Extraño comportamiento de ADO r1d2m3 Conexión con bases de datos 3 12-12-2009 19:08:32
Comportamiento extraño del TPageControl Chris OOP 4 02-04-2009 21:16:09
Comportamiento extraño de DisplayFormat Thales Conexión con bases de datos 0 02-12-2005 21:56:32


La franja horaria es GMT +2. Ahora son las 11:25:41.


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