Главная страница
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.02 c
14-90082
Проходящи_й_
2003-11-05 10:40
2003.11.27
100$ за то, кто узнает sn delphi, версию, систему, sn из exe.


3-89737
pashaz
2003-11-05 01:31
2003.11.27
Редактирование DBGrid


1-89877
Quit
2003-11-15 18:18
2003.11.27
Строку наоборот


14-90116
Дедов Дмитрий
2003-11-03 21:36
2003.11.27
Опрос


1-89990
Dmitriy M. Volkov
2003-11-17 14:15
2003.11.27
FindNext - поиск заново