![]() |
Sortierrichtungs-Pfeile in ListView
Hallo,
In einem Listview mit dem ViewStyle 'vsReport' sollen einige Spalten sortierbar sein. Das funktioniert auch alles, wie es soll. Unerwartet kompliziert war jedoch die Darstellung der Sortierrichtung mittels der kleinen Pfeile, wie sie etwa im Windows Explorer zu sehen sind. Nach längerer Suche fand ich fand ich einen Code-Schnipsel, mit dem das tatsächlich funktioniert:
Delphi-Quellcode:
'Sortstatus' ist als Integer-Feld in der Private-Section des Formulars deklariert und enthält den Index der zu sortierenden Spalte, wobei das Vorzeichen die Sortierrichtung bestimmt.
uses Winapi.CommCtrl
Procedure TMediPlanGUI.DBListviewColumnClick(Sender: TObject; Column: TListColumn); var columnToSort: Integer; Header: HWND; Item: THDItem; begin // Vorhandenen Pfeil löschen ColumnToSort:= abs(sortstatus) - 1; Header := ListView_GetHeader(DBListView.Handle); ZeroMemory(@Item, SizeOf(Item)); Item.Mask := HDI_FORMAT; Header_GetItem(Header, ColumnToSort, Item); Item.fmt := Item.fmt and not (HDF_SORTUP or HDF_SORTDOWN); //remove both flags Header_SetItem(Header, ColumnToSort, Item); [...] // Neuen Pfeil entsprechend der Sortierichtung setzen Columntosort:= column.Index; // Get the new column Header_GetItem(Header, Columntosort, Item); Item.fmt := Item.fmt and not (HDF_SORTUP or HDF_SORTDOWN); // remove both flags if sortstatus > 0 then // Sortierrichtung aufwärts Item.fmt := Item.fmt or HDF_SORTUP // include the sort ascending flag else if sortstatus < 0 Then // Sortierrichtung abwärts Item.fmt := Item.fmt or HDF_SORTDOWN; // include the sort descending flag Header_SetItem(Header, ColumnToSort, Item); [...] end Wie gesagt, alles funktioniert korrekt. Aber leider nur im Standard-Windows-Look. Sobald ich in den Projekt-Optionen ein anderes Erscheinungsbild wähle, werden die Pfeile nicht mehr angezeigt.:( Leider habe ich keine Einstellung gefunden, mit der sich das Problem beheben ließ. Weiß da jemand mehr? Oder gibt es gar eine Alternative zu dem o.g. Verfahren? Gruß LP |
AW: Sortierrichtungs-Pfeile in ListView
Zitat:
![]() Wenn Du einen der alternativen Stile aktivierst (z.B. "Cyan Dusk"), dann erfolgt das Zeichnen mittels TListViewStyleHook.DrawHeaderSection(). Und dort gibt es leider keinen Code zum Zeichnen der Richtungspfeile. Du solltest das als Bug melden; so besteht zumindest die Hoffnung, dass das irgendwann korrigiert wird :-) Die Alternative wäre: selber zeichnen. Und da geht es schon los: In welcher Farbe soll der Pfeil gezeichnet werden? Soll ja auch irgenwie zum gewählten Style passen.... |
AW: Sortierrichtungs-Pfeile in ListView
Liste der Anhänge anzeigen (Anzahl: 2)
Und hier noch eine Alternative:
Eine TImageList zufügen und ListView.SmallImages damit verbinden. In die ImageList fügst Du zwei Bitmap ein (16x16, 256 Farben), welche einen "Up" und einen "Down"-Pfeil darstellen. In den HeaderColumns kannst Du bei ImageIndex zwischen -1 (=kein Bild), 0 und 1 auswählen, ob und welches Bitmap gezeichnet werden soll. Das funktioniert auch mit den Custom Styles: Anhang 52675Anhang 52676 Damit die Items in dem TListView nicht ebenfalls einen SortierPfeil anzeigen, muss dort ebenfalls ImageIndex := -1 gesetzt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz