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

Вниз

Сортировка   Найти похожие ветки 

 
Сергей Г.   (2003-12-05 16:23) [0]

Здравствуйте, Мастера! Помогите решить одну задачку: есть TreeView, который выполняет роль файл-менеджера. Нужно отсортировать его содержимое по шаблону: папки, файлы. Т.е, чтобы папки были вверху узла, а файлы внизу. Заранее спасибо всем.


 
Serg   (2003-12-05 16:25) [1]

а как ты его застраиваешь? если ручками - то проще на этом этапе и отсортировать.


 
Daemys ©   (2003-12-05 16:26) [2]

думаем, задача тривиальная


 
TUser ©   (2003-12-05 16:27) [3]

Когда добавляешь новые ноды - добавляй их в нужном тебе порядке.


 
Сергей Г.   (2003-12-05 16:43) [4]

2 Serg
> а как ты его застраиваешь?

При раскрытии нодов. Т.е при загрузке создается список с дисками, при последующем раскрытии нода пробегаемся по папкам и файлам, добавляем их к ноду.

2 TUser
> Когда добавляешь новые ноды - добавляй их в нужном тебе
> порядке.

Спасибо что подсказал. Я бы сам не догадался....


 
имя   (2003-12-05 17:23) [5]

Удалено модератором


 
PVOzerski ©   (2003-12-05 18:11) [6]

>нода пробегаемся по папкам и файлам, добавляем их к ноду.
А ты либо "пробегайся" два раза с разными атрибутами файлов в маске поиска, либо "пробегайся" один раз, но сразу рассортировывай согласно возвращенным атрибутам файлов их на 2 списка.


 
hooky-mars   (2003-12-05 18:15) [7]

Эта задча еще не такая сложная, а вот что делать если на до отсартировать по алфавиту и притом сохраня структуру( в верху папки, внизу файлы)


 
Wizard_Ex ©   (2003-12-05 18:43) [8]

Попробуй так:

procedure Tfrm_Main.TreeViewCompare_Caption(Sender: TObject; Node1,
Node2: TTreeNode; Data: Integer; var Compare: Integer);
begin
inherited;
{а тут продумай логику, типа
если Node1-директория и Node2 Директория,то
begin
Compare:=AnsiCompareStr(Имя директории1,Имя директории2);
Exit;
end;
если Node1-директория и Node2 неДиректория,то
begin
Compare:=-1;
Exit;
end;
если Node1-недиректория и Node2 неДиректория,то
begin
Compare:=AnsiCompareStr(Имя файла1,Имя файла2);
Exit;
end;
end;

function DefaultCDTreeViewSort(Node1, Node2: TTreeNode; lParam: Integer): Integer; stdcall;
begin
with Node1 do
if Assigned(TTreeView(TreeView).OnCompare) then
TTreeView(TreeView).OnCompare(TreeView, Node1, Node2, lParam, Result)
else Result := lstrcmp(PChar(Node1.Text), PChar(Node2.Text));
end;

procedure Tfrm_Main.SortTreeView;
var
SortCB: TTVSortCB;
I : integer;

procedure SortChildren( ANode : TTreeNode);
var I : integer;
begin
if ANode.HasChildren then
for I:=0 to (ANode.Count-1) do SortChildren(ANode.Item[I]);
ANode.CustomSort(nil, 0);
end;

begin
TreeView.OnCompare:=TreeViewCompare_Caption;
with SortCB do
begin
lpfnCompare := @DefaultCDTreeViewSort;
hParent := TVI_ROOT;
lParam := 0;
TreeView_SortChildrenCB(TreeView.Handle, SortCB, 0);
for I:=0 to TreeView.Items.Count-1 do
if TreeView.Items[I].Level=0 then SortChildren(TreeView.Items[I]);
end;
end;


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


 
Wizard_Ex ©   (2003-12-05 18:48) [9]

Елки-палки пропустил маненько

procedure Tfrm_Main.TreeViewCompare_Caption(Sender: TObject; Node1,
Node2: TTreeNode; Data: Integer; var Compare: Integer);
begin
inherited;
{а тут продумай логику, типа
если Node1-директория и Node2 Директория,то
begin
Compare:=AnsiCompareStr(Имя директории1,Имя директории2);
Exit;
end;
если Node1-директория и Node2 неДиректория,то
begin
Compare:=-1;
Exit;
end;
если Node1-недиректория и Node2 Директория,то
begin
Compare:=1;
Exit;
end;
если Node1-недиректория и Node2 неДиректория,то
begin
Compare:=AnsiCompareStr(Имя файла1,Имя файла2);
Exit;
end;
end;


Пробуй.


 
Сергей Г.   (2003-12-05 19:37) [10]

Пойду попробую...


 
Сергей Г.   (2003-12-05 20:44) [11]

Зароботало! Огромное спасибо всем!



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

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

Наверх




Память: 0.49 MB
Время: 0.029 c
3-61948
Vlad
2003-11-26 18:33
2003.12.19
Кодировка в IB


7-62292
Andrew Kosovich
2003-10-12 20:22
2003.12.19
Дать/прочитать сигнал на конкретный пин (контакт) LPT


14-62267
slivka
2003-11-27 16:47
2003.12.19
Интернет телефония !


1-62150
uhhax
2003-12-07 15:47
2003.12.19
Алгоритм шифрования RC4


14-62206
TriX
2003-11-26 18:13
2003.12.19
HELP ME !!!!!!!!!!!!!