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