Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   nodos del treeview (https://www.clubdelphi.com/foros/showthread.php?t=47489)

Buelos 29-08-2007 19:05:20

nodos del treeview
 
buenas, lo ke pasa es tengo una aplicacion con un treeview y necesito ke al hacer click en determinado nodo me lanze un evento o un mensaje pero ke sea diferente y propio de cada nodo. he cacharreado con las propiedades del nodo image index, selected index y state index pero no me ha salido nada.
agradesco de antemano cualkier ayuda ke me puedan brindar chao

maeyanes 29-08-2007 19:26:09

Hola...

Pues resulta que la clase TTreeNode no cuenta con ningún evento que te pueda ayudar a lograr lo que buscas...

En dado caso, tienes que usar el evento OnChange del TTreeView, el cual se dispara cada que cambias de un nodo a otro... El parámetro Node de este evento contiene el nodo que se acaba de seleccionar...

Ahora, para identificar a un nodo individualmente puedes usar ya sea su propiedad ItemId, que identifica a un nodo de forma única en la colección de nodos, o puedes usar la propiedad Data de tipo Pointer en la cual puedes guardar cualquier tipo de información:

Código Delphi [-]
type
  // Tipo de dato que vas a guardar en la propiedad Data de TTreeNode
  PNodeData: TNodeData;
  
  TNodeData = record
    Nombre: string;
    Value: Integer;
  end;

// Ejemplo de como guardar información en la propiedad Data de TTreeNode
procedure TForm1.AddNode(ACaption, AName: string; AValue: Integer);
var
  Node: TTreeNode;
  NodeData: PNodeData;

begin
  Node := TreeView1.Items.Add(nil, ACaption);
  with Node do
  begin
    ImageIndex := 0;
    SelectedIndex := 1;
    StateIndex := 2;
    New(PNodeData);
    with PNodeData^ do
    begin
      Nombre := AName;
      Value := AValue
    end;
    Data := PNodeData
  end
end;

// Ejemplo de como recuperar la información de la propiedad Data de TTreeNode
procedure TForm1.TreeView1OnChange(Sender: TObject; Node: TTreeNode);
begin
  if PNodeData(Node.Data)^.ANombre = 'Nodo1' then
    ShowMessage('Seleccioné el nodo 1, con valor ' + IntToStr(PNodeData(Node.Data)^.Value))
end;

// Al destruir la forma, liberara la memoria ocupada por la propiedad Data de TTreeNode
procedure TForm1.Form1Destroy(Sender: TObject);
var
  I: Integer;
  NodeData: PNodeData;

begin
  for I := 0 to Pred(TreeView.Items.Count) do
  begin
    if Assigned(TreeView1.Items[i].Data) then
    begin
      NodeData := TreeView1.Items[i].Data;
      Dispose(NodeData)
    end
  end
end;

Espero que con estos ejemplos puedas lograr lo que desees...


Saludos...

paldave 29-08-2007 20:55:53

Simplicidad ante todo.
Si todos los nodos tienen diferente texto y sabes el texto que buscas simplemente deberías hacer:
Código Delphi [-]
procedure TForm1.TreeView1Click(Sender: TObject);
begin
  if TreeView1.Selected.Text:='Texto del nodo' then...
De otro modo si lo que deseas identificar al nodo por su nivel y número usarías:
Código Delphi [-]
procedure TForm1.TreeView1Click(Sender: TObject);
begin
  if (TreeView1.Selected.Level =0) and (TreeView1.Selected.Index =0) then...
donde para identificar el nodo usas Level que es el nivel del nodo (0 para el primer nivel, 1 para el segundo y así sucesivamente) e index que es su ubicación en ese nivel (0 para el primer nodo de ese nivel, 1 para el segundo y sucesivamente).
Espero soluciones tu problema.

Caral 29-08-2007 23:08:13

Hola
Este ejemplo, sencillo, te puede dar una idea mas clara de como funcionan los eventos en un treeView, puedes jugar con esto, usando otros eventos, es realmente sencillo.
Espero te sirva.
Saludos

Buelos 04-09-2007 21:54:44

muchisisisisisisisimas gracias
 
muchisisismas gracias a todos por sus respuestas me fueron de gran utilidad y gracias a eso ya pude solucionar mi problema, kedo altamente agradecido por el tiempo dedicado a ayudarme con mi duda gracias y chao


La franja horaria es GMT +2. Ahora son las 00:53:11.

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