Einzelnen Beitrag anzeigen

Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Problem mit Sortierung in VirtualStringTree (VST)

  Alt 6. Sep 2009, 13:49
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 ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat