Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Правильное добавление дочерних веток [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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо