Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VirtualTreeview HeaderClickAutoSort dritter Zustand (https://www.delphipraxis.net/206997-virtualtreeview-headerclickautosort-dritter-zustand.html)

Codehunter 15. Feb 2021 16:32

VirtualTreeview HeaderClickAutoSort dritter Zustand
 
Hallo!

VirtualTreeview kennt ja in Tree.Header.Options den Wert hoHeaderClickAutoSort. Wenn man den aktiviert und dann auf einen Columnheader klickt, toggelt er die Tree.Header.SortDirection hin und her. Also entweder sdAscending oder sdDescending. Soweit so gut. Ich könnte aber einen dritten Zustand gebrauchen, nämlich "gar nicht sortiert". Das würde zwar intern auch eine Sortierung bedeuten, allerdings nach einem Sekundärkriterium (entspricht im Grunde dem Ordinalwert des Pointers zu den Node-Daten). Lässt sich das irgendwie mit den vorhandenen VirtualTreeview-Optionen realisieren (derer gibts ja eine Menge) oder müsste ich das "zu Fuß" machen (OnHeaderClick etc.)?

Grüße
Cody

mytbo 15. Feb 2021 17:16

AW: VirtualTreeview HeaderClickAutoSort dritter Zustand
 
SortDirection kennt nur sdAscending und sdDescending. Verwende den HeaderClick Event. Das könnte als Beispiel so aussehen:
Delphi-Quellcode:
procedure ...vlvListHeaderClick(Sender: TVTHeader; Column: TColumnIndex;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button <> mbLeft then Exit; //=>

  with Sender, Treeview do
  begin
    if SortColumn > NoColumn then
      Columns[SortColumn].Options :=
        Columns[SortColumn].Options + [coParentColor];
    if (SortColumn = NoColumn)
      or (SortColumn <> Column) then
    begin
      SortColumn := Column;
      SortDirection := sdAscending;
    end
    else if SortDirection = sdAscending then
      SortDirection := sdDescending
    else
      SortDirection := sdAscending;

    if (SortColumn <> DefaultSortColumn)
      or (SortDirection <> DefaultSortDirection) then
    begin
      Columns[SortColumn].Color := u_Options.Options.DifferentSortColumnColor;
    end;

    SortDataList(FDataList);
    SortTree(SortColumn, SortDirection, False);
  end;
end;
Ich verwende noch die älteren VirtualTree Versionen 4 und 5. Kann bei einer neueren Version anders aussehen.

Bis bald...
Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz