Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TreeView nach Nodes sortieren (https://www.delphipraxis.net/113239-treeview-nach-nodes-sortieren.html)

Opa Knack 5. Mai 2008 01:16


TreeView nach Nodes sortieren
 
Hallo,

ich hoffe, ich kann's richtig erklären:

Ich habe ein TreeView, bei welchem ich Records zu den Nodes hinterlegt habe (das, was hier im Forum meist mit TreeNodeEx bezeichnet wird). Dabei zeigt ein Record auf ein Feld "Datum", welches ein String im Format "mm/yyyy" ist (z. B. 05/2008). Ein weiterer Record enthält den Titel, welcher dann in Verbindung mit dem Datum den Nodetext ergibt (z. B. "05/2008: Eintrag 01").

Mein Ansinnen ist nun, die Nodes dem Datum entsprechend zu sortieren. Rein nach dem Nodetext zu gehen, funktioniert natürlich leider nicht, da dabei 09/2007 natürlich nach 05/2008 käme, der Definition nach aber davor liegen sollte.

Mein Gedanke war nun, die Nodes in eine Stringlist zu transportieren, die Datumsfelder in ein Timestamp zu konvertieren (Problem 1), dann nach diesem Timestamp zu sortieren (Problem 2) und dann wieder ins TreeView zu schreiben (Problem 3).

Nachdem ich nun wirklich lange gesucht und dabei nur die Funktion CustomSort gefunden habe (welche mich allerdings nicht weitergebracht hat), hoffe ich nun, dass ich nicht der einzige Mensch auf Erden bin, der dieses Problem hat und dass es bereits eine Lösung oder einen Ansatz zur Findung derselben gibt. Falls ihr mir da helfen könntet, wäre euch mein nahezu ewiger Dank gewiss :-)

Gute Nacht und Danke
Opi

christian_r 5. Mai 2008 01:57

Re: TreeView nach Nodes sortieren
 
Nach der Methode Code vom Layout trennen, folgende Idee:

- Record => Code
- TreeView => Layout

Den Timestamp als Ordinalzahl im Record speichern, die Records nach Timestamp sortieren und den Treeview anschließend neu aufbauen.

Damit kannst Du Deinem Algorhythmus in Zukunft wesentlich schneller immer wieder ein neues Layout verpassen. ;)

marabu 5. Mai 2008 08:02

Re: TreeView nach Nodes sortieren
 
Moin,

wenn ich den String MM/YYYY als gegeben ansehe, dann funktioniert die Sortierung so:

Delphi-Quellcode:
type
  TDemoForm = class(TForm)
    TreeView: TTreeView;
    Button: TButton;
    procedure FormCreate(Sender: TObject);
    procedure TreeViewCompare(Sender: TObject; Node1, Node2: TTreeNode;
      Data: Integer; var Compare: Integer);
    procedure ButtonClick(Sender: TObject);
  private
    fs: TFormatSettings;
  end;

var
  DemoForm: TDemoForm;

implementation

{$R *.dfm}

uses
  DateUtils;

procedure TDemoForm.FormCreate(Sender: TObject);
begin
  GetLocaleFormatSettings(GetSystemDefaultLCID, fs);
  fs.DateSeparator := '/';
  fs.ShortDateFormat := 'dd/mm/yyyy';
end;

procedure TDemoForm.TreeViewCompare(Sender: TObject; Node1,
  Node2: TTreeNode; Data: Integer; var Compare: Integer);
var
  d1, d2: TDate;
begin
  d1 := StrToDate('01/' + Copy(Node1.Text, 1, 7), fs);
  d2 := StrToDate('01/' + Copy(Node2.Text, 1, 7), fs);
  Compare := CompareDate(d1, d2);
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
begin
  TreeView.AlphaSort(False);
end;
Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:24 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