Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-04-2015
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 20
juniorSoft Va por buen camino
Como hacer que las ventanas hijas MDI al abrirlas creen Boton en Toolbar

Hola Amigos,

Estoy tratando de hacer lo Siguiente:

Creado una aplicacion MDI deseo que al abrir el formulario hijo se cree un boton en una toolbar que muestra las ventanas abiertas en vez de usar el tradicional Menú Windows donde se van colocando las ventanas que se van abriendo.

La idea es que si existe la posibilidad asociar a una toolbar que está en el formulario MDI Padre que lo haga al igual que con el menú windows de manera automatica sin tener que añadir código cada vez que cree una ventana en vez de crear una opción en el menú windows me cree el boton en la toolbar y que al cerrar el formulario este boton se destruya.

La opción de fuerza bruta es que cada vez que creo el formulario debo ocuparme de crear el boton en la toolbar y asociarlo con la accion que abre el formulario y cuando cierro el formulario debo destruir el boton, pero creo que debe existir una manera más elegante de hacerlo ya que con el menu windows no hay que ocuparse de eso.

Saludos,
Responder Con Cita
  #2  
Antiguo 12-04-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Me temo que no voy a poder ayudar mucho, sólo comentar que el proyecto Toolbar 2000 de Jordan Russel incluye un componente específico para trabajar con ventanas MDI de modo que estas se muestren en las barras de herramientas. Ignoro hasta qué punto podrás aprovechar dichos componentes, pero, puesto que su código fuente está disponible, tal vez quisieras echar un vistazo a ver si puedes sacar algo en claro.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 12-04-2015
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 20
juniorSoft Va por buen camino
Gracias Dec Por Responder, voy a ver el link a ver que puedo hacer.
Responder Con Cita
  #4  
Antiguo 12-04-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola JuniorSoft.

La idea que te propongo es agrupar la creación del MDIChild y del ToolButton correspondiente como hago en este ejemplo simplificado, que usa un TToolBar un TPanel (alBottom) y dentro de él tres TButton.
Código Delphi [-]
type
  TfrmMain = class(TForm)
  ... 
  private
    FChildTags: Integer;
    procedure OpenMDIChild(AClass: TFormClass; const btnCaption: string; aAction: TAction );
  public
    property ChildTag: Integer read FChildTags;
    procedure DeleteToolButton(const TagButton: Integer);
  end;
...
implementation
uses Unit2, Unit3, Unit4; // MDIChilds

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  FChildTags := 1; // p
end;


// Crear-Mostrar MDIChilds
procedure TfrmMain.OpenMDIChild(AClass: TFormClass; const btnCaption: string; aAction: TAction);
var
  i, inx: Integer;
  nb: TToolButton;
begin
  for i:= MDIChildCount-1 downto 0 do
    if MDIChildren[i] is AClass then
    begin
      if MDIChildren[i].WindowState = wsMinimized then
        MDIChildren[i].WindowState:= wsNormal;
      MDIChildren[i].BringToFront;
      Exit;
    end;

  with AClass.Create(Self) do
  begin
    Tag           := FChildTags;
    nb            := TToolButton.Create(ToolBar1);
    nb.Height     := ImageList1.Height;
    nb.Width      := ImageList1.Width;
    nb.Caption    := btnCaption;
    inx           := ToolBar1.ButtonCount - 1;
    if inx > -1 then
      nb.Left := ToolBar1.Buttons[inx].Left + ToolBar1.Buttons[inx].Width
    else
      nb.Left := 0;
    nb.Action := aAction;
    nb.Parent := ToolBar1;
    nb.Tag    := ChildTag;
    //...
    Inc(FChildTags);
  end;
end;

// Eliminar ToolButton
procedure TfrmMain.DeleteToolButton(const TagButton: Integer);
var
  i: Integer;
begin
  for i:= ToolBar1.ButtonCount-1 downto 0 do
    if ToolBar1.Buttons[i].Tag = TagButton then
      ToolBar1.Buttons[i].Free;
end;

// Llamada crear-mostrar MDIChilds
procedure TfrmMain.btnChild1Click(Sender: TObject);
begin
  OpenMDIChild(TChild1, 'Child1', TAction(ActionList1.Actions[0]));
end;

procedure TfrmMain.btnChild2Click(Sender: TObject);
begin
  OpenMDIChild(TChild2, 'Child2', TAction(ActionList1.Actions[1]));
end;

procedure TfrmMain.btnChild3Click(Sender: TObject);
begin
  OpenMDIChild(TChild3, 'Child3', TAction(ActionList1.Actions[2]));
end;

// Acciones de ejemplo
procedure TfrmMain.Action1Execute(Sender: TObject);
begin
  ShowMessage(TToolButton(Sender).Name);
end;

procedure TfrmMain.Action2Execute(Sender: TObject);
begin
  ShowMessage(TToolButton(Sender).Name);
end;

procedure TfrmMain.Action3Execute(Sender: TObject);
begin
  ShowMessage(TToolButton(Sender).Name);
end;
...

Salida:


Como verás es sólo un ejemplo orientativo, si nos explicas mas detalladamente la situación, tal vez lo podamos ajustar.

Saludos

Pd: Te ajunto los archivos fuentes de la prueba.
Archivos Adjuntos
Tipo de Archivo: zip junior.zip (14,4 KB, 5 visitas)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 13-04-2015
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 20
juniorSoft Va por buen camino
Excelente ecfisa, es lo que deseo hacer, así se simplifica la creacion de los formularios a una sola instruccion agrupada en un metodo y no se olvida tener que agregarle código fuera de la instruccion para crear los botones.

Gracias por la ayuda, Exito a esta comunidad.

Última edición por juniorSoft fecha: 13-04-2015 a las 02:47:01.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ventanas mdi hijas en cascada.. lbidi Varios 1 14-04-2011 17:25:30
Cómo hacer que se creen nuevos objetos cada vez? gerupc Varios 2 31-12-2007 00:55:44
Ventanas Hijas en Aplicacion MDI Esau OOP 6 06-11-2007 18:23:56
Recorrido de ventanas hijas sur-se OOP 3 23-08-2004 11:43:10
Ventanas MDI Hijas LucianoRey OOP 4 25-02-2004 01:28:32


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


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