Ich habs nicht probiert, aber Versuch dieses oder ähnliches per CustomSort oder
im OnSort-Event des TreeView. In SortMyClass muß evt. noch die Form1 geändert werden.
Die Bezeichnung deines Records entsprechen nicht den üblichen Standards, habe
mir erlaubt dies zu ändern.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| uses Math; type PMyClassData= ^TMyClassData; TMyClassData = Packed Record Index: Integer; end;
function SortMyClass(P1: Integer; P2: Integer; LSort: Integer): Integer; var My1,My2: PMyClassData; begin My1:= PMyClassData(Form1.TreeView1.Items[P1].Data); My2:= PMyClassData(Form1.TreeView1.Items[P2].Data); Result:= CompareValue(My1.Index,My2.Index); end;
procedure Sort(); begin TreeView1.Items[0].CustomSort(@SortMyClass,0,true); end; |
Nachtrag:
Also habs gerade mal probiert, und die obere Routine will nicht.
Im OnCompare-Event klappts dann aber. Der Aufruf: TreeView.Alphasort
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.TreeView1Compare(Sender: TObject; Node1, Node2: TTreeNode; Data: Integer; var Compare: Integer); var My1,My2: PMyClassData; begin My1:= PMyClassData(Node1.Data); My2:= PMyClassData(Node2.Data); Compare:= CompareValue(My1.Index,My2.Index); end; |
Warum fügst Du die items als Child ein? Warum nicht als normales item?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Button2Click(Sender: TObject); var MyClass: PMyClassData; i: Integer; begin For i:= 1 to 5 do begin New(MyClass); MyClass.Index := i; TreeView1.Items.AddObject(nil, 'Item '+IntToStr(i), MyClass); end; end; |
Gib mal bescheid ob's klappt.
Gruß gispos