En realidad no hace falta adquirir memoria con la función "New", ya que la propiedad Data es de tipo puntero ocupando 2 bytes en memoria, lo mismo que ocupa un Integer.
Podría quedar así:
Código Delphi
[-]
Nod:=TreeView1.Items.Add (nil,Query1.FieldByName('Descripcion').asstring);
Nod.Data := Pointer(Query1.Fieldbyname('Codigo').asinteger);
Y cuando queramos acceder:
Código Delphi
[-]
MiNumero := Integer(Node.Selected.Data)
En este caso no tenemos que liberar nada de memoria cuando se libere el nodo, porque no hemos reservado memoria.
Lo realmente interesante es que podemos crear nuestro propio objeto y asociarlo a cada nodo, guardando mucha más información:
Código Delphi
[-]
type Cliente = Class(TObject)
public
nombre: string;
apellido:string;
direccion:string;
TotalFacturado:currency;
end;
...
cliente := TCliente.Create(nil);
Nod:=TreeView1.Items.Add (nil,Query1.FieldByName('Descripcion').asstring);
cliente);
cliente.nombre := query1.fieldbyname(....);
cliente.direccion:= ....
nod.Selected :=true;
Por supuesto, al eliminar un TTreeNode si necesitamos liberar nuestro objeto Cliente (evento OnFreeNode).
Saludos