Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сотрировка в ListView

5.3K
20 марта 2004 года
Akfim
6 / / 12.03.2004
Земляне, помогите написать сортировку по столбцам в ListView CustomSort-ом плиз, заранее спасобо.
5.9K
21 марта 2004 года
Anry
15 / / 01.03.2004
Цитата:
Originally posted by Akfim
Земляне, помогите написать сортировку по столбцам в ListView CustomSort-ом плиз, заранее спасобо.


Итак, насколько я понял, ты хочешь СОБСТВЕННУЮ сортировку по колонкам втюхать,
делается это так (всё что ниже - копия из Борландовского хелпа):

This example shows how to use the OnColumnClick and OnCompare events of a list
view to let users sort the columns in a report-style list view by clicking on the
column headers. This requires a global variable to keep track of the column that was clicked:

int ColumnToSort = 0;

The OnColumnClick event handler sets the global variable to indicate the column to sort and calls AlphaSort:

// Это хендл для Event ColumnClick

void __fastcall TForm1::ListView1ColumnClick(TObject *Sender, TListColumn *Column)

{
ColumnToSort = Column->Index; // Это на какой колонке кликнули
((TCustomListView *)Sender)->AlphaSort(); // В это месте можно просто: ListView1->AlphaSort();
}


The OnCompare event handler causes the list view to sort on the selected column:

void __fastcall TForm1.ListView1Compare(TObject *Sender, TListItem *Item1, TListItem *Item2, int Data, int &Compare)
{
if (ColumnToSort == 0)
Compare = CompareText(Item1->Caption,Item2->Caption); // Здесь будет твоя функция сравнения элементов
else
{
int ix = ColumnToSort – 1;
Compare =
CompareText(Item1->SubItems->Strings[ix], Item2->SubItems->Strings[ix]); // Здесь тоже
}
}

Note: This OnCompare event handler uses the global CompareText function. An application
may want to use AnsiCompareText, CompareStr, or AnsiCompareStr instead, depending on whether
the comparison should be case-sensitive and whether the locale should be considered.

А вообщем-то вся эта хрень работает крайне медленно (если элементов более 3-5 тысяч), поэтому для
разрешения всего этого можно: либо писать в MS Visual C++ (для не сильно замороченных приложений)
либо впендюрить в Борландовский элемент TListView собственную реализацию вывода и хранения элементов
либо создать просто API элемент в форме. Кстати виндовый ListView попроще будет в управлении и
побыстрей, т.к. ты не будешь создавать (как Борланд) чудовищные списки хранимых строк, на
заполнение которых уходит львиная доля времени (при 100000 х 3 элементов загрузка TListView
длится на машине с 2200 ГГц и 512 Мб примерно 10 минут !!!!!!, в протововес, родной виндовый
ListView через Callback - не более 1 минуты).

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог