FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
||||
|
||||
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; Cita:
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? |
#2
|
||||
|
||||
¿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. |
#3
|
||||
|
||||
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.
|
#4
|
||||
|
||||
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. |
#5
|
||||
|
||||
Código:
Try Application.CreateForm(TForm3histor,Faux); Faux.ShowModal; Finally Faux.Free; Faux := nil; End; Si te da error, entonces probaría esto otro: Código:
Faux := TForm3historic.Create(nil); Try Faux.ShowModal; Finally Faux.Free; Faux := nil; End; Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#6
|
||||
|
||||
No me ha funcionado pero te agradecería que me explicases el por qué, ah y darte las gracias.
|
#7
|
||||
|
||||
¿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 |
#8
|
||||
|
||||
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 |
#9
|
||||
|
||||
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. |
#10
|
||||
|
||||
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 Cita:
Código:
Faux.Show Podéis indicarme si estoy dando los pasos correctos, gracias.....
__________________
Experiencia es el nombre que damos a nuestras equivocaciones |
#11
|
||||
|
||||
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. |
#12
|
||||
|
||||
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 |
#13
|
||||
|
||||
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 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|