Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.044 c
15-1200080391
datorn
2008-01-11 22:39
2008.02.10
Автозагрузка с флешки


2-1200445189
VladSel
2008-01-16 03:59
2008.02.10
сравнение чисел


15-1199706562
DI-524
2008-01-07 14:49
2008.02.10
Вопрос к владельцам сабжа


2-1200801804
ply
2008-01-20 07:03
2008.02.10
глобальная переменная - доступ из всех форм


15-1199365806
Piter
2008-01-03 16:10
2008.02.10
Умер Александр Абдулов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский