Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сортировка колонки в ListView [D7, WinXP]


dDan ©   (2005-12-05 20:44:00) 

Возникла проблема сортирует но выдает чушь какуюто
Делаю так:
procedure TForm1.ListColumnClick(Sender: TObject; Column: TListColumn);
..........

function CustomDateSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;
begin
result:=0;
if strtodatetime(item1.SubItems[0])>strtoint(item2.SubItems[0]) then
Result :=1 else
if strtodatetime(item1.SubItems[0])<strtoint(item2.SubItems[0]) then
Result :=-1;
end;

........
List.CustomSort(@CustomDateSortProc, 0)


Может кто подскажет лучшие методы сортировки чисел


begin...end   (2005-12-06 21:47:00) [1]

> dDan   (06.12.05 20:49) [9]
> Да нет там целые числа

А если там целые числа, то [3] должно работать.


dDan   (2005-12-06 20:49:00) [2]

Да нет там целые числа чего к названию о функции такое внимание :) Вроде разобрался.


MU   (2005-12-06 15:24:00) [3]

Извините....
function CustomDateSortProc(Item1, Item2: TListItem; ParamSort: Integer): Integer;
begin
Result := Sign(
                     StrToDateTime(Item1.SubItems[0]) -
                     StrToDateTime(Item2.SubItems[0])
                     );
end


MU   (2005-12-06 15:23:00) [4]

Если там даты и время(?) в строковом выражении, то, может
function CustomDateSortProc(Item1, Item2: TListItem; ParamSort: Integer): Integer; begin
Result := Trunc(
                     StrToDateTime(Item1.SubItems[0]) -
                     StrToDateTime(Item2.SubItems[0])
                     );
end


begin...end   (2005-12-06 12:27:00) [5]

> dDan   (05.12.05 22:31) [4]

Значит, в столбце -- не целые цисла.


Германн   (2005-12-06 02:04:00) [6]


> dDan   (05.12.05 20:44)  
>
> Возникла проблема сортирует но выдает чушь какуюто
> Делаю так:
> procedure TForm1.ListColumnClick(Sender: TObject; Column:
>  TListColumn);
> ..........
>
> function CustomDateSortProc(Item1, Item2: TListItem; ParamSort:
>  integer): integer; stdcall;
> begin
> result:=0;
> if strtodatetime(item1.SubItems[0])>strtoint(item2.SubItems[0])
> then
> Result :=1 else
> if strtodatetime(item1.SubItems[0])<strtoint(item2.SubItems[0])
> then
> Result :=-1;
> end;
>
> ........
> List.CustomSort(@CustomDateSortProc, 0)
>
>
> Может кто подскажет лучшие методы сортировки чисел


О каких "числах" ты тут спрашиваешь? О календарных или о математических?

Если о календарных, то тут, имхо присутствует ещё и время, а оно "не вписывается" в сравнениях с integer.


dDan   (2005-12-05 22:31:00) [7]

Твоя функция вообще отказываеться работать


begin...end   (2005-12-05 22:05:00) [8]

> dDan   (05.12.05 21:58) [2]

Так что там, в столбце? Целые числа? Я проверил (только StrToDateTime заменил на StrToInt) -- всё нормально работает. Поскольку у Вас Delphi 7, можно записать код короче (но в uses нужно будет добавить модуль Math):

function CustomDateSortProc(Item1, Item2: TListItem; ParamSort: Integer): Integer; stdcall;
begin
 Result := CompareValue(StrToInt(Item1.SubItems[0]), StrToInt(Item2.SubItems[0]))
end


dDan   (2005-12-05 21:58:00) [9]

Да просто так функцию назвал по возрастанию должны быть отсортированны


begin...end   (2005-12-05 20:59:00) [10]

> dDan   (05.12.05 20:44)

Функция написана нормально. Только непонятно, почему результат StrTo DateTimeсравнивается с результатом StrTo Int. Как должны быть отсортированы числа?


Наверх

Титульная страница Поиск, карта сайта Написать письмо