Ver Mensaje Individual
  #2  
Antiguo 29-08-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Reputación: 24
maeyanes Va por buen camino
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...
Responder Con Cita