Главная страница
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.017 c
1-62007
MAC
2003-12-07 01:56
2003.12.19
Как получить список всех файлов в определённой директории ?


1-62074
BillyJeans
2003-12-09 09:24
2003.12.19
ListView в стиле vsReport...


14-62232
Е-Моё имя
2003-11-25 11:47
2003.12.19
Курение предохраняет от шизофрении


1-62132
Mag
2003-12-07 22:19
2003.12.19
Отключения


3-61960
gestern
2003-11-27 01:33
2003.12.19
IBQuery и IBUpdateSQL