![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сортировка в TListView через stdcall функцию
И. Павел © (2010-09-21 09:18:00)Здравствуйте.
Использую несколько ListView (ViewStyle = vsReport). При нажатии на колонку сортирую список спомощью метода CustomSort. Но список сортируется правильно только если ListVirew имеет больше одного столбца (т.е. SubItems.Count > 0). Иначе строки с установленным флажком (Checked = true) отображаются не первыми, а в перемешку. Но стоит только добавить новый столбец - и все работает правильно.
Подскажите, пожалуйста, с чем это связано? Может быть я что-то написал не так, или все же это особенность самого объекта?
Заранее спасибо.
PS: Вот код вызова сортировки и функции сравнения:
LV.CustomSort(@SortWithCheck, 0);
function SortWithCheck(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;
begin
if (Item1.Checked) and (not Item2.Checked) then result := -1
else if (not Item1.Checked) and (Item2.Checked) then result := 1
else if Item1.Caption > Item2.Caption then result := -1
else if Item2.Caption > Item1.Caption then result := 1
else if (Item1.SubItems.Count > 0) and (Item1.SubItems[0] > Item2.SubItems[0]) then Result := 1
else if (Item1.SubItems.Count > 0) and (Item2.SubItems[0] > Item1.SubItems[0]) then Result := -1
else result := 0;
end;
И. Павел (2010-09-21 16:25:00) [1]> А если отсортировать дважды, то вроде бы ситуация исправляется.
Это если мало пунктов выбрано (checked = true). А если много - для сортировки требуется еще большее число вызовов - постепенно все встает на место.
icWasya (2010-09-21 16:15:00) [2]А если отсортировать дважды, то вроде бы ситуация исправляется.
И. Павел (2010-09-21 13:34:00) [3]MBo ©, icWasya ©
Спасибо. На всякий случай я сделал сортировку только по Caption и SubString[0]. Хотя, вроде бы, с двумя колонками сортировка идет нормально, но не понятно - как число колонок может повлиять на правильность сортировки :)
icWasya (2010-09-21 11:46:00) [4]А вся сортировка происходит в недрах Windows.
MBo (2010-09-21 10:03:00) [5]Похоже, глюк.
Во время сортировки иногда неверно определяется Checked.