Форум: "KOL";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];
ВнизSort TKOLListView Найти похожие ветки
← →
KOLBoss © (2007-07-06 10:28) [0]Доброе время суток подскажите пожалуйста как отсортировать числа
в колонке для TKOLListView
нашёл процедуру SortData пример к ней SortIntegerArray
но всеравно масив сортируется как строки
вот накидал процедурку мож у ково посвежее мысли
procedure SortColInt(LV: TKOLListView; Col: Integer);
var
lv1,lv2,x: integer;
begin
SortData
lv1 := LV.Count-1;
repeat
begin
for lv2 := 0 to LV.Count-1 do
if (str2int(LV.LVItems[lv1,Col]) < str2int(LV.LVItems[lv2,Col])) and (lv1 > lv2) then
begin
LV.LVItemInsert(lv2,LV.LVItems[lv1 ,0]);
for x := 1 to LV.LVColCount-1 do
LV.LVItems[lv2,x]:= LV.LVItems[lv1 +1,x];
LV.LVDelete(lv1 +1);
inc(lv1);
break;
end;
end;
dec(lv1);
until lv1 = 0;
end;
← →
vpbar (2007-07-06 10:55) [1]Ну во-первых читаем справку
_____________
3.14.8. Сортировка и поиск (list view)
LVSort - запускает сортировку элементов (данный метод работает, если в операционной системе установлен Microsoft Internet Explorer версии 5.0 или выше, см. так же LVSortData);
LVSortData - начинает сортировку элементов. В отличие от метода LVSort, работает во всех системах Windows, начиная с Windows 95, но обработчик события OnCompareLVItems получает не индексы сравниваемых элементов, а поле LVItemData этих элементов;
OnСompareLVItems - событие для сравнения двух элементов во время сортировки (LVSort и LVSortData). См. описание LVSortData об особенностях в принимаемых параметрах;
LVSortColumn( i ) - выполняет сортировку по колонке. Работает для ОС Windows 98 и 2000 (и выше, разумеется), и обеспечивает автоматическую сортировку строк в порядке лексикографического упорядочивания текста в заданной колонке;
_______________________________
← →
KOLBoss © (2007-07-06 11:02) [2]Спасибо я это читал.
но я совсем начинающий мне всеравно не понятно
мнеб примерчик я понел мне нужно событие OnCompareLVItems
я пробывал но там Idx всегда ноль
и мне надо именно Числа сортировать
а строки сортировать два пальца счёлкнуть
procedure TForm1.ListView1ColumnClick(Sender: PControl; Idx: Integer);
begin
ListView1.LVSortColumn(Idx);
end;
← →
vpbar (2007-07-06 11:03) [3]Ну и так уж и быть отвечу до конца.
....................
///сортировка
ListView1.OnCompareLVItems:=compare;
ListView1.LVSort;
........................
function TForm1.compare(Sender: PControl; Idx1, Idx2: Integer): Integer;
const COL=0;
begin
with Sender^ do
result:=str2int( LVItems[Idx1,COL])-str2int( LVItems[Idx2,COL]);
end;
.....................
Чтобы отсортировать определенную колонку меняете COL
← →
vpbar (2007-07-06 11:07) [4]>>Спасибо я это читал.
Эт хорошо.
Но тогда почему вопросы?
LVSortData - сортрует Data, т.е. передает в OnCompareLVItems не индексы сравниваемых элементов, а поле LVItemData этих элементов. И если оно 0 то и Idx1(2) тоже 0.
Как видите опять цитирую книгу о KOL.
← →
KOLBoss © (2007-07-06 11:31) [5]Ухты! Работает
Большое спасибо!
А про OnCompareLVItems всеравно не понял у меня почемуто в любом случае Idx1 и Idx2 = 0
← →
vpbar (2007-07-06 11:48) [6]>>KOLBoss
Пожалуйста.
Даже в том примере что я дал? Ну тогда хз. Вероятно глюк отладчика, или еще чтото. Ибо если сортирует то в compare должны передаваться нормальные значения.
← →
KOLBoss © (2007-07-06 12:12) [7]Не ты меня видемо неправельно понял или я неправельно объяснил.
я про LVSortData
незнаю как посмотреть поле Data.
я так понемаю поле это ListView1.LVItems[i1,i2];
пробывал с опциями voOwnerData так у меня воще ListView пустой
← →
vpbar (2007-07-06 12:51) [8]Ооо! Читаем Книгу о KOL.
LVItems[ i, j ] и LVItemsW[ i, j ] - свойства для доступа к тексту элементов и подэлементов (колонок). Колонка j с индексом 0 - это сам элемент, индексы прочих колонок начинаются с единицы;
lvoOwnerData - список является виртуальным, т.е. изначально не хранит сам никакие данные, а в обработчике события OnLVData получает их пользовательского кода;
// Аналогично демке Demos\Virtual Listview из папки с Делфёй
LVAdd( s, ii, state, sii, oii, data )
/// добавление элемента в список. Data - это оно и есть
//ИЛИ
LVItemData[ i ] - ассоциирует с элементом некоторое число (или указатель);
//Свойство для доступа к Data
LVSetItem( i, j, s, ii, state, sii, oii, data ) - позволяет назначить для элемента или любого его подэлемента (колонки) указанные атрибуты (текст, пиктограмму, состояние, и т.д.) - за один вызов. Если индекс подэлемента (колонки) равен 0, то имеется в виду сам элемент, а с индекса 1 начинают нумероваться колонки (и для них параметр data игнорируется);
// Все кроме коментариев цитаты из книги.
И еще раз, если Вы сортируете через LVSortData - сортируется Data, т.е. передает в OnCompareLVItems не индексы сравниваемых элементов, а поле LVItemData этих элементов.
Действительно не совсем понял где нужно смотреть поле Data. И привел все варианты где его можно посмотреть и изменить
← →
KOLBoss © (2007-07-06 13:42) [9]Большое спасибо тебе "vpbar", за подробное объяснение.
попробую разобраться с виртуальным списком.
Но я так если правельно понемаю виртуальны список нужен для быстродействия приложения?
иначе незачем морочить сибе голову.
Ещё раз Большое спасибо тебе!
← →
vpbar (2007-07-06 15:05) [10]Ну вообще не только для быстродействия. Я ,например, использую его когда нужно гибко управлять ListView, например сортировать разными способами, фильтровать. Проще отсортировать или отфильтровать список для этого предназначенный чем добавлять и удалять элементы в ListView. Кроме того иногда удобно отделить данные от их представления.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c