Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   sincronizar TreeView con MainMenu (https://www.clubdelphi.com/foros/showthread.php?t=55646)

_CALI 23-04-2008 03:20:44

sincronizar TreeView con MainMenu
 
Hola Amigos, imaginen que quieran personalizar el menu de un sistema atraves de un TreeView, osea q cada nodo que agregue o q cambie de lugar afecta a la estructura del MainMenu tal y como esta en el TreeView, ojo no importa si tiene hijos, nietos tataranietos, etc, tal descendecia debe tambien crearse el en el MENU

un programa q sea dinámico sin importar el numero de niveles de la jerarquia de ambos objetos, lo he eintentado con bucles anidados for dentro de otro, etc, pero si quiero agragar una desendencia mas de lo esta limitado mi bucle anidado???


Muchas Gracias!!!!

Neftali [Germán.Estévez] 23-04-2008 10:23:36

En la sección de ejempos de mi página web tienes un par llamados: "Convertir un Menu en un TreeView" (para pasar de Treeview a Menu -Al contrario que el que necesitas-) y "Crear un menu de aplicación a partir de texto" (que genera al Menu a partir de un Texto, pero con estructura de árbol -similar a un Tree-).

Ambos están con código, y aunque no es exactamente lo que necesitas, creo que si les echas un vistazo no te costará mucho sacar lo que necesitas.

defcon1_es 24-02-2010 17:08:12

Cita:

Empezado por Neftali (Mensaje 281920)
En la sección de ejempos de mi página web tienes un par llamados: "Convertir un Menu en un TreeView" (para pasar de Treeview a Menu -Al contrario que el que necesitas-) y "Crear un menu de aplicación a partir de texto" (que genera al Menu a partir de un Texto, pero con estructura de árbol -similar a un Tree-).

Ambos están con código, y aunque no es exactamente lo que necesitas, creo que si les echas un vistazo no te costará mucho sacar lo que necesitas.

Aunque este post es un poco "viejuno", me ha surgido recientemente este mismo problema,
y siguiendo estos dos ejemplos, he podido cargar un Mainmenu a partir de un Treeview mediante este código (muy básico)

Código Delphi [-]
Poner en el uses la unit Contnrs

procedure TForm1.CargarMenuDeArbol(aMenu: TMenu; Arbol: TTreeView);
var
  itemStack: TStack; 
  level: Integer;
  i: Integer;
  newitem: TMenuItem;
begin
  level := 0;
  itemstack := TStack.Create;
  try
    itemstack.Push(aMenu.Items);
    for i := 0 to Arbol.Items.count - 1 do
    begin
      // crear el elemento
      newitem :=
        Menus.NewItem(Arbol.Items.Item[i].Text, 0, false, true, nil, 0, 'mni'+IntToStr(i));
//      newitem.Hint := Arbol.Items.Item[i].Text; 
      newitem.ImageIndex := Arbol.Items.Item[i].ImageIndex;
      while level > Arbol.Items.Item[i].level do
      begin
        itemstack.Pop;
        Dec(level);
      end;
      // Añadirlo
      TMenuItem(itemstack.Peek).Add(newitem);
      Itemstack.Push(newitem);
      Inc(level);
    end;
  finally
    itemstack.free;
  end;
end;

rgstuamigo 24-02-2010 17:41:21

Yo lo hago recursivamente con éste código>
Código Delphi [-]
Procedure pMainMenuToTreeView(Nodos:TTreeNodes;Padre:TTreeNode;I:TMenuItem);
var j:Integer;
aux:TMenuItem;
n:TTreeNode;
Caption:String;
begin
 if ((I.Enabled=False)or(I.IsLine)) then Exit;
for  j:=0  to I.Count-1 do
  begin
    aux:=I.Items[j];
      if not(aux.IsLine)then
       begin
           if(aux.Enabled=True) then
            begin
             Caption:=StringReplace(aux.Caption,'&','',[]);//con esto elimino los '&'
             n:=Nodos.AddChild(Padre,Caption);
            end;
          pMainMenuToTreeView(Nodos,n,aux);
           if(not(aux.IsLine)and(aux.Count>0)) then
              n.ImageIndex:=1
           else n.ImageIndex:=2;
          n.SelectedIndex:=n.ImageIndex;
      end;
  end;
end;
Por supuesto que si analizan el código anterior se darán cuenta que tambien asigno los indices de las imagenes que tendra el treeView en sus nodos.En mi caso particular lo preciso así como está en el Código; aparte de eso yo no cargo los item que estén deshabilitados, ni tampoco los item que son separadores(item que son una linea de separacion);).
Para llamarlo se hace así>
Código Delphi [-]
begin
 Arbol.Items.Clear;
 pMainMenuToTreeView(Arbol.Items,nil,Menu.Items);
end
Saludos...:)
POSDATA:Ultimamente estoy dando a conocer algunos códigos personales(secreto) que tenía por ahí guardados.:rolleyes::D

darkone2k4 11-03-2010 20:33:16

muchas gracias x tú código rgstuamigo, era lo que necesitaba..


La franja horaria es GMT +2. Ahora son las 06:51:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi