Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-01-2004
thecarlos thecarlos is offline
Miembro
 
Registrado: dic 2003
Ubicación: Trujillo - Perú
Posts: 32
Poder: 0
thecarlos Va por buen camino
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.
__________________
Dios te bendiga
Responder Con Cita
  #2  
Antiguo 06-01-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 08-01-2004
thecarlos thecarlos is offline
Miembro
 
Registrado: dic 2003
Ubicación: Trujillo - Perú
Posts: 32
Poder: 0
thecarlos Va por buen camino
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
__________________
Dios te bendiga
Responder Con Cita
  #4  
Antiguo 09-01-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
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" )

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
Responder Con Cita
  #5  
Antiguo 09-01-2004
Avatar de Nuria
Nuria Nuria is offline
Miembro
 
Registrado: may 2003
Posts: 531
Poder: 21
Nuria Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 09-01-2004
Avatar de Nuria
Nuria Nuria is offline
Miembro
 
Registrado: may 2003
Posts: 531
Poder: 21
Nuria Va por buen camino
Se me adelantó Cadetill , te lo explica perfectamente.
Responder Con Cita
  #7  
Antiguo 10-01-2004
thecarlos thecarlos is offline
Miembro
 
Registrado: dic 2003
Ubicación: Trujillo - Perú
Posts: 32
Poder: 0
thecarlos Va por buen camino
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
__________________
Dios te bendiga
Responder Con Cita
  #8  
Antiguo 10-01-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
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 ) 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
Responder Con Cita
  #9  
Antiguo 15-01-2004
thecarlos thecarlos is offline
Miembro
 
Registrado: dic 2003
Ubicación: Trujillo - Perú
Posts: 32
Poder: 0
thecarlos Va por buen camino
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...
__________________
Dios te bendiga
Responder Con Cita
  #10  
Antiguo 16-01-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Bueno, para esto te sugiero que sigas este hilo http://www.clubdelphi.com/foros/showthread.php?t=6405
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 00:13:56.


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