Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-62211
Думкин
2003-11-26 05:31
2003.12.19
С днем рождения! 26 ноября.


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


3-61927
ksan
2003-11-28 09:31
2003.12.19
просмотр RDB$


1-62112
Psi-factor
2003-12-08 10:22
2003.12.19
Webbrowser открыть страницу во фрейме


1-62094
yurez
2003-12-09 14:13
2003.12.19
Как передать в ячейку Excel текст с





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский