Einzelnen Beitrag anzeigen

Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
156 Beiträge
 
Delphi 12 Athens
 
#1

Sortierrichtungs-Pfeile in ListView

  Alt 14. Jun 2020, 15:11
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:
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
'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.
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
  Mit Zitat antworten Zitat