Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Formulario MDI e Hijos (https://www.clubdelphi.com/foros/showthread.php?t=28064)

chux 07-12-2005 19:59:08

Formulario MDI e Hijos
 
Bueno, estoy desarrollando una aplicacion con delphi 2005 compilandola para win 32.
Tengo un formulario (el padre) con la propiedad frmstyle a mdiparent, y un par mas con mdichild. En proyect, options pongo en autocreate el form que hace de mdi, y los demas los dejo en avaliable. En el codigo de el mdi importo las unidades donde estan los hijos.
Cuando los quiero mostrar pongo
if trabajadores.frm_trabajadores = nil then
trabajadores.frm_trabajadores := trabajadores.frm_trabajadores.Create(application);

Y me da el siguiente error:
Project project1.exe raised exception class EAccessViolation with message 'Access violation at address 004501e1 in module project1.exe Read os address 00000000

Si el formulario le digo que se cree desde el principio (project,options) no me da ese error, pero me sale desde el principio y no lo puedo cerrar, con lo que no me vale... Sugerencias?
Venga mil gracias

maeyanes 07-12-2005 20:06:29

La llamada al constructor de una clase se hace así:

Código Delphi [-]
  trabajadores.frm_trabajadores := Tfrm_trabajadores.Create(Application);

El error te lo da por que estás usando un objeto que todavía no se ha creado.


Saludos...

chux 07-12-2005 20:10:08

Lo siento pero no te entiendo... :(

Paoti 07-12-2005 20:43:10

Una forma implementar MDI
 
Hola Chux!


Me podrias decir que es es trabajadores en:

trabajadores.frm_trabajadores


Es tu unidad.



Ejemplo de como implementar MDI:

qiutas tu form hijo del Autocreate forms.


y cuando quieras lanzar tu form hijo haces esto:



Código Delphi [-]
With TFRMHijo.create(Application) do
     Show;

No olvides poner en el evento OnClose de tu Formulario MDIChild

Código PHP:

action := cafree 


con esta forma se crean tantos mdi chils como quieras de tu formulario hijo


Saludos.

chux 07-12-2005 20:56:30

El fallo era tontisimo, pa variar, os pongo lo que pasaba para que el proximo que tenga mi mismo problema no se tire el mismo tiempo que me he tirado yo

if trabajadores.frm_trabajadores = nil then
trabajadores.frm_trabajadores := trabajadores.frm_trabajadores.Create(application);

ese codigo era el que tenia, tiene que ser

if trabajadores.frm_trabajadores = nil then
trabajadores.frm_trabajadores := Tfrm_trabajadores.Create(application);

Trabajadores es el nombre de la unidad (la que contiene un form hijo) Tfrm_trabajadores es la clase de los trabajadores, mientras que frm_trabajadores es una instancia a la clase tfrm_trabajadores dentro de la unidad trabajadores, me habia colado en la creacion... en fin, eso pasa cuando se duerme poco jeje
Venga saludos, y como siempre mil gracias gente

maeyanes 07-12-2005 21:08:00

Pues eso que hiciste es precisamente lo que te comenté en mi mensaje... ;)



Saludos...

chux 07-12-2005 21:11:31

Haberme puesto la linea bien escrita ombre jjeje

maeyanes 07-12-2005 21:19:14

Bueno si, tal vez te lo expliqué muy a la ligera... jejeje :p


La franja horaria es GMT +2. Ahora son las 16:41:36.

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