![]() |
Delphi-Version: XE8
TPathfinderFrame und TFilesearcher
Hi zusammen
Seit längerem verwende ich die von DeddyH entwickelte Komponente ![]() Mit der Komponente mitgeliefert werden auch einige Demos, unter anderem auch eine solche, die die gefundenen Dateien und deren kompletten Pfade in einer Listview anzeigt. Mit der Anwendung lassen sich sämtliche Komponenteneinstellungen verändern, mit denen festgelegt werden kann, welche Dateien gefunden werden sollen. So lässt sich auch das Property Filemask zur Laufzeit verändern. Defaultmässig ist dabei '*.*' angegeben - damit werden sämtliche Dateien beliebiger Endung gefunden. Wenn ich diese Einstellung zur Laufzeit der Demo durch '*.pdf*' ersetze, findet mir die Komponente sämtliche Dateien mit dieser Endung, die sich im Startverzeichnis (Rootdir) befinden. Soweit, so gut. Wenn ich nun aber in meinem PathfinderFrame die Komponente einsetze, 'verhält sie sich richtig mies' - mit der Defaulteinstellung '*.*' findet sie alles. Wenn ich allerdings diese Einstellung ändere, geschieht nichts. Um es genauer zu sagen:
Delphi-Quellcode:
procedure TPathFinderFrame.FileMaskInit;
var i: integer; begin for i := Low(VALID_EXTENSIONS) to High(VALID_EXTENSIONS) do begin if i = 5 then CmbxFileType.Text := VALID_EXTENSIONS[i]; //IntToStr(FDefaultType); CmbxFileType.AddItem(VALID_EXTENSIONS[i], nil); end; PathFinder1.FileMask := '*.pdf*'; //VALID_EXTENSIONS[5]; end; Mit dieser bei Programmstart aufgerufenen Prozedur stelle ich den Defaultwert von PathFinder1.FileMask auf '*.pdf*' ein. TPathFinder ist die selbe Komponente (keine Nachkomme) wie TFilesearcher. Letztere habe ich erst vor einiggen Tagen von Deddh's Webseite heruntergeladen und in TPathfinder umbenannt. Hintergrund ist: Ich hatte damals, zur Entwicklungszeit, einige Tests mit der Komponente durchgeführt und war mir jetzt nicht mehr sicher, dass ich auch wirklich die finale Version der Komponente installiert habe. TPathFinder entspricht also genau der TFileSeacher-Komponente, wie sie bei DeddyH heruntergeladen werden kann. Trotzdem liegt genau hier der Haken - rufe ich obige Prozedur aus dem Constructor meines TPathfinderFrames auf, wird zur Laufzeit die Suche gestartete und gleich wieder beendet. Im Treeview verschwindet das Chevron desjenigen Ordners, den ich erweitern wollte, und Dateien und Unterordner werden nicht angezeigt. Dasselbe geschieht, wenn ich zur Designzeit den Wert des Filemask-Propertys im OI auf '*.pdf*' ändere (natürlich ohne die Hochkommas) und obige Prozedure nicht aufrufe. Leider habe ich die entscheidende Stelle trotz mehrmaligem Durchsteppen nicht gefunden. Wobei ich allerdings zugeben muss: sobald ich beim Durchsteppen in den Delphi-Unit lande, beende ich, indem ich nun F9 drücke und damit wieder bei einem in meiner Anwendung gesetzten Haltepunkt lande, da ich in diesen Units keinen Hinweis auf den Fehler erwarte. Im Verlauf meiner Suche nach einer Lösung des Problems habe ich allerdings noch etwas anderes entdeckt. Ich hatte mir einen Frame gebaut, der die in der ListviewDemo enthaltenen Masken zur Einstellung der Suchparameter enthält. Dieser Frame enthält folgende Prozedur:
Delphi-Quellcode:
Hier erfahre ich per Hint, dass TSearchType in der Unit Vcl.ComCtrls definiert ist und da nur 2 Elemente enthält. Allerdings enthält der Uses-Abschnitt noch keinerlei Hinweis auf die Komponenten-Unit oder die DDFileUtils.
procedure TSearchOptionsFrame.CmbxSearchTypeCloseUp(Sender: TObject);
begin FSearchType := CmbxSearchType.Text; // FSearchType := TSearchType(CmbxSearchType.ItemIndex);; end; Auf den oben beschriebenen Fehler hat dies allerdings keinen Einfluss, da der Frame zwar Teil des Projektes, aber noch nicht in Betrieb ist. Allerdings stellt sich mir die Frage, wie ich hier Konflikte vermeiden kann. Über einen Hilfreichen Hinweis zu meinem Problem würde ich mich sehr freuen. Gruss Delbor |
AW: TPathfinderFrame und TFilesearcher
Hast Du die Komponente zur Designzeit aufs Formular bzw. den Frame gesetzt, oder erzeugst Du sie dynamisch?
|
AW: TPathfinderFrame und TFilesearcher
High DeddyH
Die Komponente wurde zur Designtime gesetzt. Gruss Delbor |
AW: TPathfinderFrame und TFilesearcher
Wenn es ein Problem mit dem gleich benannten Datentyp sein sollte, musst Du den richtigen voll qualifizieren:
Delphi-Quellcode:
oder Dir einen Alias dafür erstellen und den benutzen(auch wieder voll qualifiziert).
FSearchType: FileSearch.TSearchType;
Delphi-Quellcode:
Dann zur Maske: *.pdf* findet alle Dateien und/oder Ordner (je Einstellung des Suchtyps), die irgendwo im Namen die Zeichenfolge ".pdf" enthalten, und nicht nur solche mit der Endung pdf. Ist das so gewollt?
type
TMySearchType = FileSearch.TSearchType; TWasWeissIchFrame = class(TFrame) ... private FSearchType: TMySearchType; |
AW: TPathfinderFrame und TFilesearcher
Hi DeddyH
Zitat:
Sag jetzt bloss nicht :mrgreen: , ich hab da des guten zuviel getan:lol: Zitat:
Ich habe bemerkt, dass da, wo du diesen Typ einsetzt, Comctrl am Anfang der Usesliste steht, die Komponentenunits aber ziemlich am Schluss. Ist das zuverlässig? Gruss Delbor *** ÄÄhm - der Defaultwert findet also alles, was irgendwo einen Punkt hat? Dan ist der 2. Stern zuviel? PS: In der Demo habe ich allerdings auch *.pdf* angegeben |
AW: TPathfinderFrame und TFilesearcher
Wenn mehrere Units Typen desselben Namens deklarieren, gewinnt diejenige, die als letzte eingebunden wird. Wirklich zuverlässig ist der gezeigte Weg mit dem voll qualifizierten Namen, dann weiß der Compiler exakt, welcher Typ denn tatsächlich gemeint ist. Und wenn Du nur PDF-Dateien suchst, wäre *.pdf die richtige Maske (ohne den abschließenden *).
|
AW: TPathfinderFrame und TFilesearcher
Hi DeddyH
Zitat:
Ok, Danke! Ich habe die Maske auch mal ohne alle Sterne und ohne Punkt definiert -da findet 'er' gerade mal den Ordner PDF... Hab vielen Dank für die Hilfe! Gruss Delbor |
AW: TPathfinderFrame und TFilesearcher
Kurze Maskenerklärungskundendingens:
Dateimasken sind im Prinzip genauso aufgebaut, wie ein vollständiger Dateiname. Dabei trennt der "." den Dateinamen von der Dateiendung (<Dateiname>.<Dateiendung>). Der * steht für "eine Zeichenfolge beliebiger Länge oder keine". Beispiele: *.* beliebiger Dateiname, beliebige Dateiendung (findet alle Dateien und Verzeichnisse) *.pdf beliebiger Dateiname, mit der Dateiendung pdf wupti.* Dateiname "wupti" (Copyright siehe Unten), beliebige Dateiendung (also alle Dateien mit namen wupti) wupti*.* Der Dateiname muss mit wupti beginnen, der Rest is egal *wupti.* Der Dateiname muss mit wupti enden, der Rest is egal *.p* beliebiger Dateiname, die Dateiendung muss mit p anfangen *.*p beliebiger Dateiname, die Dateiendung muss mit p aufhören Nur so um mal die Verwirrung etwas zu klären :) "wupti" wurde von Daniel (aka Cheffe) erfunden. Somit liegt das Copyright bei ihm 8-) |
AW: TPathfinderFrame und TFilesearcher
Hi Ghostwalker
Vielen Dank für diese ausführliche Beschreibung! Gruss Delbor |
AW: TPathfinderFrame und TFilesearcher
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 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