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

Вниз

Сортировка в TListView через stdcall функцию   Найти похожие ветки 

 
И. Павел ©   (2010-09-21 09:18) [0]

Здравствуйте.

Использую несколько 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;


 
MBo ©   (2010-09-21 10:03) [1]

Похоже, глюк.
Во время сортировки иногда неверно определяется Checked.


 
icWasya ©   (2010-09-21 11:46) [2]

А вся сортировка происходит в недрах Windows.


 
И. Павел ©   (2010-09-21 13:34) [3]

MBo ©, icWasya ©
Спасибо. На всякий случай я сделал сортировку только по Caption и SubString[0]. Хотя, вроде бы, с двумя колонками сортировка идет нормально, но не понятно - как число колонок может повлиять на правильность сортировки :)


 
icWasya ©   (2010-09-21 16:15) [4]

А если отсортировать дважды, то вроде бы ситуация исправляется.


 
И. Павел ©   (2010-09-21 16:25) [5]

> А если отсортировать дважды, то вроде бы ситуация исправляется.

Это если мало пунктов выбрано (checked = true). А если много - для сортировки требуется еще большее число вызовов - постепенно все встает на место.



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

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

Наверх




Память: 0.48 MB
Время: 0.009 c
2-1285073326
Jason Bobs
2010-09-21 16:48
2010.12.12
Из строки выудить число


15-1283151335
кефирчик 3.2
2010-08-30 10:55
2010.12.12
А правда, что...


15-1283718575
Юрий
2010-09-06 00:29
2010.12.12
С днем рождения ! 6 сентября 2010 понедельник


15-1283203920
TIF
2010-08-31 01:32
2010.12.12
Google не работает?!


2-1284621331
JohnKorsh
2010-09-16 11:15
2010.12.12
Можно ли средствами Delphi создать WiFi Ad-Hock сеть?