![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сортировка колонки в 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. Как должны быть отсортированы числа?