SALAR
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Помогите, кто работал в Delphi с VT. Несколько дней уже бьюсь и не могу преодолеть следующий глюк. Заполняю в процедуре InitNode данные узлов: with Sender do begin Data:= GetNodeData(Node); Initialize(Data^); Data.AMaterialGroupNumber:=tblMaterialGroupData.FieldByName('Id_group').AsInteger; Data.AMaterialGroupName:=tblMaterialGroupData.FieldByName('MaterialGroupName').AsString; Data.Caption := Format('Level %d, Index %d', [GetNodeLevel(Node), Node.Index]); end; with query1 do begin close; SQL.Clear; SQL.Add('Select MaterialName from Material.db where id_group=:P_TABLE1_ID'); ParamByName('P_TABLE1_ID').AsInteger:=Data.AMaterialGroupNumber; open; end; if Query1.RecordCount > 0 then begin Include(InitialStates, ivsHasChildren); Query1.First; for i:=0 to Query1.RecordCount-1 do begin ChildNode:=Sender.AddChild(Node); with Sender do begin ChildData:=GetNodeData(ChildNode); Initialize(ChildData^); ChildData.Caption:=Query1.Fields[0].AsString; ChildData.AMaterialGroupNumber:=Data.AMaterialGroupNumber; ChildData.AMaterialGroupName:=Data.AMaterialGroupName; end; Query1.Next; end; end; if not tblMaterialGroupData.eof then tblMaterialGroupData.Next; Как видите, формирую корневые узлы и дочерние, где меняется только Caption. Когда я в событии GetText пытаюсь отобразить подписи узлов: Data := Sender.GetNodeData(Node); case Sender.GetNodeLevel(Node) of 0: if Assigned(Data) then Text:=Data.AMaterialGroupName; 1: begin Text:=Data.Caption; end; end; то для дочернего узла отображается caption из данных корневого узла, как будто данные дочернего узла не инициализировались. В отладчике, в строке Text:=Data.Caption; параметр node почему то соответствует последнему корневому узлу (а он дочерних элементов не имеет), а не тому, с которого порождается дочерний элемент (level 1), поэтому и получается caption родительского узла. |