In einer ListView werden die Elemente nach den Gruppen "BGroup", "CGroup" und "DGroup" gruppiert (Dies sind die Gruppenköpfe). Wenn ich nun ein neues Item zum ListView hinzufüge und diesem Item eine neue Gruppe mit der Kopfzeile "AGroup" zuteile, wird immer die Gruppe "AGroup" am Ende der Gruppen eingefügt; Die neue Gruppenbestellung lautet also: BGroup, CGroup, DGroup, AGroup. Wie kann ich die Gruppen in alphabetischer Reihenfolge sortieren lassen? Die Reihenfolge sollte lauten: AGroup, BGroup, CGroup, DGroup.Listenansichtsgruppen sortieren?
Antwort
Sie können das ListView_SortGroups
Makro für diese z. Dieses Makro erwartet von Ihnen eine eigene Vergleichsfunktion, definiert durch den Funktionsprototyp LVGroupCompare
. Im folgenden Code werden die Gruppen nach der Header
-Eigenschaft sortiert, indem die CompareText
-Funktion verwendet wird. Jetzt liegt es an Ihnen, einen eigenen Vergleich zu erstellen.
Vergessen zu beachten; was auch immer Sie an den letzten Pointer
Typ Parameter des ListView_SortGroups
Makro übergeben werden Sie in der LVGroupCompare
Funktion im pvData
Parameter erhalten, so wie dies eine Gruppensortierfunktion einer bestimmten Listenansicht sein wird, ist es das Beste, direkt Groups
zu übergeben Sammlung dieser Listenansicht zur einfacheren Handhabung.
Da es keine direkte Möglichkeit ist eine Listenansicht Gruppe von Gruppen-ID zu finden, würde ich die folgende Hilfsfunktion für die TListGroups
Klasse verwenden:
type
TListGroups = class(ComCtrls.TListGroups)
public
function FindItemByGroupID(GroupID: Integer): TListGroup;
end;
implementation
function TListGroups.FindItemByGroupID(GroupID: Integer): TListGroup;
var
I: Integer;
begin
for I := 0 to Count - 1 do
begin
Result := Items[I];
if Result.GroupID = GroupID then
Exit;
end;
Result := nil;
end;
Dann können Sie diese Hilfsmethode in der Verwendung LVGroupCompare
Funktion Rückruf auf diese Weise:
function LVGroupCompare(Group1_ID, Group2_ID: Integer;
pvData: Pointer): Integer; stdcall;
var
Item1: TListGroup;
Item2: TListGroup;
Groups: TListGroups;
begin
Result := 0;
Groups := TListGroups(pvData);
Item1 := Groups.FindItemByGroupID(Group1_ID);
Item2 := Groups.FindItemByGroupID(Group2_ID);
if Assigned(Item1) and Assigned(Item2) then
Result := CompareText(Item1.Header, Item2.Header);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Item: TListItem;
Group: TListGroup;
begin
Group := ListView1.Groups.Add;
Group.Header := 'AGroup';
Item := ListView1.Items.Add;
Item.Caption := 'Item X';
Item.GroupID := Group.ID;
ListView_SortGroups(ListView1.Handle, LVGroupCompare, ListView1.Groups);
end;
- 1. Sortieren nicht sortieren Javascript
- 2. ASP.NET Gridview Sortieren nicht sortieren
- 3. Lexikographisch sortieren?
- 4. Anagramme sortieren
- 5. Wie sortieren
- 6. Mehrdimensionales Array nach Wert sortieren nicht richtig sortieren
- 7. Sortieren in funktionalen Programmiersprachen
- 8. jQuery jedes immer sortieren?
- 9. Sortieren von PHP-Iteratoren
- 10. Listen in Clojure sortieren
- 11. Sortieren Wörterbuch mit operator.itemgetter
- 12. Sortieren einer Textdatei
- 13. DataGridView programmgesteuert sortieren
- 14. HTML-Tabelle sortieren
- 15. Kann MongoDB alphanumerisch sortieren?
- 16. Sortieren NSFileManager Ergebnisse
- 17. Sortieren Unterelemente des Arrays
- 18. Wie Zeitkomplexität Auswahl sortieren
- 19. Sortieren NSMutableArray mit Schlüsselwert
- 20. Mongodb sortieren nach Datum
- 21. Spalte ein Array sortieren?
- 22. SQLite - Sortieren einer Tabelle
- 23. Array nach String sortieren
- 24. Java Array Absteigend sortieren?
- 25. Vergleichen und Sortieren Array
- 26. TinySort sortieren nach IDs
- 27. Merge Sortieren in Python3
- 28. Sortieren nach verbundenen Tabellendaten
- 29. Mongoose Aggregation dynamisch sortieren
- 30. Excel alphabetisch sortieren
Vielen Dank. Der Compiler zeigt jedoch einen Fehler in der Zeile 'ListView_SortGroups' an: 'E2009 Inkompatible Typen:' Normaler Verfahrens- und Methodenzeiger ' Wenn ich jedoch ein" @ "vor" LVGroupCompare "hinzufüge:' @ LVGroupCompare', dann Compiler zeigt den Fehler in der gleichen Zeile: 'E2036 Variable required' – user1580348
Und Sie haben die' LVGroupCompare' als reguläres Verfahren definiert (wie ich)? Es kann keine Methode sein und sollte nicht verschachtelt sein. Ich habe dies nur mit Delphi 2009 getestet (da ich Delphi XE2 jetzt nicht von Hand habe), wo der Compiler zufrieden war. – TLama
kein Problem mit xe2 –