Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Acceder a los componentes de ventanas MDIChild (https://www.clubdelphi.com/foros/showthread.php?t=76956)

Diego827 08-12-2011 00:11:42

Acceder a los componentes de ventanas MDIChild
 
Hola amigos del Club, es un placer saludarles y hacerles una consulta.

Les comento: Soy novatisimo en esto de ventanas MDIChild y ahi creo que esta el problema jeje.

Como puedo acceder a un componente de la ventana hijo desde el padre? este codigo lo encontre en la web pero no me funciona:

Código Delphi [-]
void __fastcall TForm_padre::Button_archivoabrirClick(TObject *Sender)
{

TForm * formularioactivo= static_cast(ActiveMDIChild);
try {
  formularioactivo->ComboBox_hola->Text="HOLA";
} catch (...) {
ShowMessage("ERROR");
}
}

Disculpen si es tan obvia la pregunta pero la ignorancia no discrimina y me golpeó duro porque ya intente mil cosas y no me funciona.

Gracias amigos y un saludo.

Adicional: Lo estoy programando en C++ sin embargo, entiendo mas o menos el Delphi.

Caral 08-12-2011 02:22:04

Hola
En delphi (a lo novato) ya que yo ni C++ ni C-- con suerte un poquito de delphi::D
El boton que llama al form hijo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
   Form2:=TForm2.Create(Self);
   try
    Form2.FormStyle:= fsMDIChild;
    Form2.Edit1.Text:= 'Hola';
    Form2.Top:= 0;
    Form2.Left:= 426;
    form2.Height:= 426;
    Form2.Width:= 426;
    Form2.Show;
    finally
   //
    end;
end;
Lo crea, lo define como mdi, inserta el texto en el edit, define el tamaño y posicion, lo muestra.

En el form MDI en el boton de cerrar:
Código Delphi [-]
procedure TForm2.Button1Click(Sender: TObject);
begin
  Form2.FormStyle:= fsNormal;
  Close;
end;
Lo define como form normal, lo cierra.

Asi se puede volver a crear las veces que se quiera.
Saludos
Edito: Aquí hay buena información de esto.

ecfisa 08-12-2011 04:27:24

Hola Diego.
Cita:

Como puedo acceder a un componente de la ventana hijo desde el padre?
Respecto a esa pregunta puntualmente, una forma puede ser:
Código:

{
TComboBox *cb = static_cast<TComboBox*>(ActiveMDIChild->FindComponent("ComboBox_hola"));
  cb->Text = "HOLA";
...

Saludos.

Diego827 08-12-2011 14:51:52

Conocimiento puro :D
 
Gracias amigos por contestar a mi Batiseñal, excelente aporte a mis conocimientos son los dos comentarios hasta ahora; solamente que:

Imaginen: tengo tres MDIChild ya creadas, y deseo acceder a los componentes de la que este activa (ActiveMDIChild creo que se usa algo así); por lo tanto: muy agradecido estimado Caral ahora tengo algo màs en cuenta sin embargo el método que me enseñas no puedo utilizarlo porque es para ventanas que vas a crear en ese momento. En cuanto pueda pruebo las dos técnicas y posteo para retroalimentar.

Gracias amigos ecfisa y Caral es bueno contar con maestros que les guste enseñar.

PepeLolo 12-12-2011 02:09:24

Al formulario Hijo, solo tienes que indicarle quien es el padre por medio de la propiedad "Parent", después cuando quieras usarlo solo tienes que acceder a esta propiedad para obtener el formulario padre.

Diego827 12-12-2011 23:04:07

Cita:

Empezado por PepeLolo (Mensaje 420930)
Al formulario Hijo, solo tienes que indicarle quien es el padre por medio de la propiedad "Parent", después cuando quieras usarlo solo tienes que acceder a esta propiedad para obtener el formulario padre.

Hola, gracias por responder. No encuentro la propiedad Parent en el Object Inspector; me podrias decir donde localizarla? Gracias por tu ayuda!

ecfisa 13-12-2011 03:30:48

Hola Diego.

La propiedad Parent del form especifica que control contiene al form. No figura en el Object Inspector, pero podés acceder a ella por código.

A modo de ejemplo MDI crea dos forms (frMDIForm y frMDIChild), quitá el segundo de Project->Options->Forms->Auto-create forms. En la propiedad FormStyle del primero pone fsMDIForm y en la del segundo fsMDIChild y en ambos un TButton.

frMDIForm:
Código:

void __fastcall TfrMDIForm::btnCallChildClick(TObject *Sender)
{
  TfrMDIChild *F = new TfrMDIChild(this);
  F->Parent = this;
}

frMDIChild:
Código:

void __fastcall TfrMDIChild::btnChangeCaptionClick(TObject *Sender)
{
  TForm *F = static_cast<TForm*>(Parent);
  F->Caption = "NUEVO CAPTION EN frMDIForm";
}

Saludos.

Caral 13-12-2011 03:42:55

Hola
De una cosa si estoy seguro:
No me gusta C ++ para nada
No lo _
Código:

Void
{ a usar "Nunca"  }

:D:p
Saludos

Diego827 16-12-2011 17:05:33

Un saludo
 
Cita:

Empezado por Caral (Mensaje 420997)
Hola
De una cosa si estoy seguro:
No me gusta C ++ para nada
No lo _
Código:

Void
{ a usar "Nunca"  }

:D:p
Saludos

Jaja no es cosa de gustos, ojalá fuera así ;)


La franja horaria es GMT +2. Ahora son las 11:13:30.

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