Ver Mensaje Individual
  #1  
Antiguo 21-06-2007
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Reputación: 21
jzginez Va por buen camino
Talking Cambiar propiedad de componente del formulario padre al cerrar el formulario hijo

Hola amigos tengo una duda tengo un formulario principal en el cual solo tengo un menu, dependiendo de la opcion seleccionada del menu se muestra un segundo formulario con varios speedbutton, al hacer click en alguno de estos botonos este se queda sumido (para resaltar que opcion escogio el usuario) y se abre un tercer formulario.
Lo que quiero es que al cerrar el tercer formulario el speedButton el 2º formulario regrese a su estado normal (la propiedad down = false) ya se que lo mas facil seria en el evento onclose de la forma poner
Código Delphi [-]
formaMenu.SpeedButton1.down:= False;

Pero el chiste es que son varios botones y varias forma, lo que quiero por decirlo así es tener que estar poniendo esta linea en todas las formas ( es una sola linea pero no importa) para darme a entender les escribo fracmento de todo mi código

Forma Principal
Código Delphi [-]
......
//declaracion de la clase form
  public
    { Public declarations }
    FormaMDI: boolean;
    FormaMenu: TFrmFB;
  end;
//otros procedimientos y variables de la forma
......
.......
//Este procedimiento lo asigno a todos los item del menu y segun la opción
//Seleccionada creo y muestro la forma corespondiente
procedure TFrmPrincipal.ActAbreModulos(Sender: TObject);
Var
  Numero: Integer;
  estado: Boolean;
Begin
  if Sender.ClassName = 'TMenuItem'
    Then Begin
      Numero:= TMenuItem(Sender).Tag;
      Estado:= TMenuItem(Sender).Checked;
    End
    Else Begin
      Numero:= TSpeedButton(Sender).Tag;
      Estado:= TSpeedbutton(Sender).Down;
    End;
  If Sender.ClassName = 'TMenuItem'
    Then TSpeedButton(FindComponent('SpeedButton'+IntToStr(Numero+1))).Down:= Estado
    Else TMenuItem(FindComponent('Submodulo'+IntToStr(Numero+1))).Checked:= Estado;
  If Not Estado
    Then Begin
      If Assigned(FormaMenu)
        Then Begin
          FormaMenu.Close;
          If FormaMenu.Visible
            Then FormaMenu.Visible:= False;
          FormaMenu:= Nil;
          FormaMenu.Free;
        End;
    End
    Else Begin
      If Assigned(FormaMenu)
        Then Begin
          if FormaMenu.Visible
            Then FormaMenu.Visible:= False;
          FormaMenu:= Nil;
          FormaMenu.Free;
        End;
      Case Numero of
        0: Begin
          If Not FormaMDI
            Then FormaMenu:= TFrmFBMenuClientes.Create(Application,ScrollBox1)
            Else FormaMenu:= TFrmFBMenuClientes.Create(Application);
          FormaMenu.Position:= poDesigned;
          FormaMenu.Visible:= True;
          End;
        1: Begin
          If Not FormaMDI
            Then FormaMenu:= TFrmFBMenuProveedores.Create(Application,ScrollBox1)
            Else FormaMenu:= TFrmFBMenuProveedores.Create(Application);
          FormaMenu.Position:= poDesigned;
          FormaMenu.Visible:= True;
          End;
        2: Begin
          If not FormaMDI
            Then FormaMenu:= TFrmFBMenuProductos.Create(Application,ScrollBox1)
            Else FormaMenu:= TFrmFBMenuProductos.Create(Application);
          FormaMenu.Position:= poDesigned;
          FormaMenu.Visible:= True;
          End;
        3: Begin
          If Not FormaMDI
            Then FormaMenu:= TFrmFBMenuProductos.Create(Application,ScrollBox1)
            Else FormaMenu:= TFrmFBMenuProductos.Create(Application);
          FormaMenu.Position:= poDesigned;
          FormaMenu.Visible:= True;
          End;
        4: Begin
          If Not FormaMDI
            Then FormaMenu:= TFrmFBMenuCatalogos.Create(Application,ScrollBox1)
            Else FormaMenu:= TFrmFBMenuCatalogos.Create(Application);
          FormaMenu.Position:= poDesigned;
          FormaMenu.Visible:= True;
          End;
    End;
  End;
End;

Con el código anterio abro la segunda forma que es la de los speedButton
Código Delphi [-]
//declaracion de la clase form
...................
  public
    { Public declarations }
    FormaHija: TFrmGB;
  end;
............
//otros procedimientos y variables de la forma
procedure TFrmFBMenuCatalogos.AbrirGridBase(Sender: tObject);
Begin
  CierraFormaHija;
  If TSpeedButton(Sender).Down
    Then Begin
      Case TSpeedButton(Sender).Tag of
        0: if FAsChild
            Then FormaHija:= TFrmGBClasificaciones.Create(Application,frmPrincipal.ScrollBox2)
            Else FormaHija:= TFrmGBClasificaciones.Create(Application);
        1: if FAsChild
            Then FormaHija:= TFrmGBDescuentos.Create(Application,frmPrincipal.ScrollBox2)
            Else FormaHija:= TFrmGBDescuentos.Create(Application);
        2: if FAsChild
            Then FormaHija:= TFrmGBImpuestos.Create(Application,frmPrincipal.ScrollBox2)
            Else FormaHija:= TFrmGBImpuestos.Create(Application);
        3: if FAsChild
            Then FormaHija:= TFrmGBTipoAlmacen.Create(Application,frmPrincipal.ScrollBox2)
            Else FormaHija:= TFrmGBTipoAlmacen.Create(Application);
        4: if FAsChild
            Then FormaHija:= TFrmGBFamilias.Create(Application,frmPrincipal.ScrollBox2)
            Else FormaHija:= TFrmGBFamilias.Create(Application);
        5: if FAsChild
            Then FormaHija:= TFrmGBCategorias.Create(Application,frmPrincipal.ScrollBox2)
            Else FormaHija:= TFrmGBCategorias.Create(Application);
      End;
      if FAsChild
        Then Begin
          if FrmPrincipal.CoolBar1.Bands.Count = 1
            Then FrmPrincipal.CoolBar1.Bands.Add;
          FrmPrincipal.CoolBar1.Bands.Items[1].Break:= True;
          FrmPrincipal.CoolBar1.Bands.Items[1].Control:= FormaHija.ToolBar2;
          FrmPrincipal.ScrollBox2.SetFocus;
        End
        Else Begin
          FormaHija.Position:= poDesigned;
          FormaHija.Left:= FrmPrincipal.FormaMenu.Left+ FrmPrincipal.FormaMenu.Width + 10;
          FormaHija.Top:= FrmPrincipal.FormaMenu.Top;
        End;
      FormaHija.Visible:= True;
    End;
End;
Ok este código es el que abre la tercera forma, lo que quisiera es poder poner algo como: formahija.buscaformapadre.buscaboton.Down:= False o en otras palabras desde la forma principal yo puedo escribir esto
Código Delphi [-]
FormaMenu.FormaHija.Label1.Caption:= 'forma normal';
lo que quisiera es viajar al reves:
Código Delphi [-]
formahija.formamenu.label1.caption:= 'al reves';

¿es posible esto?
Gracias
disculpen tanto rollo y código pero no se si me he logrado dar a entender
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita