Ver Mensaje Individual
  #10  
Antiguo 16-01-2004
wallesis wallesis is offline
Miembro
 
Registrado: dic 2004
Posts: 25
Reputación: 0
wallesis Va por buen camino
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
Responder Con Cita