Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.12.12;
Скачать: [xml.tar.bz2];

Вниз

Сортировка в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.003 c
15-1283856091
бумбум
2010-09-07 14:41
2010.12.12
Резервное копирование базы MS SQL 2000


2-1284811932
Arkadi4
2010-09-18 16:12
2010.12.12
hint со значением ячеек gbrid


2-1285073326
Jason Bobs
2010-09-21 16:48
2010.12.12
Из строки выудить число


15-1283324495
Dennis I. Komarov
2010-09-01 11:01
2010.12.12
XML


2-1284816217
KuJIoBaT
2010-09-18 17:23
2010.12.12
2 формы на делфи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский