Сортировать TStringList своим методом сортировкиDelphi , Синтаксис , СортировкаСортировать TStringList своим методом сортировки
Оформил: DeeCo { Suppose you have a TListBox containing some date values. If you want to sort the dates by setting the "Sorted" property to "True" you will see that the dates are not sorted correctly: 12.03.2003 13.03.2003 29.01.2003 30.03.2003 Now what you can do is to is create a TStringlist, Assign the listbox.Items property to it, sort the stringlist using CustomSort, then Assign it back to listbox.items. } { Angenommen du hast eine TListBox, welche verschiedene Daten enthalt. Wenn man nun die Liste sortiert haben mochte, kann man die Eigenschaft "Sorted" auf "True" stellen. Man wird aber feststellen, dass die Daten nicht korrekt sortiert werden. 12.03.2003 13.03.2003 29.01.2003 30.03.2003 Wenn man nun eine TStringlist erstellt und ihr die Listbox.Items zuweist, kann man die StringListe mit einer CustomSort Methode sortieren und dann den Listbox.Items wieder die Items der StringListe zuweisen. } function CompareDates(List: TStringList; Index1, Index2: Integer): Integer; var d1, d2: TDateTime; begin d1 := StrToDate(List[Index1]); d2 := StrToDate(List[Index2]); if d1 < d2 then Result := -1 else if d1 > d2 then Result := 1 else Result := 0; end; procedure TForm1.Button1Click(Sender: TObject); var sl: TStringList; begin sl := TStringList.Create; try // listbox1.Sorted := False ! sl.Assign(listbox1.Items); sl.CustomSort(CompareDates); listbox1.Items.Assign(sl); finally sl.Free end; end; end. {********************************************************************} { To sort Integer values:} function CompareInt(List: TStringList; Index1, Index2: Integer): Integer; var d1, d2: Integer; r1, r2: Boolean; function IsInt(AString : string; var AInteger : Integer): Boolean; var Code: Integer; begin Val(AString, AInteger, Code); Result := (Code = 0); end; begin r1 := IsInt(List[Index1], d1); r2 := IsInt(List[Index2], d2); Result := ord(r1 or r2); if Result <> 0 then begin if d1 < d2 then Result := -1 else if d1 > d2 then Result := 1 else Result := 0; end else Result := lstrcmp(PChar(List[Index1]), PChar(List[Index2])); end; procedure TForm1.Button1Click(Sender: TObject); var sl: TStringList; begin sl := TStringList.Create; try // listbox1.Sorted := False; sl.Assign(listbox1.Items); sl.CustomSort(CompareInt); listbox1.Items.Assign(sl); finally sl.Free; end; end; Перевод контента на русский язык: Код - решение для сортировки TStringList по значениям даты или целочисленным значениям в TListBox-контроле в Delphi. Описание работы кода:
Вот улучшенная версия кода:
Это улучшенная версия использует раннее связывание и eliminiert повторный код в обработчиках событий. Она также включает комментарии, чтобы объяснить, что каждый часть кода делает. Сортировка элементов TStringList можно выполнить с помощью метода CustomSort, который позволяет задать функцию сравнения для сортируемых элементов. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Сортировка ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |