Hallo zusammen,
ich glaube ich Suche mir noch einen Wolf nach Beispielen, wie ich in einem VST die Einträge sortiere mit Objekten. Alles was ich finde sind Beispiele mit Records. Ich habe folgendes Problem. Ich habe mehrere RootNodes, die jeweils mehrere Subnodes enthalten. Die Subnodes gehen aber nicht weiter als bis Level 1. Wenn alle Nodes noch zugeklappt sind, funktioniert meine Sortierung wunderbar. Wenn jetzt eine RootNode aufgeklappt ist, kann ich noch einmal von aufsteigend nach absteigend oder umgekehrt sorteiren lassen. Wenn ich dann nochmals auf den Header klicke, kommt eine EAccessViolation. Das passiert bei jeder Spalte.
Das ist jetzt mein jetziger Sourcecode :
Delphi-Quellcode:
type
TOParentPos = class
public
Position : string;
Textsnip : string;
end;
TOCatHeader = class(TOParentPos)
public
ID : Integer;
Kategorie : string;
Ueberschrift : string;
end;
{...}
procedure TForm5.VST_1CompareNodes(Sender: TBaseVirtualTree; Node1,
Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
var
daten1: TOCatHeader;
daten2: TOCatHeader;
begin
daten1 := TOCatHeader(VST_1.GetNodeData(Node1)^);
daten2 := TOCatHeader(VST_1.GetNodeData(Node2)^);
case Column of
0: Result := CompareValue(daten1.ID, daten2.ID);
1: Result := CompareStr(daten1.Kategorie, daten2.Kategorie);
2: Result := CompareStr(daten1.Ueberschrift, daten2.Ueberschrift);
end;
end;
{...}
procedure TForm5.VST_1HeaderClick(Sender: TVTHeader; Column: TColumnIndex;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
VST_1.SortTree(Column, Sender.SortDirection, True);
if Sender.SortDirection = sdAscending then
Sender.SortDirection := sdDescending
else
Sender.SortDirection := sdAscending;
end;
end;
Ich möchte lediglich nur die RootNodes sortiert haben nach Kategorie oder Überschrift. Wo steckt der Fehler, dass er bei aufgeklappten rootnodes nur noch einmal die Sortierung wechselt ?