![]() |
Delphi-Version: 10.2 Tokyo
TTreeView und TFilSearcher
Hi zusammen
Mit TOpenFileFrame und der TFileSearcher-Komponente zeige ich mir die Ordner und Dateien an. Diesem Frame hab ich nun noch ein PopUp verpasst, womit ich eigentlich ein neues Rootverzeichnis festlegen will. Der Code hierfür:
Delphi-Quellcode:
Das Problem ist nicht der FileSearcher, der macht seine Arbeit nach wie vor gut. Das Problem liegt hier (oder sitzt vor dem Bildschirm?):
procedure TOpenFileFrame.Wurzelverzeichnis1Click(Sender: TObject);
var AnItem: TTreeNode; ATextSelection :String; LDirectory: Boolean; begin AnItem := TVFilesExplorer.Selected; Self.FFileName := AnItem.Text; ATextSelection := PNameRec(AnItem.Data)^.RealName; LDirectory := PNameRec(AnItem.Data)^.IsDirectory; if LDirectory then begin ShowMessage('Ordnername := ' + ATextSelection); Self.FileSearcher1.RootDir := ATextSelection; FileSearcher1.Execute; end; end;
Delphi-Quellcode:
Diese Prozedur wird jedesmal aufgerufen, wenn der FileSearcher eine Datei oder einen Ordner gefunden hat. Das Problem ist: FCurrentNode ist Nil.
procedure TOpenFileFrame.FileSearcher1MatchFound(Sender: TObject;
const Path: string; const FileInfo: TSearchRec); var Complettpath, J: String; begin if Assigned(FCurrentNode) then begin Complettpath := IncludeTrailingPathDelimiter(Path) + FileInfo.Name; // Complettpath := DeleteDrivesName(Complettpath); AddNewNode(FCurrentNode, FileInfo.Name, Complettpath,TSearchRecAnalyzer.IsDirectory(FileInfo)); end; end; Belegt wird dieses Feld hier:
Delphi-Quellcode:
Hier wird der Frame erstellt und in einer Schleife AddNewNode aufgerufen, wo die Ordner für die Laufwerke und Partitionen erstellt werden:
procedure TOpenFileFrame.TVFilesExplorerExpanding(Sender: TObject;
Node: TTreeNode; var AllowExpansion: Boolean); var ChildNode: TTreeNode; begin AllowExpansion := not FileSearcher1.Busy; FileSearcher1.Recursive := False; FileSearcher1.SearchType := stBoth; FileSearcher1.AttributeMode := amInclusive; if AllowExpansion then if Node.HasChildren then begin FOrdner := PNameRec(Node.Data)^.RealName; if assigned(FOnFoundFolderEvent) then FOnFoundFolderEvent(Self,FOrdner); ChildNode := Node.getFirstChild; (* Dummy-Knoten löschen und Verzeichnisinhalt einlesen *) if not Assigned(ChildNode.Data) and Assigned(Node.Data) then begin Node.DeleteChildren; FCurrentNode := Node; //<=== FPathlist.Clear; (* RootDir auf den hinterlegten, aber unsichtbaren String setzen *) FileSearcher1.RootDir := PNameRec(Node.Data)^.RealName; FileSearcher1.Execute; end; end; end;
Delphi-Quellcode:
constructor TOpenFileFrame.Create(AOwner: TComponent);
var Drive, D: string; Drives: TStringlist; begin inherited; Drives := TStringlist.Create; try TDrives.ListDrivesAndNames(Drives); for Drive in Drives do begin D := Copy(Drive, 1, 3); AddNewNode(nil, Drive, Copy(Drive, 1, 3), true); end; finally FreeAndNil(Drives); end; FileSearcher1.SearchType := stBoth; FPathlist := TStringlist.Create; PnlLookOut.Align := alClient; FCmbxItem := False; end;
Delphi-Quellcode:
Und jetzt steh ich sprichwörtlich auf dem Schlauch...
procedure TOpenFileFrame.AddNewNode(ParentNode: TTreeNode; const aCaption,
aRealName: string; aIsdirectory: Boolean); var Node: TTreeNode; NameRec: PNameRec; Lextension: String; begin Node := TVFilesExplorer.Items.AddChild(ParentNode, aCaption); if aIsdirectory then begin Node.ImageIndex := 1; Node.SelectedIndex := 1; (* Dummy-Knoten anlegen *) // 'alle Dateien', '.pdf', '.Docx', '.bmp', '.nef', '.jpg', '.png TVFilesExplorer.Items.AddChild(Node, 'dummy'); end else begin Node.ImageIndex := 2; Node.SelectedIndex := 2; FPathlist.Add(aRealName); Lextension := ExtractFileExt(aRealName); // Hier wird die Übereinstimmung mit dem aktuellen Node.Enabled := False; // Datefilter (Dateiendung) festgestellt. Wenn nein, if (FFileType = Lextension) or // ist der eingefügte Node nicht Enabled (FFileType = 'alle Dateien') then Node.Enabled := true; end; New(NameRec); NameRec^.RealName := aRealName; NameRec^.IsDirectory := aIsdirectory; Node.Data := NameRec; end; Gruss Delbor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:37 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