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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-04-2005
Avatar de jzk
jzk jzk is offline
Miembro
 
Registrado: may 2004
Posts: 100
Poder: 20
jzk Va por buen camino
Formulario Auxiliar

Hola a tod@s,

Veamos, tengo el siguiente problemilla.

Quiero crear un formulario auxiliar cuando pulso un determinado botón en mi aplicación. Lo hago de la siguiente manera:

Código:
		Try
			 Application.CreateForm(TForm3histor,Faux);
			 Faux.ShowModal;
		Finally
			 Faux.Free;
		End;
El funcionamiento es correcto hasta que ejecuto varias ocasiones este formulario, entonces me aparece un error de memoria tal que así:
Cita:
Violacion de acceso a la dirección 0000000666. Leer de dirección 0000000666
En otras ocasiones al primer intento obtengo este mismo error y tengo que cerrar la aplicación.

He seguido paso a paso el proceso y el error se produce cuando va a ejecutar la linea Faux.Showmodal, porque en el paso anterior que es donde crea el formulario con sus tablas y demás no existe/generá ningún error.

¿Se os ocurre algo?
Responder Con Cita
  #2  
Antiguo 25-04-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Tienes definido código en los eventos Create o Show del formulario auxiliar?
Si lo tienes ¿Qué codigo tienes colocado?

En principio el trozo de código que colocas es correcto, así sólo con eso no debería fallar.

¿Tienes algun componente no estandard en ese formulario? (que te pueda provocar ese error). Prueba a eliminar código y componentes a ver si te sigue dando.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 25-04-2005
Avatar de jzk
jzk jzk is offline
Miembro
 
Registrado: may 2004
Posts: 100
Poder: 20
jzk Va por buen camino
Voy a hacer las comprobaciones que me indicas y luego te cuento, porque tengo lineas de código en el Create del formulario lo que ocurre es que como realiza todos los pasos que hay en ese evento correctamente creía que el problemas derivaba del Showmodal que es donde me mete el petardazo.
Responder Con Cita
  #4  
Antiguo 25-04-2005
Avatar de jzk
jzk jzk is offline
Miembro
 
Registrado: may 2004
Posts: 100
Poder: 20
jzk Va por buen camino
He comentado todas las lineas de programación incluidas en los eventos;

OnCreate, OnClose y OnCloseQuery

Y sin embargo el problemas persiste y no utilizo ningún objeto que no sea standard.

¿se os ocurre algo?, gracias.
Responder Con Cita
  #5  
Antiguo 25-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Código:
		Try
			 Application.CreateForm(TForm3histor,Faux);
			 Faux.ShowModal;
		Finally
			 Faux.Free;
			 Faux := nil;
		End;
Yo intentaría esto.

Si te da error, entonces probaría esto otro:
Código:
         Faux := TForm3historic.Create(nil);
		Try
			 Faux.ShowModal;
		Finally
			 Faux.Free;
			 Faux := nil;
		End;
Si te furula bien alguna de las formas, ya explicaré la diferencia

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 25-04-2005
Avatar de jzk
jzk jzk is offline
Miembro
 
Registrado: may 2004
Posts: 100
Poder: 20
jzk Va por buen camino
No me ha funcionado pero te agradecería que me explicases el por qué, ah y darte las gracias.
Responder Con Cita
  #7  
Antiguo 25-04-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Quién es FAux? Es decir, ¿dónde está declarado?

No sé a qué diferencia se refiere Lepe ya que hay dos diferencias. La sustancial, desde mi punto de vista, es sacar la creación del formulario del bloque try-except. Si hubiera alguna excepción al momento de crear el formulario, se estaría intentando liberar un objeto que nunca terminó de construirse totalmente.

// Saludos
Responder Con Cita
  #8  
Antiguo 26-04-2005
Avatar de jzk
jzk jzk is offline
Miembro
 
Registrado: may 2004
Posts: 100
Poder: 20
jzk Va por buen camino
Faux, es una variable declarada de la siguiente manera:

Código:
 procedure Programa1.SpeedButton1Click(Sender: TObject);
var Faux: TForm3histor;
begin
   Try
      Application.CreateForm(TForm3histor,Faux);
      Faux.ShowModal;
   Finally
      Faux.Free;
   End;End
Responder Con Cita
  #9  
Antiguo 26-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
La explicación ya la dió roman, además como no sabía donde estaba declarada la variable Faux, lo que hago es asignarle nil despues de liberarla.

jzk
creo que hay "algo más" que no nos cuentas, quizás porque has creido que no tiene importancia. La verdad, todos los códigos propuestos funcionan a la perfección.

La ventana es de tipo mdiChild?

Hay más código en el SpeedButton ??

Dentro de la ventana Faux, llamas a algún evento, propiedad o método de la ventana Programa 1 ??

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 26-04-2005
Avatar de jzk
jzk jzk is offline
Miembro
 
Registrado: may 2004
Posts: 100
Poder: 20
jzk Va por buen camino
Pués en realidad estoy quedando como una competa ignorante en Delphi, porque es algo que no he tenido en cuenta por desconocimiento/ignorancia.

Los tenía ambos definidos como FsNormal.

Estoy mirando en los foros la manera de utilizar estos formularios y veo que tengo que definir el principal como FsMDIForm y los auxiliares como FsMDIChild.

Si estoy dando los pasos correctos, lo siguiente sería modificar la llamada del formulario y lo hago como hasta ahora con:

Código:
Faux.Showmodal
Pero de esta manera me dice:
Cita:
no se puede hacer visible una ventana modal.
Con lo cual, hago la llamada al formulario con el comando:

Código:
Faux.Show
Y de esta manera el programa no muestra ningún formulario.

Podéis indicarme si estoy dando los pasos correctos, gracias.....
__________________
Experiencia es el nombre que damos a nuestras equivocaciones
Responder Con Cita
  #11  
Antiguo 26-04-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No, no, no. No confundamos las cosas.

Esto no tiene que ver, al menos por lo que se ve a primera vista, con que los formularios sean o no MDI. No hay ninguna obligatoriedad en definir el formulario principal com MDIForm y los secundarios como MDIChild. De hecho, difícilmente un formulario MDIChild se usará para mostrarlo con ShowModal.

Vuelve tus pasos atrás y olvídate de MDI.

El punto es: nada en el código que nos pones parece estar mal y debe funcionar tal cual. Si aún así no funciona es un indicativo de que hay más código que, como dice Lepe, posiblemente pienses que no afecta pero que es el que causa el problema.

Un error de "Access Violation" muchas veces se refiere o bien a que intentas usar un objeto que aún no ha sido construido o que intentas acceder a un índice de un arreglo más allá de sus límites.

¿Has revisado el evento OnShow?

¿Qué más haces al momento de construir el formulario?

// Saludos

Última edición por roman fecha: 26-04-2005 a las 17:14:44.
Responder Con Cita
  #12  
Antiguo 26-04-2005
Avatar de jzk
jzk jzk is offline
Miembro
 
Registrado: may 2004
Posts: 100
Poder: 20
jzk Va por buen camino
Disculpen mi insistencia, pero es que me resulta necesario acabar con este problema.

Siguiendo con el hilo de Roman (donde me reconducía por el buen camino), he optado por hacer un nuevo formulario donde solamente he incluido un label que me de la bienvenida.

Pués después de hacer varias llamadas, me vuelve a generar el mismo error de memoria.

Cabe decir que he seguido las mismas instrucciones que abajo, a la hora de crear y eliminar el formulario.

Todo esto me lleva a pensar, ¿es posible que el error lo cometa en el formulario principal donde llamo al auxiliar o eso es poco probable?
__________________
Experiencia es el nombre que damos a nuestras equivocaciones
Responder Con Cita
  #13  
Antiguo 26-04-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Puse sí sería probable que estés arrastrando un error desde otra parte. Prueba desde lo básico, inicia un nuevo proyecto con un formulario principal y uno secundario. Pon un SpeedButton en el principal y coloca el código para abrir el nuevo tal como lo tienes en tu última prueba.

Si esto funciona tendrás que comenzar a aislar el problema viendo qué tipo de cosas haces antes de abrir el formulario.

// Saludos
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 11:06:53.


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