Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateifilter definieren (https://www.delphipraxis.net/203432-dateifilter-definieren.html)

Delbor 15. Feb 2020 23:51

Delphi-Version: 10.3 Rio

Dateifilter definieren
 
Hi zusammen

Um meinen OpenFileFrame nach bestimmten Dateiendungen zu filtern, habe ich folgenden Typ definiert:
Delphi-Quellcode:
Const
  TExtendedArray : array[0..6] of string =('alle Dateien', '.pdf', '.Docx', '.bmp', '.nef', '.jpg', '.png'); //
Bei Programmstart (z.B.) befülle ich damit eine Combobox:
Delphi-Quellcode:
function TFileSearchContainerFrame. FillCmbxFileType: String;
  var i: integer;
begin
  For i := Low(TExtendedArray) to High(TExtendedArray) do
  begin
    CmbxFileType.Items.Add(TExtendedArray[i]);
    if i = 0 then
      CmbxFileType.Text := CmbxFileType.Items[0];
  end;
  Result := CmbxFileType.Text;
end;
Das Problem dabei ist: damit werden zwar zB. *.bmp - Dateien gefunden (und deren Nodes Enabled dargestellt), nicht aber *.BMP-Dateien.

Wie kann ich gleichzeitig auf zB. '*.bmp' und *.BMP, bzw *htm, *html, *.HTM und *.HTML prüfen?

Gruss
Delbor

hhcm 16. Feb 2020 07:50

AW: Dateifilter definieren
 
Wie wird das ganze denn verwendet? Ich sehe nur das füllen einer Combobox!
Wenn du die Erweiterung selbst prüfst, hilft ja schon ein LowerCase(extension) = auswahl.

Delbor 16. Feb 2020 08:30

AW: Dateifilter definieren
 
Hi hhcm

Das geschieht, wenn dem Treeview ein Knoten für die gefundene Datei hinzugefügt wird:
Delphi-Quellcode:
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
      ...
      ...
    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) then         // ist der eingefügte Node nicht Enabled
        Node.Enabled := true;                  
      if (FFileType = 'alle Dateien') then
        Node.Enabled := true;
    end;
  New(NameRec);
  NameRec^.RealName := aRealName;
  NameRec^.Caption := aCaption;
  NameRec^.IsDirectory := aIsdirectory;
  Node.Data := NameRec;
end;
Gruss
Delbor

Uwe Raabe 16. Feb 2020 10:21

AW: Dateifilter definieren
 
Ersetz mal den Vergleich
Delphi-Quellcode:

 if (FFileType = Lextension) then
durch
Delphi-Quellcode:

 if SameText(FFileType, Lextension) then

p80286 16. Feb 2020 11:10

AW: Dateifilter definieren
 
oder gleich
Delphi-Quellcode:
   if (FFileType = TExtendedarray[0]) then
     Node.Enabled := True
   else begin
     Lextension := ExtractFileExt(aRealName);
     if SameText(FFileType,Lextension) then
        Node.Enabled := True
     else
       Node.Enabled := False;
   end;
Wobei, eine Konstante mit "T" ist doch ungewöhnlich.

Gruß
K-H

Delbor 18. Feb 2020 13:38

AW: Dateifilter definieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi zusammen

Das obige Beispiel von p80286 hab ich fast identisch übernommen:
Delphi-Quellcode:
  Node.Enabled := False; // Datefilter (Dateiendung) festgestellt. Wenn nein,
    Lextension := ExtractFileExt(aRealName);
    if SameText(FFileType,Lextension) then
      Node.Enabled := True;
    if (FFileType = 'alle Dateien') then
      Node.Enabled := true;
Erstmal wird Enabled auf False gestellt. Und anschliessend gibt es 2 Fälle, in denen Enabled True sein muss:
  • Wenn die Endung dem Filter entspricht oder
  • Alle Dateien angezeigt / Enabled werden sollen
Allerdings hab ich noch ein anderes Problem:
Anhang 52106
Erstmal hab ich das Programm gestartet. Dann fülle ich die Combobox mit den Dateifiltern:
Delphi-Quellcode:
function TFileSearchContainerFrame. FillCmbxFileType: String;
  var i: integer;
begin
  For i := Low(TExtendedArray) to High(TExtendedArray) do
  begin
    CmbxFileType.Items.Add(TExtendedArray[i]);
    if i = 0 then
      CmbxFileType.Text := CmbxFileType.Items[0];
  end;
  Result := CmbxFileType.Text;
end;
Aufgerufen wird so:
Delphi-Quellcode:
constructor TFileSearchContainerFrame.Create(AOwner: TComponent);
begin
  inherited;
  ...
  FFileExtension := FillCmbxFileType;
  Edit2.Text := FFileExtension;
  Panel1.Caption := OpenFileFrame1.Filetype;
end;
Die Caption des Panels zeigt mir, dass das Property OpenFileFrame1.Filetype den richtigen Wert hat. Nun navigiere ich zu dem oberen der beiden Ordner mit den BMP-Inhalten und öffne ihn. Als Dateityp ist 'Alle Dateien' ausgewählt. Die Inhalte werden mir disabled angezeigt.
Ich ändere jetzt den Dateityp auf *.bmp und öffne den 2. Ordner. Dessen Inhalte werden mir Enabled angezeigt.
Ich schliesse den ersten Ordner und öffne ihn wieder: es ändert sich nichts.

Erstes Missverständnis: Bisher hab ich geglaubt, die Dateisuche würde jedesmal ausgeführt, wenn ich einen Ordner öffne. Die Enabledwerte im ersten Ordner beweisen, dass dem nicht so ist.

Mit welchem Ereignis kann ich Nodes erreichen, die erzeugt und wieder ausgeblendet wurden und schliesslich wieder angezeigt werden?

Gruss
Delbor


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:29 Uhr.

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