Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Virtualstringtree Caption (https://www.delphipraxis.net/121684-virtualstringtree-caption.html)

cookie22 2. Okt 2008 12:37


Virtualstringtree Caption
 
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. :)

Tyrael Y. 2. Okt 2008 12:40

Re: Virtualstringtree Caption
 
Du musst beim Ereginis OnGetText den Text für die Nodes setzen.

cookie22 2. Okt 2008 13:05

Re: Virtualstringtree Caption
 
danke, jetzt geht's. :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz