Einzelnen Beitrag anzeigen

idontknow

Registriert seit: 21. Apr 2008
Ort: Schleswig-Holstein
60 Beiträge
 
Delphi 11 Alexandria
 
#1

TTreeview sortieren (FMX) klappt nicht...

  Alt 13. Sep 2017, 13:13
Merkwürdiges Problem, versuche gerade ein Treeview zu sortieren. Übergebe dazu mittels TTreeview.Sort einen Comparer, der die einzelnen Items anhand ihrer Tag-Eigenschaft sortieren soll. Habe zwei Comparer, einen für aufsteigende und einen für absteigende Sortierung. Wenn ich diesen Comparer übergebe:

Delphi-Quellcode:
function CompareAsc(Item1, Item2: TFmxObject): Integer;
begin
  Result := Item2.Tag - Item1.Tag;
end;
habe ich danach eine optisch leere Liste, in der aber immer noch Items vorhanden sind. Sie sind anklickbar, erscheinen aber ohne Text im Treeview.

So rum geht's:
Delphi-Quellcode:
function CompareDesc(Item1, Item2: TFmxObject): Integer;
begin
  Result := Item1.Tag - Item2.Tag;
end;
Habe Delphi 10.2

Was mache ich falsch? Mache ich überhaupt was falsch?

Schon mal vielen Dank fürs Angucken...

Hier mal das vollständige Programm:

Delphi-Quellcode:
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts,
  FMX.TreeView;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

function CompareAsc(Item1, Item2: TFmxObject): Integer;
function CompareDesc(Item1, Item2: TFmxObject): Integer;

implementation

{$R *.fmx}

function CompareAsc(Item1, Item2: TFmxObject): Integer;
begin
  Result := Item2.Tag - Item1.Tag;
end;

function CompareDesc(Item1, Item2: TFmxObject): Integer;
begin
  Result := Item1.Tag - Item2.Tag;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  TreeViewItem: TTreeViewItem;
  i: Integer;
begin
  for i := 0 to 9 do
  begin
    TreeViewItem := TTreeViewItem.Create(TreeView1);
    TreeViewItem.Parent := TreeView1;
    TreeViewItem.Text := i.tostring;
    TreeViewItem.Tag := i;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  //TreeView1.BeginUpdate;
  TreeView1.Sort(CompareAsc);
  //TreeView1.EndUpdate;
  TreeView1.Repaint;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  //TreeView1.BeginUpdate;
  TreeView1.Sort(CompareDesc);
  //TreeView1.EndUpdate;
  TreeView1.Repaint;
end;

end.
Oliver

Geändert von idontknow (13. Sep 2017 um 13:15 Uhr)
  Mit Zitat antworten Zitat