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

Вниз

TreeView программно   Найти похожие ветки 

 
mmmaloy ©   (2003-11-16 22:09) [0]

В общем ситуация имею массив значений
FieldVal:array[0..2] of String;
типа:
AA1 BB1 CC1
AA1 BB1 CC2
AA1 BB2 CC3
AA1 BB2 CC4
AA2 BB1 CC5
AA2 BB4 CC6
...

Надо сделать дерево типа:
AA1\BB1\CC1
CC2
BB2\CC3
CC4
AA2\BB1\CC5
\BB4\CC6

Чето не могу догнать как.


 
Мыш ©   (2003-11-16 22:55) [1]

Я вот как раз такое делал недавно. Прошу мастеров не кидать особо камнями, вобщем-то не претендую на верность подхода, главное, что это работает.

Если чего не получится,- мыль, я не адаптировал, прям из программы выдрал, запросто мог забыть чего.

procedure TForm1.CreateTree(ATree:TTreeview);
var
i,j,Index,FirstNullLevel,ParentIndex,EndIndex:integer;
ThemePath:String;
DirsPaths:TstringList;
begin
ATree.Items.Clear;

DirsPaths:=TstringList.Create;
query1.First;/
While not query1.eof do //
begin
ThemePath:=query1.fieldbyname("Subj").AsString; //
DirsPaths.Assign(DirsFromPath(ThemePath));
i:=0;
EndIndex:=ATree.Items.Count-1;
ParentIndex:=-1;
while i<DirsPaths.Count do
begin
j:=1;
Index:=nodeexists(ATree,dirspaths[i],i,ParentIndex,EndIndex);
if Index<>-1 then
begin
ParentIndex:=index;
end
else
begin
if (index=-1) and (i=0) {and (tv1.Items[parentindex].Level=0))}
then
begin
ParentIndex:=ATree.Items.AddChild(nil,dirspaths[i]).AbsoluteIndex
end
else
ParentIndex:=ATree.Items.AddChild(ATree.Items[ParentIndex],dirspaths[i]).AbsoluteIndex;
EndIndex:=GetFirstLevelNodeIndex(Atree,ParentIndex+1,i);
end;

inc(i);
end;

query1.Next;//
end;
DirsPaths.Free;
end;

function TForm1.GetFirstLevelNodeIndex(Atree:TTreeView;AStIndex,ALevel: integer): integer;
var
i:integer;
begin
i:=AStIndex;
while i<Atree.Items.Count do
begin
if Atree.Items[i].Level=ALevel then
begin
result:=i;
exit;
end;
inc(i) ;
end;
result:=Atree.Items.Count-1;
end;


 
mmmaloy ©   (2003-11-16 22:57) [2]

Спасибо буду пробовать


 
мыш ©   (2003-11-16 23:47) [3]

Так и есть, забыл функцию:
function TForm1.NodeExists(ATreeview: TTreeView; ANodeCaption: string;
ALevel,AstIndex,AEndIndex:integer): integer;
var
i:integer;
begin
i:=AstIndex+1;
while i<=AEndIndex do
begin
if (ATreeview.Items[i].Level=Alevel) and
(ATreeview.Items[i].Text=ANodeCaption)
then
begin
result:=ATreeview.Items[i].absoluteindex;
exit;
end;
inc(i);
end;
result:=-1;
end;



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

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

Наверх




Память: 0.47 MB
Время: 0.025 c
1-89978
madm
2003-11-13 18:08
2003.11.27
RichEdit->FindText() Проблемы


3-89733
jonni
2003-11-09 17:28
2003.11.27
Выборка из базы


3-89758
vov-
2003-11-07 21:36
2003.11.27
исключительные ситуации


1-89845
WCM
2003-11-16 18:51
2003.11.27
Создание объектов


14-90111
Layner
2003-11-04 08:37
2003.11.27
offtop: А почему в многопоточном прил., написанном на Delphi, при