![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нужно отсортировать по возрастанию дат ветви TTreeView [D6, Win95/98, WinXP]
Song © (2002-04-19 13:29:00)Поясню как:
Ветка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 позицию.
Буду благодарен за совет.
Song (2002-04-19 17:56:00) [1]Век живи, век учись....
MBo (2002-04-19 17:53:00) [2]>Song
для ListView и StringList тоже такое есть
Song (2002-04-19 17:07:00) [3]Спасибо большое. Я и не подозревал что есть такое универсальное средство. Я уже был почти готов писать какую-нибудь рекурсию. :)
Дмитрий Баранов (2002-04-19 15:45:00) [4]это функция, принимающая в качестве параметра адрес другой функции, которая в свою очередь определяет порядок сортировки.
MBo (2002-04-19 15:45:00) [5]да, для этого метод custmsort и сделан.
Дмитрий Баранов (2002-04-19 15:45:00) [6]это функция, принимающая в качестве параметра адрес другой функции, которая в свою очередь определяет порядок сортировки.
Song (2002-04-19 15:40:00) [7]Значит здесь мы перекрываем стандратный метод сортировки класса TTreeView? Что такое CustomSort? Спрашиваю не из плохого умысла, просто не понятно.
MBo (2002-04-19 15:34:00) [8]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:33:00) [9]Спасибо. Только не понял. Извините. И как это мне использовать?
Пример вызова функции?
MBo (2002-04-19 14:40:00) [10]у меня в 1-ом if можно выкинуть and (Node2.Level<2)
и Result:=0;
и как у Wasp вместо 2 if
Result:=Round(StrToDate(Node1.Text)-StrToDate(Node2.Text));
Wasp (2002-04-19 14:27:00) [11]
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:23:00) [12]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;