Hola de nuevo. He modificado el código en función al post que me comentaba Casimiro y funciona correctamente. Se ha quedado de la siguiente forma:
Código Delphi
[-]
procedure TFormFamilias.ActualizaArbol;
var
Nodo0,Nodo1,Nodo2,Nodo3,Nodo4: TTreeNode;
N: SmallInt;
MiClase: TMiClase;
begin
Screen.Cursor:=crHourGlass;
TreeView1.Items.Clear;
Nodo0:=TreeView1.Items.AddChildObject(nil, 'Familias', MiClase);
DataModule1.EDBQuery1.SQL.Clear;
DataModule1.EDBQuery1.SQL.Add('SELECT * FROM FAMILIAS ORDER BY CODIGO');
DataModule1.EDBQuery1.Open;
DataModule1.EDBQuery1.First;
while not DataModule1.EDBQuery1.eof do begin
N:=Length(DataModule1.EDBQuery1.FieldByName('CODIGO').AsString);
MiClase:= TMiClase.Create;
MiClase.Codigo :=DataModule1.EDBQuery1.Fieldbyname('Codigo').AsString;
case N of
3: begin
Nodo1:=TreeView1.Items.AddChildObject(Nodo0, DataModule1.EDBQuery1.FieldByName('NOMBRE').AsString, MiClase);
end;
6: begin
Nodo2:=TreeView1.Items.AddChildObject(Nodo1, DataModule1.EDBQuery1.FieldByName('NOMBRE').AsString, MiClase);
end;
9: begin
Nodo3:=TreeView1.Items.AddChildObject(Nodo2, DataModule1.EDBQuery1.FieldByName('NOMBRE').AsString, MiClase);
end;
12: begin
Nodo4:=TreeView1.Items.AddChildObject(Nodo3, DataModule1.EDBQuery1.FieldByName('NOMBRE').AsString, MiClase);
end;
end;
DataModule1.EDBQuery1.Next;
end;
Screen.Cursor:=crDefault;
end;
y en el evento OnClick
Código Delphi
[-]
procedure TFormFamilias.TreeView1Click(Sender: TObject);
var
Nodo: TTreeNode;
begin
Nodo:=TreeView1.Selected;
ShowMessage(TMiClase(Nodo.Data).Codigo)
end;
Gracias a todos y un saludo
Edito: para que veais que soy bueno he cambiado el ExecSql por el Open :P