Главная страница
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.024 c
14-90096
K.o.Z
2003-11-04 01:53
2003.11.27
HTML


8-90010
JohnJ
2003-07-30 01:17
2003.11.27
Небольшой и, должно быть, лёгкий вопросик по DelphiX


3-89692
Sveta
2003-11-06 08:46
2003.11.27
Перенос записей из DBF в IB


6-90031
k@rt
2003-10-01 21:54
2003.11.27
TidPOP3


3-89716
chtr
2003-11-10 10:23
2003.11.27
Как программно сжать базу mdb?