Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con MDIChild (https://www.clubdelphi.com/foros/showthread.php?t=27196)

gilberto_1126 14-11-2005 23:19:12

Ayuda con MDIChild
 
Saludos a todos foristas

Tengo un problemilla con formas MDIChild

En mi programa la forma principal esta el Style en MDIForm. Mando llamar otras formas (Hijas) las cuales en la propiedad Style tienen MDIChild.
Entonces las mando llamar

FProximo.Show;
Las abre perfectamente, aqui no tengo ningun problema

y cuando la cierro, en el evento onclose coloco la sig sentencia: Action:=caFree;

y todo funciona muy bien

el problema esta en que cuando quiero volver abrir la misma ventana me aparece el siguiente error
'Project Manejo.Exe raised exception class EAcces Violation with Message "Acces violation in addres 00403c31 in module Manejo.exe ". Read of addres 00008080 '

alguien sabra por que????'

utilizo delphi 7

gracias por su atencion

ContraVeneno 14-11-2005 23:45:59

¿que pasa si no pones Action:=caFree en el evento OnClose ? :confused:

Neftali [Germán.Estévez] 15-11-2005 09:42:00

Cita:

Empezado por gilberto_1126
...Entonces las mando llamar: FProximo.Show;

..y cuando la cierro: Action:=caFree;

Alguien sabra por que????'

Bueno, tiene un poco de lógica; Piensa que con un un objeto de tipo Form que se usa varias veces en una aplicación hay dos formas de trabajar (la primera creando y destuyendo todas las veces y la otra creando y destruyendo una sóla vez y entre medio ocultando y visualizando):
MODO1:
(1) Crear
(2) Visualizar
(3) Destruir
...
(1) Crear
(2) Visualizar
(3) Destruir
...

o como alternativa

MODO2:
(1) Crear
(2) Visualizar
(3) Ocultar
...
(2) Visualizar
(3) Ocultar
...
(2) Visualizar
(3) Ocultar
...
(4) Destruir

Tu problema creo que viene porque estás haciendo ésto:

(1) Crear (aunque no lov creas tú lo debe hacer el proyecto en la sección de autocreate)
(2) Visualizar (con el Show)
(3) Destruir (con el caFree)
...
(2) Visualizar (PETA!!!!)

Es porque la segunda vez que visualizas el Form no estás creado.

SOLUCIÓN 1:
No utilizar caFree, sino caHide, para trabajar en el MODO2
SOLUCION 2:
Eliminar el form de la sección de Autocreate Form (en las opciones del proyecto) y cada vez que vayas a visualizarlo, crearlo primero, utilizando:

Código Delphi [-]
   Form1 := TForm1.Create(Application);
   Form1.Show;  (como haces ahora)

Espero haberme explicado decentemente bien.

Un saludo.

roman 15-11-2005 16:01:17

Yo usaría la segunda opción de Neftali ya que la primera no funciona para formularios MDIChild.

// Saludos

Lepe 15-11-2005 16:30:42

Cita:

Empezado por Neftali
Form1.Show; (como haces ahora)

En formas MDIChild, no es necesario el .Show, cuando se crean, se muestran automáticamente.

saludos.

Paoti 15-11-2005 16:37:09

La segunda opción es la "correcta"
 
la segunda opción es realmente como se debe implementar una aplicación MDI,

ya que con esata forma, puedes abrir tantas veces quieras los formularios hijos como una nueva instancia.

como analogia, cuando se abren varias ventanas de Word, todas son la misma.


La franja horaria es GMT +2. Ahora son las 21:57:11.

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