Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.09;
Скачать: CL | DM;

Вниз

Правильное добавление дочерних веток   Найти похожие ветки 

 
0_o   (2006-05-28 20:53) [0]

Подскажите как правильно добавлять дочерние ветки
Юзаются следующие процедуры

На построение дочерних:

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

Подскажите как делать дочерние ветки для каждого главного элемента? :(
Заранее спасибо.


 
wsih ©   (2006-05-28 22:11) [1]

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;


 
0_o   (2006-05-29 17:53) [2]

Видимо это Бормана глюк! - стоило поменять в процедуре procedure TForm1.Button3Click(Sender: TObject); строчку
for i:=0 to TreeView.Items.Count-1 do на
for i:=TreeView.Items.Count-1 downto 0  do и все заработало как надо!



Страницы: 1 вся ветка

Текущий архив: 2006.07.09;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.051 c
2-1150960522
Квэнди
2006-06-22 11:15
2006.07.09
Проблема с свойствами объекта


3-1146976673
Kurillka
2006-05-07 08:37
2006.07.09
Как настроить MS SQL 2000 для отсылки SMS?


2-1150796089
Zilog
2006-06-20 13:34
2006.07.09
залипающая кнопка


2-1151055956
И. Павел
2006-06-23 13:45
2006.07.09
Вертикальный текст


1-1148540768
novill
2006-05-25 11:06
2006.07.09
Как избежать варинига при создании объекта в try finally