Сортировка ListView в режиме vsReport при нажатии на заголовок колонки
Code: |
function CustomDateSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;
begin result:=0; if strtodatetime(item1.SubItems[0])> strtodatetime(item2.SubItems[0]) then Result :=1 else if strtodatetime(item1.SubItems[0])< strtodatetime(item2.SubItems[0]) then Result :=-1; end;
procedure TForm1.lv1ColumnClick(Sender: TObject; Column: TListColumn); begin if column =lv1.columns[0] then LV1.CustomSort(@CustomNameSortProc, 0) else LV1.CustomSort(@CustomDateSortProc, 0) end; |
Сортировка по первой колонке
Сортировка по первой колонке TListView делается так:
Code: |
ListView1.SortType := stText; |
Установка SortType в stText аналогична установке Sorted в True в объекте TListBox. Список будет оставаться отсортированным даже после добавления или изменения элементов, до тех пор, пока не установить SortType обратно в stNone:
Code: |
ListView1.SortType := stNone; |
В TListBox это аналогично установке Sorted в False.
Сортировка по другим колонкам
Чтобы отсортировать TListView по другой колонке, потребуется написать событие OnCompare, либо функцию сортировки, которая будет использоваться в методе CustomSort.
Для начала рассмотрим сортировку при помощи события OnCompare.
Code: |
procedure(Sender: TObject; Item1, Item2: TListItem;Data: Integer; var Compare: Integer) of object; |
Параметр Compare может иметь три значения: 1, -1 или 0. Единица означает, что первый элемент больше (или должен быть размещён после) второго элемента. Минус одни означает, что первый элемент меньше чем (или должен быть размещён перед) второй элемент. Ноль означает, что два элемента равны.
В следующем примере мы сортируем TListView по четвёртой колонке (которая представлена целыми значениями) в порядке убывания:
Code: |
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); var n1, n2: integer; begin n1 := StrToInt(Item1.SubItems[2]); n2 := StrToInt(Item2.SubItems[2]); if n1 > n2 then Compare := -1 else if n1 < n2 then Compare := 1 else Compare := 0; end; |
- Назад
- Вперёд >>
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!