* * *

Author Topic: TTreeView  (Read 1286 times)

Andreii

  • Newbie
  • Posts: 4
TTreeView
« on: April 17, 2018, 08:32:37 pm »
Делаю программулину, и тут такая проблема с этим компонентом, не пойму как он работает
Code: Pascal  [Select]
  1. procedure TForm1.TTreeVievResize;
  2. var
  3. lengthLA,l,i,i1,l1,i2,l2,i3,l3:integer;
  4. s:string;
  5. spShem:TStringList;
  6. spFormuls:TStringList;
  7. root : TTreeNode;
  8. node : TTreeNode;
  9. begin
  10. TreeView1.Items.Clear;
  11. if Length(ListArr[0])>0 then begin
  12. l:=Length(ListArr[0])-1;
  13. lengthLA:=Length(ListArr);
  14. for i:=0 to l do
  15. begin
  16.   spShem:=TStringList.Create;
  17.   spShem.Assign(ListArr[0,i]);
  18.   s:=spShem[0];
  19.   root:=TreeView1.Items.Add(nil,s);// Treeview1.Items.Add (nil,'Root Node');
  20.   root.ImageIndex:=0;
  21.   spShem.Free;
  22.   if Length(ListArr)>1 then begin
  23.   l3:=length(ListArr[1]);
  24.   if l3>0 then begin
  25.   if i<l3 then begin
  26.   spFormuls:=TStringList.Create;//формулы
  27.   spFormuls.Assign(ListArr[1,i]);
  28.   if spFormuls.count>0 then begin
  29.   l1:=spFormuls.count-1;
  30.   for i1:=0 to l1 do begin
  31.   s:=spFormuls[i1];
  32.    //node := TreeView1.Items.Item[i];//
  33.    node :=Treeview1.Items.AddChild(root,s);
  34.   l2:=length(ArrayOfArrayRec[i,i1])-1;/////////////////////////////////////////
  35.  // if l2>-1 then begin
  36.   for i2:=0 to l2 do begin
  37.      VarRec:=ArrayOfArrayRec[i,i1,i2];
  38.      if VarRec.link=7 then begin
  39. ////  node := TreeView1.Items.Item[i1/i2];
  40.      root:=Treeview1.Items.AddChild(node,VarRec.element);
  41.    end;
  42.    end;
  43.    end;
  44.     spFormuls.Free;
  45.   end;
  46.   end;
  47.  
  48.   end;
  49.   end;
  50.   end;
  51. end;
  52. end;
в общем первым и вторым узлом вставляются элементы из одного массива, а к ним дочерними с другого (первые два элемента это в общем как-бы разделы и формулы), а самыми низшими по иерархии - это переменные из формул (там уже всё парсер сделал, разложил). и такая беда, что когда я после формулы добавляю переменные с массива, то следующие формулы из другого массива пишутся к ним дочерними. Я уже и так крутил, и этак - белеберда получается, не могу понять как это сделать.
В общем мне надо, чтобы после переменных следующая формула достраивалась дочерним элементом к разделу, а она пристраивается дочерним к последней переменной. Беда.
Подскажите.
  Меня этот компонент очень сильно тормозит в работе. Заранее благодарен.
« Last Edit: April 18, 2018, 03:29:24 pm by Andreii »

Andreii

  • Newbie
  • Posts: 4
Re: TTreeView
« Reply #1 on: April 18, 2018, 05:16:59 am »
Разобрался в принципе, мне больше трёх ступеней иерархии не надо, к счастью, а так я-бы долго ещё разбирался.
Code: Pascal  [Select]
  1. procedure TForm1.TTreeVievResize;
  2. var
  3. lengthLA,l,i,i1,l1,i2,l2,i3,l3:integer;
  4. s:string;
  5. spShem:TStringList;
  6. spFormuls:TStringList;
  7. root : TTreeNode;
  8. node : TTreeNode;
  9. begin
  10. TreeView1.Items.Clear;
  11. if Length(ListArr[0])>0 then begin
  12. l:=Length(ListArr[0])-1;
  13. lengthLA:=Length(ListArr);
  14. for i:=0 to l do
  15. begin
  16.   spShem:=TStringList.Create;
  17.   spShem.Assign(ListArr[0,i]);
  18.   s:=spShem[0];
  19.   root:=TreeView1.Items.Add(nil,s);// Treeview1.Items.Add (nil,'Root Node');
  20.   root.ImageIndex:=0;
  21.   spShem.Free;
  22.   if Length(ListArr)>1 then begin
  23.   l3:=length(ListArr[1]);
  24.   if l3>0 then begin
  25.   if i<l3 then begin
  26.   spFormuls:=TStringList.Create;//формулы
  27.   spFormuls.Assign(ListArr[1,i]);
  28.   if spFormuls.count>0 then begin
  29.   l1:=spFormuls.count-1;
  30.   for i1:=0 to l1 do begin
  31.   s:=spFormuls[i1];
  32.    node :=Treeview1.Items.AddChild(root,s);
  33.   l2:=length(ArrayOfArrayRec[i,i1])-1;/////////////////////////////////////////
  34.   for i2:=0 to l2 do begin
  35.      VarRec:=ArrayOfArrayRec[i,i1,i2];
  36.      if VarRec.link=7 then begin
  37.  //    root:=Treeview1.Items.AddChild(node,VarRec.element);
  38.      Treeview1.Items.AddChild(node,VarRec.element);
  39.    end;
  40.    end;
  41.    end;
  42.     spFormuls.Free;
  43.   end;
  44.   end;
  45.  
  46.   end;
  47.   end;
  48.   end;
  49. end;
  50. end;
Если кто-то знает как сделать для пяти ступеней иерархии подскажите, на всякий случай.
« Last Edit: April 18, 2018, 03:29:42 pm by Andreii »

Andreii

  • Newbie
  • Posts: 4
Re: TTreeView
« Reply #2 on: April 18, 2018, 05:37:18 am »
И ещё очень важный вопрос, дело в том, что этот компонент у меня выступает управляющим интерфейсом в программе, и мне в элементах на низжей ступени иерархии нужны тоже иконки - не знаю как добавить, пока так вот сделано, на первых двух, но без нижних - никак. Это программа по оптимизации. Сделал-бы на компоненте TGrapfConrol - но по нему вообще никакой информации. Поэтому решил остановится на TTreeWiev.
Code: Pascal  [Select]
  1. procedure TForm1.TTreeVievResize;
  2. var
  3. lengthLA,l,i,i1,l1,i2,l2,i3,l3:integer;
  4. s:string;
  5. spShem:TStringList;
  6. spFormuls:TStringList;
  7. root : TTreeNode;
  8. node : TTreeNode;
  9. begin
  10. TreeView1.Items.Clear;
  11. if Length(ListArr[0])>0 then begin
  12. l:=Length(ListArr[0])-1;
  13. lengthLA:=Length(ListArr);
  14. for i:=0 to l do
  15. begin
  16.   spShem:=TStringList.Create;
  17.   spShem.Assign(ListArr[0,i]);
  18.   s:=spShem[0];
  19.   root:=TreeView1.Items.Add(nil,s);// Treeview1.Items.Add (nil,'Root Node');
  20.   root.ImageIndex:=0;
  21.   spShem.Free;
  22.   if Length(ListArr)>1 then begin
  23.   l3:=length(ListArr[1]);
  24.   if l3>0 then begin
  25.   if i<l3 then begin
  26.   spFormuls:=TStringList.Create;//формулы
  27.   spFormuls.Assign(ListArr[1,i]);
  28.   if spFormuls.count>0 then begin
  29.   l1:=spFormuls.count-1;
  30.   for i1:=0 to l1 do begin
  31.   s:=spFormuls[i1];
  32.    node :=Treeview1.Items.AddChild(root,s);
  33.    node.ImageIndex:=1;
  34.   l2:=length(ArrayOfArrayRec[i,i1])-1;/////////////////////////////////////////
  35.   for i2:=0 to l2 do begin
  36.      VarRec:=ArrayOfArrayRec[i,i1,i2];
  37.      if VarRec.link=7 then begin
  38.      Treeview1.Items.AddChild(node,VarRec.element);// СЮЖА НУЖНО ТОЖЕ ИКОНКУ, НО НЕ ЗНАЮ КАК
  39. //     Child.ImageIndex:=3;    ТУТ ПО РАЗНОМУ ПРОБОВАЛ
  40.    end;
  41.    end;
  42.    end;
  43.     spFormuls.Free;
  44.   end;
  45.   end;
  46.  
  47.   end;
  48.   end;
  49.   end;
  50. end;
  51. end
« Last Edit: April 18, 2018, 03:29:59 pm by Andreii »

Andreii

  • Newbie
  • Posts: 4
Re: TTreeView
« Reply #3 on: April 18, 2018, 06:20:45 pm »
Нашёл отличное место где почитать http://msk.edu.ua/ivk/Informatika/Uch_posobiya/Programmirovanie/Lazarus/17_trees.htm
исправил код
Code: Pascal  [Select]
  1. procedure TForm1.TTreeVievResize;
  2. var
  3. lengthLA,l,i,i1,l1,i2,l2,i3,l3:integer;
  4. s:string;
  5. spShem:TStringList;
  6. spFormuls:TStringList;
  7. root : TTreeNode;
  8. node : TTreeNode;
  9. varibl: TTreeNode;
  10. begin
  11. TreeView1.Items.Clear;
  12. if Length(ListArr[0])>0 then begin
  13. l:=Length(ListArr[0])-1;
  14. lengthLA:=Length(ListArr);
  15. for i:=0 to l do
  16. begin
  17.   spShem:=TStringList.Create;
  18.   spShem.Assign(ListArr[0,i]);
  19.   s:=spShem[0];
  20.   root:=TreeView1.Items.Add(nil,s);// Treeview1.Items.Add (nil,'Root Node');
  21.   root.ImageIndex:=0;
  22.   spShem.Free;
  23.   if Length(ListArr)>1 then begin
  24.   l3:=length(ListArr[1]);
  25.   if l3>0 then begin
  26.   if i<l3 then begin
  27.   spFormuls:=TStringList.Create;//формулы
  28.   spFormuls.Assign(ListArr[1,i]);
  29.   if spFormuls.count>0 then begin
  30.   l1:=spFormuls.count-1;
  31.   for i1:=0 to l1 do begin
  32.   s:=spFormuls[i1];
  33.    node :=Treeview1.Items.AddChild(root,s);
  34.    node.ImageIndex:=1;
  35.   l2:=length(ArrayOfArrayRec[i,i1])-1;/////////////////////////////////////////
  36.   for i2:=0 to l2 do begin
  37.      VarRec:=ArrayOfArrayRec[i,i1,i2];
  38.      if VarRec.link=7 then begin
  39.    varibl :=Treeview1.Items.AddChild(node,VarRec.element);
  40.    varibl.ImageIndex:=3;
  41.      //     Treeview1.Items.AddChild(node,VarRec.element);// СЮЖА НУЖНО ТОЖЕ ИКОНКУ, НО НЕ ЗНАЮ КАК
  42.  
  43.    end;
  44.    end;
  45.    end;
  46.     spFormuls.Free;
  47.   end;
  48.   end;
  49.  
  50.   end;
  51.   end;
  52.   end;
  53. end;
  54. end;                                  
результат https://drive.google.com/open?id=1k-k29iaoZ7ReH-yfWsDqb-n53M2VSWxv

 

Recent

Get Lazarus at SourceForge.net. Fast, secure and Free Open Source software downloads Open Hub project report for Lazarus