Einzelnen Beitrag anzeigen

Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#1

Virtualstringtree Caption

  Alt 2. Okt 2008, 13:37
hallo

ich habe folgendes problem. ich versuche in einem virtualstringtree eine ordnerstruktur anzuzeigen. ich hab dazu folgendes tutorial gefunden, leider funktioniert es nicht richtig. ich bekomme für alle nodes als caption "Node" angezeigt und nicht den ordner namen. ich poste mal den code, vielleicht sieht jemand den fehler?

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  VirtualTrees;

type
  Tmainform = class(TForm)
    VSTOrdnerstruktur: TVirtualStringTree;
    procedure FormCreate(Sender: TObject);
    procedure initialiseVSTOrdnerstruktur();
    procedure leseOrdnerStruktur( aNode : PVirtualNode;
                                        sPath : String;
                                        iNodeLevel : Integer);

    function AddNode( VST : TCustomVirtualStringTree;
                            aNode : PVirtualNode;
                            aSearchRec : TSearchRec;
                            sPath : String;
                            iNodeLevel : Integer): PVirtualNode;

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  PMyFolderRec = ^MyFolderRec; // Zeiger auf unser MyFolderRec-Record
  MyFolderRec = record
    SearchRec : TSearchRec;
    sPath : WideString;
  end;


var
  mainform: Tmainform;

implementation

{$R *.DFM}

procedure TMainForm.FormCreate(Sender: TObject);
begin
  initialiseVSTOrdnerstruktur;
end;

procedure TMainForm.initialiseVSTOrdnerstruktur();
begin
  VSTOrdnerstruktur.RootNodeCount := 0;
  VSTOrdnerstruktur.NodeDataSize := SizeOf(MyFolderRec);

  // nun alle Ordner im Tree anzeigen:
  leseOrdnerStruktur( nil,
                      'C:\test',
                      0);
end;


procedure TMainForm.leseOrdnerStruktur( aNode : PVirtualNode;
                                        sPath : String;
                                        iNodeLevel : Integer);
var
  SearchRec : TSearchRec;
  p : String;
begin
  p := sPath + '\*.*';
  if FindFirst(p, faAnyFile, SearchRec) = 0 then
  begin
    repeat

      // handelt es sich um ein Verzeichnis?
      if (SearchRec.Attr and faDirectory) = faDirectory then
      begin
        if (SearchRec.Name <> '.') and
           (SearchRec.Name <> '..') then
        begin
          // den aktuellen Ordner dem Tree anhängen
          aNode := AddNode(VSTOrdnerstruktur, aNode, SearchRec, sPath, iNodeLevel);

          // ab in den nächsten Unterordner:
          leseOrdnerStruktur( aNode,
                              IncludeTrailingBackslash(sPath)+ SearchRec.Name,
                              iNodeLevel+1);
        end;
      end;

    until
      FindNext(SearchRec) <> 0;
    FindClose(SearchRec); // wird benötigt um den Speicher wieder freizugeben
  end;
end;




function TMainForm.AddNode( VST : TCustomVirtualStringTree;
                            aNode : PVirtualNode;
                            aSearchRec : TSearchRec;
                            sPath : String;
                            iNodeLevel : Integer): PVirtualNode;
var
  pData: PMyFolderRec;
begin
  VST.BeginUpdate;


  if aNode <> nil then
  begin
    if VST.GetNodeLevel(aNode) < iNodeLevel then
      // übergeordneter Order Subordner --> an aNode anhängen
      Result := VST.AddChild(aNode)
    else if VST.GetNodeLevel(aNode) = iNodeLevel then
      // wieder im selben Ordner --> an aNode.Parent anhängen
      Result := VST.AddChild(aNode.Parent);
  end else
  begin
    Result := VST.AddChild(nil);
  end;


  pData := VST.GetNodeData(Result);
  pData^.sPath := sPath;
  pData^.SearchRec := aSearchRec;


  VST.EndUpdate;
end;

end.
vielen dank im voraus.
  Mit Zitat antworten Zitat