Originariamente inviato da alka
Quello che mi appare strano è il modo in cui ottieni il riferimento al nodo TTreeNode.
Come mai usi il metodo GetNode?
Utilizzo il treeview per rappresentare un xml.
ogni TreeNode punta tramite la proprietà Data ad un 'estensione' della interfaccia IxmlDomElement. Questa estensione ha la proprietà itemId che contiene l'identificativo del TreeNode: in questo modo posso accedere ad ogni elemento dell'xml tramite la proprietà Data, e accedere ad ogni nodo del treeview tramite l'itemId(utile quando si scatena un evento su un elemento).
Conosci qualcosa di più efficace?

Edit:Ho trovato l'errore anche se non capisco bene il perchè: Ti posto un esempio:
Aggiungere ad una nuova application 1 treeview e 2 Tbutton.

codice:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type

   TObj=class(TObject)
    obj:Tobject;
    itemId:string;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    TreeView1: TTreeView;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    a:TTreeNode;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 obj1,obj2,obj3:TObj;
begin
  obj1:=Tobj.Create();
  obj1.obj:=TObject.Create();
  a:=treeView1.Items.AddChildObject(nil,'A',obj1);
  obj1.itemId:=String(a.ItemId);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  self.TreeView1.Items.Delete(a);
end;

end.
Quando sul click button2 avviene l'errore da me descritto.
Ciò non avviene se ItemId della classe Tobj lo dichiaro di tipo HTREEITEM.
Capisco che è un errore di cast(anche se tramite Tobj.itemId riesco a recuperare tranquillamente il nodo), ma non capisco perchè si verifica sulla cancellazione del nodo.
Comunque grazie mille!!!