Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];




Вниз

Нужно отсортировать по возрастанию дат ветви TTreeView 


Song   (2002-04-19 13:29) [0]

Поясню как:

Ветка1
02.12.2001 - ветвь уровня 1
03.03.2002
04.05.2000
Ветка2
Ветка3
01.01.2001 - ветвь уровня 2
02.02.2000
09.10.2001
08.05.1997

Отсортировать по возрастанию дат ветки уровней 1 и 2 в своих уровнях, не глобально по дереву а только в своих уровнях.

Ветвей в дереве может быть сколько угодно и в любых комбинациях.
Ветки с датами, точна также имеют (но могут и не иметь) свои подветви.
Постоянным остаётся только одно: даты по которым нужно отсортировать, - только в ветвях 1 и 2 уровня и занимают в тексте ветки с 1 по 8 позицию.
Буду благодарен за совет.



MBo   (2002-04-19 14:23) [1]

function CustomSortProc(Node1, Node2: TTreeNode; Data: Integer): Integer; stdcall;
begin
Result:=0;
if (Node1.Level<2) and (Node2.Level<2) and (Node1.Parent=Node2.Parent) then
if StrToDate(Node1.Text)>StrToDate(Node2.Text) then Result:=1
else if StrToDate(Node1.Text)<StrToDate(Node2.Text) then Result:=-1;
end;



Wasp   (2002-04-19 14:27) [2]


function MySortFunc(lParam1, lParam2, lParamSort: Longint): Integer;
begin
Result := Round(StrToDate(TTreeNode(lParam1).Text)-StrToDate(TTreeNode(lParam1).Text));
end;

TreeView1.CustomSort(MySortFunc,0);



MBo   (2002-04-19 14:40) [3]

у меня в 1-ом if можно выкинуть and (Node2.Level<2)
и Result:=0;
и как у Wasp вместо 2 if
Result:=Round(StrToDate(Node1.Text)-StrToDate(Node2.Text));



Song   (2002-04-19 15:33) [4]

Спасибо. Только не понял. Извините. И как это мне использовать?
Пример вызова функции?



MBo   (2002-04-19 15:34) [5]

function CustomSortProc(Node1, Node2: TTreeNode; Data: Integer): Integer; stdcall;
begin
Result:=0;
if (Node1.Level<2) and (Node1.Parent=Node2.Parent) then
Result:=Round( StrToDate(Node1.Text)-StrToDate(Node2.Text));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TreeView1.CustomSort(@CustomSortProc, 0);
end;



Song   (2002-04-19 15:40) [6]

Значит здесь мы перекрываем стандратный метод сортировки класса TTreeView? Что такое CustomSort? Спрашиваю не из плохого умысла, просто не понятно.



Дмитрий Баранов   (2002-04-19 15:45) [7]

это функция, принимающая в качестве параметра адрес другой функции, которая в свою очередь определяет порядок сортировки.



MBo   (2002-04-19 15:45) [8]

да, для этого метод custmsort и сделан.



Дмитрий Баранов   (2002-04-19 15:45) [9]

это функция, принимающая в качестве параметра адрес другой функции, которая в свою очередь определяет порядок сортировки.



Song   (2002-04-19 17:07) [10]

Спасибо большое. Я и не подозревал что есть такое универсальное средство. Я уже был почти готов писать какую-нибудь рекурсию. :)



MBo   (2002-04-19 17:53) [11]

>Song
для ListView и StringList тоже такое есть



Song   (2002-04-19 17:56) [12]

Век живи, век учись....




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.022 c
14-2684           Alex_LG               2002-03-25 15:17  2002.05.02  
Вопрос не по Дельфи а по С++ :0)


14-2672           Сержик                2002-03-27 08:18  2002.05.02  
Как обозвать компоненты по-русски?


4-2728            guliver               2002-02-28 01:43  2002.05.02  
WM_GETTEXT, WM_SETTEXT


3-2489            Николай Бондаренко    2002-04-11 12:15  2002.05.02  
ADO и Oracle (как ускорить установление соединения с БД)


1-2544            Zool                  2002-04-17 18:25  2002.05.02  
Народ, вопрос...............