Forum > Russian

TTreeView

(1/1)

Andreii:
Делаю программулину, и тут такая проблема с этим компонентом, не пойму как он работает

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure TForm1.TTreeVievResize;varlengthLA,l,i,i1,l1,i2,l2,i3,l3:integer;s:string;spShem:TStringList;spFormuls:TStringList;root : TTreeNode;node : TTreeNode;beginTreeView1.Items.Clear;if Length(ListArr[0])>0 then beginl:=Length(ListArr[0])-1;lengthLA:=Length(ListArr);for i:=0 to l dobegin  spShem:=TStringList.Create;  spShem.Assign(ListArr[0,i]);  s:=spShem[0];  root:=TreeView1.Items.Add(nil,s);// Treeview1.Items.Add (nil,'Root Node');  root.ImageIndex:=0;  spShem.Free;  if Length(ListArr)>1 then begin  l3:=length(ListArr[1]);  if l3>0 then begin  if i<l3 then begin  spFormuls:=TStringList.Create;//формулы  spFormuls.Assign(ListArr[1,i]);  if spFormuls.count>0 then begin  l1:=spFormuls.count-1;  for i1:=0 to l1 do begin  s:=spFormuls[i1];   //node := TreeView1.Items.Item[i];//   node :=Treeview1.Items.AddChild(root,s);  l2:=length(ArrayOfArrayRec[i,i1])-1;///////////////////////////////////////// // if l2>-1 then begin  for i2:=0 to l2 do begin     VarRec:=ArrayOfArrayRec[i,i1,i2];     if VarRec.link=7 then begin////  node := TreeView1.Items.Item[i1/i2];     root:=Treeview1.Items.AddChild(node,VarRec.element);   end;   end;   end;    spFormuls.Free;  end;  end;   end;  end;  end;end;end;в общем первым и вторым узлом вставляются элементы из одного массива, а к ним дочерними с другого (первые два элемента это в общем как-бы разделы и формулы), а самыми низшими по иерархии - это переменные из формул (там уже всё парсер сделал, разложил). и такая беда, что когда я после формулы добавляю переменные с массива, то следующие формулы из другого массива пишутся к ним дочерними. Я уже и так крутил, и этак - белеберда получается, не могу понять как это сделать.
В общем мне надо, чтобы после переменных следующая формула достраивалась дочерним элементом к разделу, а она пристраивается дочерним к последней переменной. Беда.
Подскажите.
  Меня этот компонент очень сильно тормозит в работе. Заранее благодарен.

Andreii:
Разобрался в принципе, мне больше трёх ступеней иерархии не надо, к счастью, а так я-бы долго ещё разбирался.

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure TForm1.TTreeVievResize;varlengthLA,l,i,i1,l1,i2,l2,i3,l3:integer;s:string;spShem:TStringList;spFormuls:TStringList;root : TTreeNode;node : TTreeNode;beginTreeView1.Items.Clear;if Length(ListArr[0])>0 then beginl:=Length(ListArr[0])-1;lengthLA:=Length(ListArr);for i:=0 to l dobegin  spShem:=TStringList.Create;  spShem.Assign(ListArr[0,i]);  s:=spShem[0];  root:=TreeView1.Items.Add(nil,s);// Treeview1.Items.Add (nil,'Root Node');  root.ImageIndex:=0;  spShem.Free;  if Length(ListArr)>1 then begin  l3:=length(ListArr[1]);  if l3>0 then begin  if i<l3 then begin  spFormuls:=TStringList.Create;//формулы  spFormuls.Assign(ListArr[1,i]);  if spFormuls.count>0 then begin  l1:=spFormuls.count-1;  for i1:=0 to l1 do begin  s:=spFormuls[i1];   node :=Treeview1.Items.AddChild(root,s);  l2:=length(ArrayOfArrayRec[i,i1])-1;/////////////////////////////////////////  for i2:=0 to l2 do begin     VarRec:=ArrayOfArrayRec[i,i1,i2];     if VarRec.link=7 then begin //    root:=Treeview1.Items.AddChild(node,VarRec.element);     Treeview1.Items.AddChild(node,VarRec.element);   end;   end;   end;    spFormuls.Free;  end;  end;   end;  end;  end;end;end;Если кто-то знает как сделать для пяти ступеней иерархии подскажите, на всякий случай.

Andreii:
И ещё очень важный вопрос, дело в том, что этот компонент у меня выступает управляющим интерфейсом в программе, и мне в элементах на низжей ступени иерархии нужны тоже иконки - не знаю как добавить, пока так вот сделано, на первых двух, но без нижних - никак. Это программа по оптимизации. Сделал-бы на компоненте TGrapfConrol - но по нему вообще никакой информации. Поэтому решил остановится на TTreeWiev.

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure TForm1.TTreeVievResize;varlengthLA,l,i,i1,l1,i2,l2,i3,l3:integer;s:string;spShem:TStringList;spFormuls:TStringList;root : TTreeNode;node : TTreeNode;beginTreeView1.Items.Clear;if Length(ListArr[0])>0 then beginl:=Length(ListArr[0])-1;lengthLA:=Length(ListArr);for i:=0 to l dobegin  spShem:=TStringList.Create;  spShem.Assign(ListArr[0,i]);  s:=spShem[0];  root:=TreeView1.Items.Add(nil,s);// Treeview1.Items.Add (nil,'Root Node');  root.ImageIndex:=0;  spShem.Free;  if Length(ListArr)>1 then begin  l3:=length(ListArr[1]);  if l3>0 then begin  if i<l3 then begin  spFormuls:=TStringList.Create;//формулы  spFormuls.Assign(ListArr[1,i]);  if spFormuls.count>0 then begin  l1:=spFormuls.count-1;  for i1:=0 to l1 do begin  s:=spFormuls[i1];   node :=Treeview1.Items.AddChild(root,s);   node.ImageIndex:=1;  l2:=length(ArrayOfArrayRec[i,i1])-1;/////////////////////////////////////////  for i2:=0 to l2 do begin     VarRec:=ArrayOfArrayRec[i,i1,i2];     if VarRec.link=7 then begin     Treeview1.Items.AddChild(node,VarRec.element);// СЮЖА НУЖНО ТОЖЕ ИКОНКУ, НО НЕ ЗНАЮ КАК//     Child.ImageIndex:=3;    ТУТ ПО РАЗНОМУ ПРОБОВАЛ   end;   end;   end;    spFormuls.Free;  end;  end;   end;  end;  end;end;end

Andreii:
Нашёл отличное место где почитать http://msk.edu.ua/ivk/Informatika/Uch_posobiya/Programmirovanie/Lazarus/17_trees.htm
исправил код

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure TForm1.TTreeVievResize;varlengthLA,l,i,i1,l1,i2,l2,i3,l3:integer;s:string;spShem:TStringList;spFormuls:TStringList;root : TTreeNode;node : TTreeNode;varibl: TTreeNode;beginTreeView1.Items.Clear;if Length(ListArr[0])>0 then beginl:=Length(ListArr[0])-1;lengthLA:=Length(ListArr);for i:=0 to l dobegin  spShem:=TStringList.Create;  spShem.Assign(ListArr[0,i]);  s:=spShem[0];  root:=TreeView1.Items.Add(nil,s);// Treeview1.Items.Add (nil,'Root Node');  root.ImageIndex:=0;  spShem.Free;  if Length(ListArr)>1 then begin  l3:=length(ListArr[1]);  if l3>0 then begin  if i<l3 then begin  spFormuls:=TStringList.Create;//формулы  spFormuls.Assign(ListArr[1,i]);  if spFormuls.count>0 then begin  l1:=spFormuls.count-1;  for i1:=0 to l1 do begin  s:=spFormuls[i1];   node :=Treeview1.Items.AddChild(root,s);   node.ImageIndex:=1;  l2:=length(ArrayOfArrayRec[i,i1])-1;/////////////////////////////////////////  for i2:=0 to l2 do begin     VarRec:=ArrayOfArrayRec[i,i1,i2];     if VarRec.link=7 then begin   varibl :=Treeview1.Items.AddChild(node,VarRec.element);   varibl.ImageIndex:=3;     //     Treeview1.Items.AddChild(node,VarRec.element);// СЮЖА НУЖНО ТОЖЕ ИКОНКУ, НО НЕ ЗНАЮ КАК    end;   end;   end;    spFormuls.Free;  end;  end;   end;  end;  end;end;end;                                  результат https://drive.google.com/open?id=1k-k29iaoZ7ReH-yfWsDqb-n53M2VSWxv

Navigation

[0] Message Index

Go to full version