FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Es difícil saber qué pasa si no indicas cuáles son los errores que aparecen.
Lo que puedo aventurar es que cuando usas por ejemplo Ventana_Hija.Componente.Caption := 'Hola'; el formulario Ventana_Hija no existe. ¿Cómo creas la ventana hija? Si lo haces por código con algo como: with TVentana_Hija.Create(...) do entonces Ventana_Hija, que es la variable que por default crea Delphi, no está creada. Detalla más acerca del error y de cómo creas la ventana hija para que podamos ayudarte más. // Saludos |
#2
|
||||
|
||||
Y viendo el mensaje de eduarcol me doy cuenta de que ni siquiera indicas si el error aparece al compilar o durante la ejecución.
// Saludos |
#3
|
|||
|
|||
Hola.
He elaborado un documento con impresiones de pantalla para explicaros mejor todo lo que me pasa. Cuando he ido a subirlo he visto que no podia porque es más grande de lo permitido. ¿Hay alguna forma de hacéroslo mandar? Salu2 |
#4
|
||||
|
||||
probastes colocandolo en un ZIP... me imagino que las pantallas las capturastes en gif o jpg
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#5
|
|||
|
|||
Hola.
Es un documento de Word con texto y imagenes en jpg. Su tamaño es de 365 Kb (comprimido) y cuando intento subirlo me pone este mensaje: MDI.zip: File Too Large. Limit for this filetype is 1,0 KB. Your file is 364,4 KB. Tambien he intentado subirlo sin comprimir y por su puesto su respuesta fue la misma. |
#6
|
||||
|
||||
la verdad es qie me dejas dsconcertado, necesitariamos ayuda de uno de los moderadores o alguien que sepa por que si el limite es 1kb es algo pequeño
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#7
|
||||
|
||||
Hola.
Estás utilizando las variables globales que se crean por defecto con los formularios. Pero por la forma en que creas dinamicamente los formularios MDI hijos, no debes inicializar esas variables. Cuando creas un formulario : TVentana_Hija.Create(Application); // Supongo que harás esto o algo parecido Cámbialo para asignar también la variable global : Ventana_Hija := TVentana_Hija.Create(Application); Aunque te puedes encontrar con varios problemas.
Solución : Antes de usar la variable Ventana_Hija, comprueba que tiene algún valor.
Solución : No utilizes esas variables globales (yo es lo primero que borro al crear un formulario). En lugar de ello, intenta utilizar variables locales que apunten siempre al formulario que quieres modificar :Por cierto, no te recomiendo acceder directamente a los componentes de un formulario, desde otro. Soy de la opinión que los componentes del formulario deberían ser protected es decir, no verse desde otros formularios. De esta forma ganas modularidad. Seria mejor declarar un método public en el formulario, que sea el que accede al componente, y desde los otros formularios unicamente llamamos al método. O sea, en la sección public del formulario declaras : procedure CambiarTitulo(Mensaje: String); y en la sección implementation, lo defines como : Código:
procedure TVentana_Hija.CambiarTitulo(Mensaje: String); begin Componente.Caption := Mensaje; end; Ventana_Hija.CambiarTitulo('Hola'); Espero que te sea de utilidad. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#8
|
|||
|
|||
Hola.
A ver si puedo explicarlo un poco mejor. Para empezar quiero decir que las unidades están colocadas bien y en ambos códigos: Estos son los procedimientos para crear las ventanas hijas (por cierto se trata de un editor), en concreto los procedimientos Nuevo, Abrir y uno privado. procedure TPrincipal.Crear_Ventana(Nombre: String; Modificado: Boolean); var ventana: TVentana_Hija; begin ventana := TVentana_Hija.Create(Self); ventana.Caption := Nombre ; SB_Barra.Panels[1].Text := ventana.Caption; ventana.Show; end; procedure TPrincipal.Nueva_VentanaExecute(Sender: TObject); begin Crear_Ventana('Sin título '+ inttostr(MDIChildCount+1), False); TB_Alin_IzquClick(nil);//Para comenzar con la alineacion a la izquierda // en cada ventana. end; procedure TPrincipal.Abrir_FicheroExecute(Sender: TObject); begin if (OD_Abrir_Fichero.Execute) then if (FileExists(OD_Abrir_Fichero.FileName)) then begin Crear_Ventana(OD_Abrir_Fichero.FileName, False); With ActiveMDIChild as TVentana_Hija do begin RE_Editor.Lines.LoadFromFile(OD_Abrir_Fichero.FileName); RE_Editor.Modified := False; end; end; end; Resumiendo un poco. Hay dos cosa que no me salen bien: 1.- No se o no puedo llamar a un objeto ubicado en la ventana hija desde el código de la ventana principal (codigo_Principal) , sin utilizar la sentencia with (ActiveMDIChild as Tventana_Hija) do Por ejemplo. En el procedimiento abrir, que he puesto antes, si yo quito la sentencia With ActiveMDIChild as TVentana_Hija do y coloco: ............... begin Ventana_Hija.RE_Editor.Lines.LoadFromFile(OD_Abrir_Fichero.FileName); Ventana_Hija.RE_Editor.Modified := False; end; Esto me compila bien pero da un error en ejecución ¿Por que al anular la sentencia with (ActiveMDIChild as Tventana_Hija) do e incluir el nombre de la ventana hija (que se llama también Ventana_Hija) delante del componente RE_Editor, no me funciona y me da el error en tiempo de ejecución que veis en la imagen? Este mismo sistema aplicado al reves si que funciona. Es decir desde el codigo de la ventana hija llamar o utilizar a un componente de la ventana padre. Simplemente hago lo mismo coloco Ventana_Principal.Componente.... 2.-Segundo problema. No se como llamar a los procedimientos que incluyen parámetros por referencia, desde ambos códigos. Por ejemplo: Yo quiero llamar desde el código de la ventana padre (que lo he llamado codigo_Principal) a un procedimiento ubicado en el código de la ventana hija (Codigo_Hija), por ejemplo el de cerrar las ventanas. Este sería el código de cerrar ventanas que estaría ubicado en el código de la ventana hija: procedure TVentana_Hija.FormCloseQuery(Sender: TObject;var CanClose: Boolean); begin ...... end; Y yo lo que quiero es llamarlo desde el código de la ventana padre.Yo he intentado llamarlo de esta forma, que me imagino que sea incorrecto: Ventana_Hija.FormCloseQuery(nil; var CanClose); Y estos son los errores en la compilación: “ Not enough actual parameters” Es decir, que no lo he puesto bien.... Estos son las dos cosas que no se hacer. Perdonar todo este rollo que os he metido, creo que no me olvido de nada. Muchas gracias por vuestra ayuda. Salu2 |
|
|
|