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

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

Сортировка итемов в ListView, созданном на WinApi. [D6, WinXP]


DVM ©   (2003-03-13 15:15:00) 

Как реализовать? То, что есть сообщение и соответствующая макрокоманда мне известно, но они требуют указать некую функцию (обратного вызова?) которая и должна сравнивать итемы и возвращать -1, 0, 1, в зависимости от результата сравнения.
Кто делал подобное? Приведите, если можно, пример такой функции (итемы надо сортировать по алфавиту).
Заранее спасибо.


Suntechnic   (2003-03-13 16:36:00) [1]

>DVM ©
Получается если при добавлении итема в список в LParam итема ничего не положить, то и отсортировать итемы будет нельзя?


Именно так! Более того lParam это единственное место куда можно положить данные ассоциированные с item-ом, поэтому lParam очень широко используется и не только для сортировки.


DVM   (2003-03-13 16:23:00) [2]

Спасибо. Мне именно назначение LParam итема было непонятно.

Получается если при добавлении итема в список в LParam итема ничего не положить, то и отсортировать итемы будет нельзя?


Suntechnic   (2003-03-13 15:51:00) [3]

Я что-то никак не пойму, что я должен сравнивать (и как) в своей функции, если ей передаются некие LParam1, Lparam2 (идентифицирующие итемы, вероятно). И как зная эти идентификаторы, перейти к итемам?
Читаем хелп:
The lParam1 parameter is the 32-bit value associated with the first item being compared; and the lParam2 parameter is the value associated with the second item. These are the values that were specified in the lParam member of the items" LV_ITEM
structure when they were inserted into the list.

Ведь эта функция, я полагаю, может быть одна на все приложение, в котором несколько ListView.

Всё зависит от того что сравнивать в ф-ции и что присваивать значению lParam. Если алгоритмя один и тот же и lParam это те же данные, то можно использовать одну ф-цию для всех ListView, но обычно это делается не так... В lParam при добавлении item в ListView, обычно кладётся указатель на данные этого itema (в самом простом случае это может быть отображаемое имя, но как правило это указатель на объект который представлен item-ом). Затем в CompareFunc ты извлекаешь данные по этим указателям и сравниваешь их возвращая одно из значений (The comparison function must return a negative value if the first item should precede the second, a positive value if the first item should follow the second, or zero if the two items are equivalent.)


DVM   (2003-03-13 15:41:00) [4]

Я что-то никак не пойму, что я должен сравнивать (и как) в своей функции, если ей передаются некие LParam1, Lparam2 (идентифицирующие итемы, вероятно). И как зная эти идентификаторы, перейти к итемам? Если их искать, то непонятно как определить тот ListView откуда они. Ведь эта функция, я полагаю, может быть одна на все приложение, в котором несколько ListView.


Suntechnic   (2003-03-13 15:29:00) [5]

А в чём проблема? Callback ф-цию написать?


Наверх

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