Сортировать TListView, используя нужный методDelphi , Синтаксис , СортировкаСортировать TListView, используя нужный метод
Оформил: DeeCo { This example shows how to use the TListView's CustomSort method to sort the items in the list using a ordering function. This allows you to sort custom data in the correct order you want. When the user clicks on a column header, the ListView will be sorted by that column. If the user clicks on the same column again, the sort order will be toggled. (***) Dieses Beispiel zeigt die Verwendung der CustomSort Methode einer TListView. Damit kann man z.B Zahlen korrekt (d.h nach ihrer Grosse) sortieren lassen. Wenn der Anwender auf den Kopf einer Spalte klickt, wird die ensprechende Spalte sortiert. Bei nochmaligem Klicken auf dieselbe Spalte wird die Sortierreihenfolge umgekehrt. } { custom sort styles } type TCustomSortStyle = (cssAlphaNum, cssNumeric, cssDateTime); var { variable to hold the sort style } LvSortStyle: TCustomSortStyle; { array to hold the sort order } LvSortOrder: array[0..4] of Boolean; // High[LvSortOrder] = Number of Lv Columns implementation {$R *.DFM} function CustomSortProc(Item1, Item2: TListItem; SortColumn: Integer): Integer; stdcall; var s1, s2: string; i1, i2: Integer; r1, r2: Boolean; d1, d2: TDateTime; { Helper functions } function IsValidNumber(AString : string; var AInteger : Integer): Boolean; var Code: Integer; begin Val(AString, AInteger, Code); Result := (Code = 0); end; function IsValidDate(AString : string; var ADateTime : TDateTime): Boolean; begin Result := True; try ADateTime := StrToDateTime(AString); except ADateTime := 0; Result := False; end; end; function CompareDates(dt1, dt2: TDateTime): Integer; begin if (dt1 > dt2) then Result := 1 else if (dt1 = dt2) then Result := 0 else Result := -1; end; function CompareNumeric(AInt1, AInt2: Integer): Integer; begin if AInt1 > AInt2 then Result := 1 else if AInt1 = AInt2 then Result := 0 else Result := -1; end; begin Result := 0; if (Item1 = nil) or (Item2 = nil) then Exit; case SortColumn of -1 : { Compare Captions } begin s1 := Item1.Caption; s2 := Item2.Caption; end; else { Compare Subitems } begin s1 := ''; s2 := ''; { Check Range } if (SortColumn < Item1.SubItems.Count) then s1 := Item1.SubItems[SortColumn]; if (SortColumn < Item2.SubItems.Count) then s2 := Item2.SubItems[SortColumn] end; end; { Sort styles } case LvSortStyle of cssAlphaNum : Result := lstrcmp(PChar(s1), PChar(s2)); cssNumeric : begin r1 := IsValidNumber(s1, i1); r2 := IsValidNumber(s2, i2); Result := ord(r1 or r2); if Result <> 0 then Result := CompareNumeric(i2, i1); end; cssDateTime : begin r1 := IsValidDate(s1, d1); r2 := IsValidDate(s2, d2); Result := ord(r1 or r2); if Result <> 0 then Result := CompareDates(d1, d2); end; end; { Sort direction } if LvSortOrder[SortColumn + 1] then Result := - Result; end; { The ListView's OnColumnClick event } procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn); begin { determine the sort style } if Column.Index = 0 then LvSortStyle := cssAlphaNum else LvSortStyle := cssNumeric; { Call the CustomSort method } ListView1.CustomSort(@CustomSortProc, Column.Index -1); { Set the sort order for the column} LvSortOrder[Column.Index] := not LvSortOrder[Column.Index]; end; Это код-набор на языке Delphi, демонстрирующий использование метода Стили сортировки
Код определяет перечисление Функция сортировки
Функция Внутри этой функции:
* Проверяется, является ли любая из этих строк null
* Извлекаются текстовые или числовые значения из элементов в зависимости от выбранной колонки
* Сравниваются эти значения с помощью switch-оператора, который зависит от стиля сортировки Логика сортировки
Код определяет три вспомогательные функции: Событие OnColumnClick ListView
Когда заголовок колонки кликается, срабатывает обработчик события Улучшения Чтобы сделать этот код более устойчивым, вы могли бы добавить обработку ошибок для случаев, когда входные данные являются недопустимыми. Кроме того, вам может потребоваться использование более эффективного алгоритма сортировки при работе с большими данными. В целом, это хороший пример реализации пользовательской сортировки в Сортировать TListView, используя нужный метод. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Сортировка ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |