Einzelnen Beitrag anzeigen

Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#3

Re: ListView nach VirtualStringTree

  Alt 8. Aug 2006, 09:23
Hi, onkelrossie,

ich würde das Problem vermutlich so angehen:

Schritt 1: Im Speicher die neue, hierarchische Struktur aufbauen, so wie du's unter * beschrieben hast, z.B ein dynamisches Array, etwa
Delphi-Quellcode:
type
  TSubNodeRecord = record
    // Alles, was du brauchst, um dir auf Zuruf des VT (OnGetText etc.) die Daten zu holen.
    // Hier reicht unter Umständen eine ID, ein Bookmark o.ä., d.h. du benötigst nicht
    // zwangsweise eine Kopie der Daten.
  end;
  TRootNodeRecord = record
    Name: string; // 'Artikel' oder 'Ware'
    SubNodes: array of TSubNodeRecord;
  end;
var
  RootNodes: array of TRootNodeRecord;
Schritt 2: Lerne die Eigenheiten des VT - schau dir z.B. mal das Minimal-Demo an.

Schritt 3: Setze die übliche VT-Litanei um:
  • Definiere ein geeignetes Record für GetNodeData (TMyRec im Demo).
    In deinem Fall vielleicht
    Delphi-Quellcode:
      TNodeData = record
        case IsRootNode: Boolean of // Root- oder SubNode
          True: (pRoot: PRootNodeRecord);
          False: (pSub: PSubNodeRecord);
      end;
    Vergiss nicht, NodeDataSize entsprechend zu initialisieren.
  • Nach dem Aufbereiten deiner Hierarchie setzeVT.RootNodeCount := Length(RootNodes);
  • Im OnInitNode-Handler initialisiere Data gemäß des NodeLevels als Root- oder SubNode.
    Bei RootNodes setze ivsHasChildren in InitialStates.
  • Der OnInitChildren-Handler wird (wegen ivsHasChildren ) für alle RootNodes aufgerufen.
    Hole dir dort per GetNodeData die Daten des Knotens. Setze ChildCount := Length(Data.pRoot^.SubNodes)
  • Schließlich musst du noch OnGetText implementieren ==> Übung für den Leser.

HTH, Uli.
Uli Gerhardt
  Mit Zitat antworten Zitat