Foros Club Delphi

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

thecarlos 06-01-2004 22:23:57

Problema con MDIChild
 
Hola amigos, tengo un pequeño problema y es que quiero trabajarn con MDIChild con su respectivo MDIForm, pero al momento de correr el programa, todos los MDIChild aparecen VISIBLES (y no quisiera que sea asi), y cuando hago click en CERRAR en la esquina de la ventanana, tampoco se puede cerrar, sólo se minimiza.
Cómo hacer que los MDIChild no aparescan al correr el programa?
GRACIASS

NOTA:
Para poder Cerrar la ventana haciendo click en Cerrar en la esquina de la ventrana puse ene l evento onClose lo siguiente
action := cafree;
Y si lo cierra, pero sale error cuando intento abrir la misma ventana despues de haberlo cerrado.

__cadetill 06-01-2004 22:53:32

Las ventanas MDIChild han de estar en available forms y crearlas con algo como....

Código:

    if not VentanaCreada(fmMenu, 'CMonedes') then
        CMonedes := TCMonedes.Create(Application);
    try
        CMonedes.Show;
    except
          on E : Exception do
            begin
              FreeAndNil(CMonedes);
            end;
    end;

donde VentanaCreada es una función que me dice si la ventana esta creada o no (true/false) porque no quiero más de 1 instancia de la misma (si ya está creada la muestro con el Show)

Para cerrarla, sólo has de hacer lo que mencionas, en el OnClose poner el Action := caFree

thecarlos 08-01-2004 22:25:46

hola amigo, gracias por responder, pero no entiendo cuando me dices que las ventanas MDIChild estan en available forms, como ver si está o no estan???, en donde lo veo???...
y cuando me sugieres crearlas con el codigo que me sugieres, donde se supone que debo poner el codigo, es por mdichild, en que parte??.... y la funcion VENTANACREADA como podria hacerlo...
plase, ayudame en esto, de verdad que soy nuevo en esto y me gustaria hacer que las ventanas no salgan asi.
y bueno lo del onClose, sí sé como hacerlo...
GRACIAS

__cadetill 09-01-2004 10:01:14

VAmos por partes
Cita:

thecarlos comentó:
no entiendo cuando me dices que las ventanas MDIChild estan en available forms, como ver si está o no estan???, en donde lo veo???...
Lo ves en Project-Options-Forms-AutoCreate Forms o Abailable Forms

Cita:

thecarlos comentó:
y cuando me sugieres crearlas con el codigo que me sugieres, donde se supone que debo poner el codigo, es por mdichild, en que parte??
Bueno, en la opción de menú desde la que lances una pantalla MDIChild (por ejemplo "Gestión de Clientes" :D)

Cita:

thecarlos comentó:
.... y la funcion VENTANACREADA como podria hacerlo...
Pues mi función sería algo así
Código:

function VentanaCreada(FormMDI : TForm; NomFinestra : string) : boolean;
var
  i : integer;
begin
  Result := false;
  i := 0;
  while (i <= FormMDI.MDIChildCount - 1) and
        (NomFinestra <> FormMDI.MDIChildren[i].Name) do
    inc(i);
  if i <= FormMDI.MDIChildCount - 1 then
    Result := true;
end;

Se que no es la mejor manera, pero es una manera ;)

Espero te sirva

Nuria 09-01-2004 10:04:31

Hola!

Creo que a lo que se refiere Cadetill, con que las ventanas MDIChild esten en Available Forms, es lo siguiente, entra en el menu Project----> Options... En la pestaña de Forms. Y mira si las ventanas MDIChild están en Available. De esa manera los formularios no estarán visibles hasta que no los crees y hagas el Show.

Saludos. ;)

Nuria 09-01-2004 10:06:18

Se me adelantó Cadetill :p , te lo explica perfectamente.

thecarlos 10-01-2004 04:34:46

HOOLA gracias por la aclaración amigo CADETIL, pero intenete hacer lo que me sugieres en el codigo primero:

code:--------------------------------------------------------------------------------
if not VentanaCreada(fmMenu, 'CMonedes') then
CMonedes := TCMonedes.Create(Application);
try
CMonedes.Show;
except
on E : Exception do
begin
FreeAndNil(CMonedes);
end;
end;
--------------------------------------------------------------------------------

Podrias, por favor decirme lo que significa el CMonedes, el FmMenu, el FeeAndNil, que deverdad no lo entiendo muy bien y sólo puedo suponer

Y no se el por qué, pero cuando quiero declarar esto:

CMonedes := TCMonedes.Create(Application);

no puedo, sale como error y lo que hago es declarar una variable CMonedes como TForm, y luego pongo CMonedes.Create(Application);

Y con esta instruccion tambien tengo problemas:
FreeAndNil(CMonedes);
....

Aun no encuentro la solucion de los MDIChild, si esta es la solucion les agradeceria que me ayuden. Y sobre lo de Available Form, ya lo puse, pero como no pude poner la programnacion anterior, cuando pulso en el menu y llamo al formulario, sale error. Quizas el codigo que me sugiere CADETIL, sí sea la solucion, pero no puedo ponerlo
GRACIAS

__cadetill 10-01-2004 10:56:24

Bueno, bueno, calma, que es sencillo de entender ;)

Veamos, si te fijas, en la función que te puse de VentanaCreada, ésta recibe 2 parámetros. Si revisamos los parámetros y lo que se hace con ellos dentro de la función vemos que :

* primer parámetro: FormMDI : TForm
este primer parámetro es la ventana MDI padre que la necesito para ir buscando todos sus hijos mediante MDIChildCount

* segundo parámetro: NomFinestra : string
es el nombre de la ventana MDIChild que queremos crear. Esto quizás ha sido fallo mio porqué está en catalán (soy de Andorra y mi lengua principal y en la que programo es ésta, sorry :o ) y sólo hice un copy-paste de lo que tenía sin traducirlo. Cuando digo "nombre" me refiero al valor que le das en la propiedad Name del form MDIChild.

Lo de...

Código:

CMonedes := TCMonedes.Create(Application);
es la forma de crear las ventanas en tiempo de ejecución (cuando las tienes en Available Forms). No es la única forma, pero es la que más me gusta.

CMonedes es el nombre de la ventana y TCMonedes la clase del objeto que estamos creando. Application es el owner que le doy al objeto creado

Bueno, espero que ahora quede algo más claro :)

PD: mi compromiso para este 2004 es intentar traducir mi código al castellano para evitar más malas interpretaciones :D :D

thecarlos 15-01-2004 23:49:15

HOLA AMIGO...
BUENO GRACIAS POR TODO EN SERIO, BUENO TE CUENTO QUE NO LEI ESTE MENSAJE ULTIMO QUE RECIBI DE TI, Y YA HE PRESENTADO MI SISTEMA Y ME FUE BIEEN... PERO SABES... LA SOLUCION QUE HIZE ES SACAR LAS VENTANAS DEL AVAILABLE, Y LOS PUSE EN NORMAL... Y ASI PUDE CORRER TODO... MI PROBLEMA ERA QUE NO PODIA HACER TENER UNA PORTADA.. Y LUEGO UNA VENTANA DE LOGEO QUE HIZE, LUEGO UNA DE CARGADO, Y RECIEN ENTRO A MI MDIFORM... ESA ERA MI IDEA PERO NO PODIA TENIEDO AL MDI PADRE COMO main form... ENTONCES ESA FUE MI SLUCION...
MI PREGUNTA ES COMO PODRIA HACER PARA DARLE A UNA VENTANA POR CODIGO QUE SEA EL main form, EN ESTE CASO MI MAIN FORM INCIAL ES LA PORTADA... LUEGO QUISIERA QUITARLE Y LUEGO DARSELO AL MDI padre...
gracias...
Y POR CIERTO... LO QUE ME DISTE ENCODIGO DE COMO ABRIR UN MDI CHICLD DESDE EL PADRE, Y LUEGO PODER CERRARLO... LO TUVE QUE ANALIZAR Y ME SALIO... PERO GGRACIAS DE TODOS MODOS...

__cadetill 16-01-2004 00:08:43

Bueno, para esto te sugiero que sigas este hilo http://www.clubdelphi.com/foros/showthread.php?t=6405 ;)


La franja horaria es GMT +2. Ahora son las 05:03:19.

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