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 ListView Dateiendungen Filtern (https://www.delphipraxis.net/91979-listview-dateiendungen-filtern.html)

Tommy1988 12. Mai 2007 18:56


ListView Dateiendungen Filtern
 
Ich habe eine ListView, dort werden alle Dateien aus einem zuvor ausgewählten
Verzeichnis aufgelistete.

Ich habe versucht, diese zu filter, aber vergeblich:

[delphi
if FindFirst(VerzName+'*.txt',faAnyFile,SR)=0 then begin[/delphi]

So lautete es richtig, er listete alle (*:*) Dateien auf.

Mein Versuch:
Delphi-Quellcode:
 
    if FindFirst((VerzName+'*.txt') or
    (VerzName+'*.htm') or
    (VerzName+'*.html') or
    (VerzName+'*.php'),faAnyFile,SR)=0 then begin
//Dateien gefiltert ins ListView schreiben

DGL-luke 12. Mai 2007 20:28

Re: ListView Dateiendungen Filtern
 
dann tu doch faAnyFile raus ;-)

ersetz es durch 0.

äähmmm... moment mal... du kannst doch keine string-literale boolesch verknüpfen :shock:

Das geht so nicht :warn:

probiers eher so:
Delphi-Quellcode:
if FindFirst('*.txt, *.htm, *.html, *.php',0,SR)=0 then begin
oder auch mit semikolons getrennt.

EDIT: Aber das wird glaube ich nicht funktionieren.

Tommy1988 13. Mai 2007 17:42

Re: ListView Dateiendungen Filtern
 
Guten abend allerseits.

Leider funktioniert das nicht so richtig.

Das LiestView stellt keinerlei Inhalte mehr an, nachdem ich den Quellcode abgeändert habe.

xZise 13. Mai 2007 19:38

Re: ListView Dateiendungen Filtern
 
Ansonsten ginge auch:
Delphi-Quellcode:
FindFirst(VerzName + '*', faAnyFile, sr) = 0
==> Problem er sieht 1. alle Dateien, 2. auch Ordner und 3. auch "." und ".." also
Delphi-Quellcode:
if (sr.Name <> '.') and (sr.Name <> '..') and ((sr.Attr and faDirectory) = faDirectory) then
und der rest dann:
Delphi-Quellcode:
ext := ExtractFileExt(sr.Name);
if (ext = '.txt') or (ext = '.htm') or (ext = '.html') or (ext = '.php') then

Tommy1988 16. Mai 2007 15:56

Re: ListView Dateiendungen Filtern
 
Guten Tag, leider funktioniert das nicht.

Der komplette Code sieht so aus:

Delphi-Quellcode:
procedure VerzeichnisEinlesen(VerzName:string);
var NewItem : TListItem;
    Info   : TSHFileInfo;
    SR     : TSearchRec;
    ext : String;
begin
  if VerzName[length(VerzName)]<>'\' then
    VerzName:=VerzName+'\';
  with Form1 do begin
    ListView.Items.Clear;
if FindFirst(VerzName+'*.*',faAnyFile,SR)=0 then begin

      repeat
        if (length(SR.Name)>0) and (SR.Name[1]<>'.') then begin
          NewItem:=ListView.Items.Add;
          NewItem.Caption:=SR.Name;
          SHGetFileInfo(PChar(VerzName+SR.Name),
          0,Info,SizeOf(TSHFileInfo),SHGFI_SYSIconIndex
          or SHGFI_TYPENAME);
          NewItem.ImageIndex:=Info.IIcon;
          NewItem.SubItems.Add(Info.szTypeName);
        end;
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
    ListView.CustomSort(@NamenSortProc, 0);
  end;
end;

Gremlin 16. Mai 2007 16:11

Re: ListView Dateiendungen Filtern
 
Hmmm, funktioniert eigentlich ganz gut. Was soll denn nicht gehen...

Tommy1988 16. Mai 2007 16:46

Re: ListView Dateiendungen Filtern
 
Zitat:

Zitat von xZise
Ansonsten ginge auch:
Delphi-Quellcode:
FindFirst(VerzName + '*', faAnyFile, sr) = 0
==> Problem er sieht 1. alle Dateien, 2. auch Ordner und 3. auch "." und ".." also
Delphi-Quellcode:
if (sr.Name <> '.') and (sr.Name <> '..') and ((sr.Attr and faDirectory) = faDirectory) then
und der rest dann:
Delphi-Quellcode:
ext := ExtractFileExt(sr.Name);
if (ext = '.txt') or (ext = '.htm') or (ext = '.html') or (ext = '.php') then

Das da oben meine ich ;) Oder ich setze es einfach nur falsch ein.

Gremlin 16. Mai 2007 16:56

Re: ListView Dateiendungen Filtern
 
So sollte es funktionieren

Delphi-Quellcode:
  if VerzName[length(VerzName)]<>'\' then
    VerzName:=VerzName+'\';
  with Form1 do begin
    ListView.Items.Clear;
    if FindFirst(VerzName+'*.*',faAnyFile,SR)=0 then begin
      repeat
        if (sr.Name <> '.') and (sr.Name <> '..') and ((sr.Attr and faDirectory) <> faDirectory) then begin
          ext := ExtractFileExt(sr.Name);
          if (ext = '.txt') or (ext = '.htm') or (ext = '.html') or (ext = '.php') then begin
            NewItem := ListView.Items.Add;
            NewItem.Caption := SR.Name;
            SHGetFileInfo(PChar(VerzName+SR.Name),
            0,Info,SizeOf(TSHFileInfo),SHGFI_SYSIconIndex
            or SHGFI_TYPENAME);
            NewItem.ImageIndex := Info.IIcon;
            NewItem.SubItems.Add(Info.szTypeName);
          end;
        end;
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
    ListView.CustomSort(@NamenSortProc, 0);
  end;

Eventuell solltest du noch die Extensions auf Gross/Kleinbuchstaben prüfen, wenn dies notwendig ist

Delphi-Quellcode:
  [..]
  ext := Uppercase(ExtractFileExt(sr.Name));
  if (ext = '.TXT') or (ext = '.HTM') or (ext = '.HTML') or (ext = '.PHP') then begin
    NewItem := ListView.Items.Add;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 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