Форум: "Основная";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];
ВнизСортировка Найти похожие ветки
← →
Сергей Г. (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c