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
PNodeData: TNodeData;
TNodeData = record
Nombre: string;
Value: Integer;
end;
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;
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;
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...