Mam TListBox zawierający listę lokalizacji (każdy z nazwą i odległości od bieżącej lokalizacji). Chciałbym dać użytkownikom opcję sortowania listy według nazwy lokalizacji (tj. Alfabetycznie) lub odległości od ich bieżącej lokalizacji. Nazwa lokalizacji jest zapisywana jako wartość ItemData.Text elementu, a odległość od bieżącej lokalizacji jest zapisywana jako wartość ItemData.Detail. Problem polega na tym, że zwykła metoda sortowania TListBox nie używa właściwości ItemData.Detail podczas sortowania (tylko właściwość ItemData.Text). Czy jest możliwe dodanie niestandardowej metody sortowania do TListBox, która sortuje według wartości ItemData.Detail każdego elementu?Delphi Sortuj TListBox przez ItemData.Detail?
Próbowałem następujących, ale nie działa:
procedure TFrmSelect.btnSortLocationClick(Sender: TObject);
var Compare: TFMXObjectSortCompare;
begin
btnSortLocation.Enabled := False;
btnSortAlpha.Enabled := True;
Compare := function(item1, item2: TFmxObject): Integer
begin
Result := TListBoxItem(item1).ItemData.Detail.CompareTo(TListBoxItem(item2).ItemData.Detail);
end;
self.ListBox.Sort(Compare);
self.ListBox.Sorted := False;
self.ListBox.Sorted := True;
end;
Oto obraz z listy np które byłyby klasyfikowane:
Dlaczego używasz sortowania standardowego, jeśli go nie chcesz? Dlaczego warto ustawić Sorted to True? –
Czy sortowane nie używa metody sortowania, którą przypisujesz? –
Nie. Nie przypisujesz metody sortowania. Przekazujesz jeden do Sortowania, który jest tam używany, a następnie sortujesz listę. –