![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Правильное добавление дочерних веток [D5, Win2k]
0_o © (2006-05-28 20:53:00)Подскажите как правильно добавлять дочерние ветки
Юзаются следующие процедуры
На построение дочерних:
procedure TForm1.BuildTree(Node: TTreeNode; ExecNo: integer);
var ID , i : Integer;
TreeNode : TTreeNode;
begin
TreeView.Items.BeginUpdate;
ADODataSet1.First;
for i:=1 to ADODataSet1.RecordCount do
begin
ID:=ADODataSet1.Fields[0].AsInteger;
TreeNode:=
TreeView.Items.AddChildObject(Node,ADODataSet1.Fields[1].AsString,TObject(ID));
ADODataSet1.Next;
end;
TreeView.Items.EndUpdate;
end;
Построение всего дерева:
procedure TForm1.Button3Click(Sender: TObject);
var i,j: integer;
begin
ShowMessage(IntToStr(TreeView.Items[0].Count));
for i:=0 to TreeView.Items.Count-1 do
begin
ADODataSet1.Active:=false;
ADODataSet1.Close;
j:=Integer(TreeView.Items[i].Data);
ADODataSet1.CommandText:='SELECT Producer_ID, Name FROM Producers WHERE Producer_ID IN '
+'(SELECT Producer FROM Wares WHERE Type = '+IntToStr(j)+') ORDER BY Name ASC';
ADODataSet1.Open;
ADODataSet1.Active:=true;
ADODataSet1.First;
BuildTree(TreeView.Items[i], 0);
end;
ShowMessage(IntToSTr(TreeView.Items.Count));
end;
В конце должно получится древо вида:
Элемент_1
|
- 111
|
- 222
|
- 333
Элемент_2
|
- 123
...
А получается вот такое:
Элемент_1
|
- 111
| |
| - 111
| | |
| | ... - тоже самое - 111, 222, 333
| |
| - 222
| |
| - 333
|
- 222
|
- 333
Элемент_2
...
Т.е. получается что я каждый раз в процедуреprocedure TForm1.Button3Click(Sender: TObject);
заставляю делать дочек для первого элемента каждой ветки, в одной главной ветке - Элемент_1
Подскажите как делать дочерние ветки для каждого главного элемента? :(
Заранее спасибо.
0_o (2006-05-29 17:53:00) [1]Видимо это Бормана глюк! - стоило поменять в процедуре
procedure TForm1.Button3Click(Sender: TObject);строчку
for i:=0 to TreeView.Items.Count-1 doна
for i:=TreeView.Items.Count-1 downto0 doи все заработало как надо!
wsih (2006-05-28 22:11:00) [2]Y! Вот мои ламерские процедурки для выращивания деревьев... %)
procedure treenav(Tree:TTreeView;s:string); //Навигация по древесине
var
node:TtreeNode;
pnode:TTreeNode;
begin
if Tree.Selected <> nil then
if (s='pparent') then
while not (Tree.Selected.Parent = nil) do begin
node:=Tree.Selected;
pnode:=node.Parent;
Tree.Select(pnode);
end
else if (s='parent') then Tree.Select(Tree.Selected.Parent)
else if (s='firstchild') then Tree.Select(Tree.Selected.GetFirstChild)
else if (s='next') then Tree.Select(Tree.Selected.GetNext)
else if (s='nextonlevel') then Tree.Select(Tree.Selected.GetNextChild(Tree.Selected));
end;
procedure TForm1.popnewboreClick(Sender: TObject);
var pBore:BorePointer;
begin
treenav(Tree,'pparent');
Tree.Select(Tree.Items.Add(Tree.Selected,'УРОВЕНЬ 0'));
...
end;
procedure TForm1.popnewlayerClick(Sender: TObject);
var pLayer:LayerPointer;
begin
if Tree.Selected = nil then exit;
treenav(Tree,'pparent');
Tree.Select(Tree.Items.AddChild(Tree.Selected,'УРОВЕНЬ 1'));
...
end;
procedure TForm1.popnewsampleClick(Sender: TObject);
var pSample:SamplePointer;
begin
if Tree.Selected = nil then exit;
if Tree.Selected.Level=0 then exit;
if tree.Selected.Level=2 then treenav(tree,'parent');
Tree.Select(Tree.Items.AddChild(Tree.Selected,'УРОВЕНЬ 2'));
...
end;