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 14-12-2010
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Post Ayuda con este Procedimiento

Hola chicos.

Tengo una aplicación en Delphi7, donde utilizo un TreeView para mostrar el árbol de Provincia y Municipios, les muestro:

Cita:
-Todas
---01-Pinar
------0101-Sandino
------0101-Sandino
------0101-Sandino
------0101-Sandino
---02-La Habana
------0201-Mariel
------0202-Guanajay
------0203-Caimito
------0204-Bauta

.
.
Este es el código que utilizo para llenar el TreeView, el problema radica que he diseñado dos iconos uno para las provincias y otro para los municipios. No he logrado poner el la imagen correspondiente a los municipios.

Código Delphi [-]
Procedure LlenaProvMun(TreeView: TTreeView; TablaProv: TADOTable; TablaMun: TADOTable;
                       ImgProv: Integer; ImgMun: Integer);
var
 Prov, Mun: String;
 TodosPtr, ProvPtr: TTreeNode;
 i, TM : integer;
begin
 // Limpio el Arbol
 TreeView.Items.Clear; 
 TodosPtr:= TreeView.Items.Add(nil, 'Todas'); 
 // Sin imagen ------------------
 TodosPtr.ImageIndex := -1;     
 TodosPtr.SelectedIndex := -1;
 TodosPtr.StateIndex := -1;
 //-------------------------------
 TablaProv.Open;
 TablaProv.First;
 while not TablaProv.Eof do
   begin
    // Concateno Código y Nombre de provincia ej: 01-Pinar del Rio
    Prov:= TablaProv.Fields[1].AsString + '-' + TablaProv.Fields[2].AsString; 
  // Añado las Provincias
    ProvPtr:= TreeView.Items.AddChild(TodosPtr, Prov); 
  // Defino img de las provincias -----
    ProvPtr.ImageIndex := ImgProv;
    ProvPtr.SelectedIndex := ImgProv;
    ProvPtr.StateIndex := ImgProv;
  //-----------------------------------
    TablaMun.Open;
    TM:= TablaMun.RecordCount;
    TablaMun.First;
    for i:= 0 to TM-1 do
      begin
      // Concateno Código y Nombre del municipio  ej: 0101-Sandino
        Mun:= TablaMun.Fields[3].AsString + '-' + TablaMun.Fields[4].AsString;
    // Añado municipio
        TreeView.Items.AddChild(ProvPtr, Mun);
       { 
      He intentado con estas líneas por separadas pero no resuelvo.
    TreeView.Items.Item[i].ImageIndex := ImgMun; 
        ProvPtr.ImageIndex := ImgMun;
       }
        TablaMun.Next;
      end;
    TablaProv.Next;
   end;
 TablaProv.Close;
 TablaMun.Close;
end;

Muchas grasias de antemano.

Saludos,
Ledian.
Responder Con Cita
  #2  
Antiguo 14-12-2010
Avatar de YOSMITH
YOSMITH YOSMITH is offline
Registrado
 
Registrado: may 2007
Posts: 3
Poder: 0
YOSMITH Va por buen camino
posible solucion

Hola ledian.

Alguna vez tuve un probla similar y lo solucione con este procedimiento:

Código Delphi [-]
procedure Tfrmprincipal.CambiarimagenDescendencia(Nodo: TTreeNode);
var
  i:integer;
begin
  if nodo.HasChildren=true then
  begin
    if Nodo.Expanded then
    begin
      Nodo.ImageIndex := 1;
      Nodo.SelectedIndex :=1;
    end else begin
      Nodo.ImageIndex := 0;
      Nodo.SelectedIndex :=0;
    end;
    for i := 0 to (Nodo.Count - 1) do
    begin
      CambiarimagenDescendencia(nodo.item[i]);
    end;
  end else begin
    Nodo.ImageIndex := 2;
    Nodo.SelectedIndex :=2;
  end;
end;

Básicamente lo que hace el procedimiento hace es identificar si el nodo tiene hijos, y si los posee pregunta si esta expandido o no (dependiendo de esto se asigna una imagen de una carpeta abierta o cerrada), si no tiene nodos hijos, asigna otra imagen…
Imagen 1: carpeta expandida si tiene nodos hijos,
Imagen 0: carpeta cerrada si tiene nodos hijos,
Imagen 2: imagen de los nodos que no tienen hijos

Luego lo implementas en el evento Expanded del treeview:

Código Delphi [-]
TreeviewExpanded(Sender:TObject; Node: TTreeNode);begin
 CambiarimagenDescendencia(Node);
end;

Y si quieres algo mas simple:
Código Delphi [-]
procedure TFTreeView.CambiarNodosHijos;
var
  i: Integer;
begin
  for i := 0 to TreeView.Items.Count - 1 do
    if ( TreeView.Items[i] as TTreeNode ).Level = 0 then
      ( TreeView.Items[i] as TTreeNode ).ImageIndex := 0
    else
      ( TreeView.Items[i] as TTreeNode ).ImageIndex := 1
end;
Espero te pueda servir, no es el super procedimiento pero creeo que te puede ayudar con lo que buscas.

Última edición por YOSMITH fecha: 14-12-2010 a las 20:05:31.
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
Ayuda con este error kdemia Internet 3 12-09-2010 13:12:11
ayuda con este procedimiento microbiano Conexión con bases de datos 7 06-04-2010 23:31:33
porque no sirve este pequeño procedimiento?? Gaim2205 Varios 5 28-09-2007 23:25:17
procedimiento almacenado ayuda con este codigo pipecato Varios 5 16-12-2005 12:24:34
Ayuda, como llamar a un procedimiento desde otro procedimiento? Ariatna Varios 1 01-02-2005 04:05:35


La franja horaria es GMT +2. Ahora son las 18:08:36.


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