Einzelnen Beitrag anzeigen

DelphiDeveloper

Registriert seit: 9. Apr 2003
Ort: Köln
256 Beiträge
 
Delphi XE2 Enterprise
 
#3

Re: VirtualTreeView und Baumstruktur

  Alt 24. Mär 2004, 13:04
habe hier mal ein paar code schnipsel zusammengeschrieben wie ich das geamcht habe.

1.) Definition der Daten die ich brauche

Delphi-Quellcode:
 TTreeDataClass = class
  private
    FTestStr1: string;
    FDokID: integer;
    FKDID: integer;
    FICON: integer;
    FDOKNR: string;
    FMASUCH: string;
    FDokDatum: TDate;
    FUserInitial: string;
    FMandant: integer;
    FDokArt: TDokTypen;
    FDokKuerzel: string;
  published
    property TestStr1: string read FTestStr1 write FTestStr1;
    property DokID: integer read FDokID write FDokID;
    property KDID: integer read FKDID write FKDID;
    property ICON: integer read FICON write FICON;
    property DokDatum: TDate read FDokDatum write FDokDatum;
    property UserInitial: string read FUserInitial write FUserInitial;
    property Mandant: integer read FMandant write FMandant;
    property DOKNR: string read FDOKNR write FDOKNR;
    property MASUCH: string read FMASUCH write FMASUCH;
    property DokArt: TDokTypen read FDokArt write FDokArt;
    property DokKuerzel: string read FDokKuerzel write FDokKuerzel;
  end; //class

  PTreeData = ^TTreeData;
  TTreeData = record
    FObject: TObject;
  end;
2. Methode fuer das Hinzufuegen von Nodes
Delphi-Quellcode:
function TFormChildArchiv.AddVSTObject(avst: TCustomVirtualStringTree;
  aNode: PVirtualNode; aObject: TObject): PVirtualNode;
var
  Data: PTreeData;
begin
  Result := avst.AddChild(aNode);
  avst.ValidateNode(Result, False);
  data := avst.GetNodeData(Result);
  data^.FObject := aObject;
end;
3. Füllen der Datenstrukturen mit werten aus der DB

Delphi-Quellcode:
procedure TFormChildArchiv.BuildTree;
var
  TreeObject: TTreeDataClass;
  Wurzel: PVirtualNode;
begin

  vst.BeginUpdate;

  vst.NodeDataSize := SizeOf(TTreeData);
  vst.DeleteChildren(vst.RootNode, true);

  if markiert(ANGEBOT) then
  begin
    
    // Root eintragen
    TreeObject := TTreeDataClass.Create;
    try
      TreeObject.DokArt := ANGEBOT;
      TreeObject.DokKuerzel := 'ANG';
      TreeObject.TestStr1 := GetDKBEZ(GetEnumName(TypeInfo(TDokTypen),
        ord(TreeObject.Dokart))) +
        '(' + IntTostr(IB_QryAngebote.RecordCount) + ')';

      if IB_QryAngebote.RecordCount > 0 then
        TreeObject.Icon := 3
      else
        TreeObject.Icon := 12;

      Wurzel := addvstObject(vst, nil, TreeObject);
      // jetzt Detail eintragen
      with IB_QryAngebote do
      begin
        while not Eof do
        begin
          TreeObject := TTreeDataClass.Create;
          try
            TreeObject.TestStr1 := FieldByName('KU_SUCH').AsString;
            TreeObject.DokID := FieldByName('AK_ID').AsInteger;
            TreeObject.KDID := FieldByName('AK_KU_ID').AsInteger;
            TreeObject.DokDatum := FieldByName('AK_DATUM').asdate;
            TreeObject.UserInitial := FieldByName('USER_INITIAL').asString;
            TreeObject.Mandant := FieldByName('AK_MANDANT').AsInteger;
            TreeObject.DOKNR := FieldByName('AK_NR').asstring;
            // TreeObject.Icon := 17;
            addvstObject(vst, Wurzel, TreeObject)
         except
            TreeObject.free
          end; //try
          Next;
        end; //while
      end;
    except
      TreeObject.free
    end; //try
    IB_QryAngebote.Close;
  end; // if Angebote eintragen


  if markiert(ANFRAGE) then
  begin
    
    // Root eintragen
    TreeObject := TtreeDataClass.Create;
    try
      TreeObject.dokart := ANFRAGE;
      TreeObject.DokKuerzel := 'ANF';
      TreeObject.TestStr1 :=
        GetDKBEZ(GetEnumName(TypeInfo(TDokTypen),
        ord(TreeObject.Dokart))) +
        '(' + IntTostr(IB_QryAnfragen.RecordCount) + ')';
      if IB_QryAnfragen.RecordCount > 0 then
        TreeObject.Icon := 3
      else
        TreeObject.Icon := 12;
      Wurzel := addvstObject(vst, nil, TreeObject);
      // jetzt Detail eintragen
      with IB_QryAnfragen do
      begin
        while not Eof do
        begin
          TreeObject := TTreeDataClass.Create;
          try
            TreeObject.TestStr1 := FieldByName('KU_SUCH').AsString;
            TreeObject.DokID := FieldByName('AN_ID').AsInteger;
            TreeObject.KDID := FieldByName('KU_ID').AsInteger;
            TreeObject.DokDatum := FieldByName('AN_SERVERDATUM').asdate;
            TreeObject.UserInitial := FieldByName('USER_INITIAL').asString;
            TreeObject.Mandant := FieldByName('MANDANT_ID').AsInteger;
            TreeObject.DOKNR := FieldByName('AN_NR').asstring;
            // TreeObject.Icon := 17;
            addvstObject(vst, Wurzel, TreeObject);
          except
            TreeObject.free;
          end; //try
          Next;
        end; // while
      end; // with
    except
      TreeObject.Free
    end; //try
    IB_QryAnfragen.Close;
  end; // if
unter 3 steht noch viel balast das entscheidende fuer die Baumstruktur
ist addvstObject
  Mit Zitat antworten Zitat