Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

TPathfinderFrame und TFilesearcher

  Alt 22. Jan 2018, 12:16
Delphi-Version: XE8
Hi zusammen

Seit längerem verwende ich die von DeddyH entwickelte Komponente TFileSearcher.

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:
procedure TSearchOptionsFrame.CmbxSearchTypeCloseUp(Sender: TObject);
begin
  FSearchType := CmbxSearchType.Text;
// FSearchType := TSearchType(CmbxSearchType.ItemIndex);;
end;
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.
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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor (22. Jan 2018 um 12:22 Uhr)
  Mit Zitat antworten Zitat