Для себя нашел вариант решения задачи:
Поскольку свойтво Node.Data устанавливается только для определенных позицый, добавил к ниму еще и Node.StateIndex . И по нему отбираю нужное мне значения из нужных таблиц.
procedure TreeViewOnDoubleClick(Sender: TObject);
begin
if TreeView.Selected.Data=0 then begin
exit;
end else
begin
IF TreeView.Selected.StateIndex=1 Then Begin
//Some Code
End Else
Begin
//Some Code
End;
end;
end;
procedure Form1_Button2_OnClick (Sender: TObject; var Cancel: boolean);
var
treenode, treenode1, treenode2,treenode3 : TTreenode;
sWorks : TDataSet;
sHOUSE,sPOD,sST,sKV:String;
sSQL:string;
begin
Tree_Set;
Treeview.Items.BeginUpdate;
sSQL:='SELECT "дом."||HOUSE.dom||ifnull("-"||HOUSE.let,"")||ifnull(", корп."||HOUSE.korp,""), "под."||H_KV.pod, "ст."||H_KV.st, "кв."||H_KV.kv, HOUSE.segment, STREET.id, ';
sSQL:=sSQL+'(HOUSE.id||STREET.street||ifnull("дом."||HOUSE.dom,"")||ifnull("под."||H_KV.pod,"")||ifnull("ст."||H_KV.st,"")||ifnull("кв."||H_KV.kv,"")) as full_dom, HOUSE.id, H_KV.id ';
sSQL:=sSQL+'FROM STREET LEFT JOIN HOUSE ON HOUSE.id_STREET=STREET.id LEFT JOIN H_KV ON H_KV.id_HOUSE=HOUSE.id WHERE STREET.id="'+IntToStr(Form1.ComboBox1.dbItemID)+'" ';
sSQL:=sSQL+'ORDER BY full_dom';
sHOUSE:='';sPOD:='';sST:='';sKV:='';
SQLQuery(sSQL, sWorks);
While not sWorks.EOF do Begin
IF sWorks.Fields[4].AsString='Многоэтажный' Then Begin
IF sHOUSE<>sWorks.Fields[0].AsString Then Begin
sHOUSE:=sWorks.Fields[0].AsString;
treenode := Treeview.Items.Add(nil,sWorks.Fields[0].AsString);
end;
IF sPOD<>sHOUSE+sWorks.Fields[1].AsString Then Begin
sPOD:=sHOUSE+sWorks.Fields[1].AsString;
treenode1 := Treeview.Items.AddChild(treenode,sWorks.fields[1].asstring);
End;
IF sST<> sHOUSE+sPOD+sWorks.Fields[2].AsString Then Begin
sST:=sHOUSE+sPOD+sWorks.Fields[2].AsString;
treenode2 := Treeview.Items.AddChild(treenode1,sWorks.Fields[2].AsString);
End;
IF sKV<>sHOUSE+sPOD+sST+sWorks.Fields[3].AsString Then Begin
sKV:=sHOUSE+sPOD+sST+sWorks.Fields[3].AsString;
treenode3 := Treeview.Items.AddChild(treenode2,sWorks.Fields[3].AsString);
treenode3.Data := sWorks.fields[8].AsInteger;
treenode3.StateIndex := 1;
End;
End else
Begin
IF sWorks.Fields[3].AsString>'' Then Begin
IF sHOUSE<>sWorks.Fields[6].AsString Then Begin
sHOUSE:=sWorks.Fields[6].AsString;
treenode := Treeview.Items.Add(nil,sWorks.Fields[0].AsString+', '+sWorks.Fields[3].AsString);
treenode.Data := sWorks.fields[8].AsInteger;
treenode.StateIndex := 1;
End;
End else
begin
IF sHOUSE<>sWorks.Fields[6].AsString Then Begin
sHOUSE:=sWorks.Fields[6].AsString;
treenode := Treeview.Items.Add(nil,sWorks.Fields[0].AsString);
treenode.Data := sWorks.fields[5].AsInteger;
treenode.StateIndex := 0;
End;
end;
end;
sWorks.Next;
End;
sWorks.Free;
Treeview.Items.EndUpdate;
end;
=====================================
For myself, I found a solution to the problem:
Since Node.Data is installed only for certain position, added to Node.StateIndex. And by him, select the values you need from the desired tables.
I'm just learning