Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.02;
Скачать: CL | DM;

Вниз

Нужно отсортировать по возрастанию дат ветви 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]

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



Страницы: 1 вся ветка

Текущий архив: 2002.05.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
1-2542
roman001
2002-04-18 18:32
2002.05.02
TStringGrid.Objects


1-2575
Демон
2002-04-18 19:44
2002.05.02
Про RichEdit


1-2546
anod
2002-04-18 21:22
2002.05.02
В чем ошибка?


1-2581
Kolyan
2002-04-19 16:42
2002.05.02
Как перевести базу под SQL Server?


3-2472
Леонид
2002-04-11 11:09
2002.05.02
Поле просмотра в TDBGrid