Hola a tod@s.
Tengo un problema al intentar acceder al "data" de un treeview, lo creo de la siguiente manera:
Código Delphi
[-]
procedure TFormFamilias.ActualizaArbol;
var
Nodo0,Nodo1,Nodo2,Nodo3,Nodo4: TTreeNode;
N: SmallInt;
begin
Screen.Cursor:=crHourGlass;
TreeView1.Items.Clear;
Nodo0:=TreeView1.Items.AddChild(nil, 'Familias');
DataModule1.EDBQuery1.SQL.Clear;
DataModule1.EDBQuery1.SQL.Add('SELECT * FROM FAMILIAS ORDER BY CODIGO');
DataModule1.EDBQuery1.ExecSQL;
while not DataModule1.EDBQuery1.eof do begin
N:=Length(DataModule1.EDBQuery1.FieldByName('CODIGO').AsString);
case N of
3: begin
Nodo1:=TreeView1.Items.AddChild(Nodo0, DataModule1.EDBQuery1.FieldByName('NOMBRE').AsString);
Nodo1.Data := Pointer(DataModule1.EDBQuery1.Fieldbyname('Codigo').AsString);
end;
6: begin
Nodo2:=TreeView1.Items.AddChild(Nodo1, DataModule1.EDBQuery1.FieldByName('NOMBRE').AsString);
Nodo2.Data := Pointer(DataModule1.EDBQuery1.Fieldbyname('Codigo').AsString);
end;
9: begin
Nodo3:=TreeView1.Items.AddChild(Nodo2, DataModule1.EDBQuery1.FieldByName('NOMBRE').AsString);
Nodo3.Data := Pointer(DataModule1.EDBQuery1.Fieldbyname('Codigo').AsString);
end;
12: begin
Nodo4:=TreeView1.Items.AddChild(Nodo3, DataModule1.EDBQuery1.FieldByName('NOMBRE').AsString);
Nodo4.Data := Pointer(DataModule1.EDBQuery1.Fieldbyname('Codigo').AsString);
end;
end;
DataModule1.EDBQuery1.Next;
end;
Screen.Cursor:=crDefault;
end;
El problema es que después quiero acceder al valor del data, por ejemplo en el evento click del treeview pero no me da el valor correcto. He estado echando un vistazo a los post del foro y no encuentro dónde puede estar el problema.
He probado de dos maneras:
Código Delphi
[-]
procedure TFormFamilias.TreeView1Click(Sender: TObject);
var
Nodo: TTreeNode;
begin
Nodo:=TreeView1.Selected;
ShowMessage(String(Nodo.Data));
end;
con este código salen cosas raras que no tienen nada que ver con el dato que debe de tener almacenado.
Código Delphi
[-]
procedure TFormFamilias.TreeView1Click(Sender: TObject);
var
Nodo: TTreeNode;
begin
Nodo:=TreeView1.Selected;
ShowMessage(String(Nodo.Data^));
end;
con este otro código o no sale nada o da un access violation error
Agradeceré cualquier ayuda.
Gracias y un saludo