Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Listbox ohne Anzeige für TStrings (https://www.delphipraxis.net/104841-listbox-ohne-anzeige-fuer-tstrings.html)

holle 11. Dez 2007 17:52


Listbox ohne Anzeige für TStrings
 
Ich such mit dem folgenden Code nach Mp3-Dateien in einem Verzeichnis. Die Ergebniss werden dann in einer Listbox dargestellt. Gibt es eine alternative, so dass ich die Ergebnisse nur im Speicher merke, aber nicht anzeige? Die Daten der Listbox werden dann als nächstes in eine Datenbank übertragen, dann brauch ich die Listbox nicht mehr.
Delphi-Quellcode:
procedure GetAllFilesEM(Path, ExtMask: String; List: TStrings;
  SubFolder: Boolean);
var
  Attrib, k: Integer;
  Search: TSearchRec;
begin
  Attrib := faArchive + faReadOnly + faHidden;

  if Path[Length(Path)] <> '\' then Path := Path + '\';

  with TStringList.Create do
  try
    CommaText := ExtMask;

    for k := 0 to Count - 1 do
    if FindFirst(Path + '*.' + Strings[k], Attrib, Search) = 0 then
      repeat
        List.Add(AnsiUpperCase(Path + Search.Name));
      until FindNext(Search) <> 0;

    FindClose(Search);
  finally Free end;

  if SubFolder then
  begin
    if FindFirst(Path + '*.*', faDirectory, Search) = 0 then
    begin
      repeat
        if ((Search.Attr and faDirectory) = faDirectory) and
          (Search.Name[1] <> '.') then
          GetAllFilesEM(Path + Search.Name, ExtMask, List, SubFolder);
      until FindNext(Search) <> 0;

      FindClose(Search);
    end;
  end;
end; {Popov}
Danke,
Marcel

DeddyH 11. Dez 2007 17:55

Re: Listbox ohne Anzeige für TStrings
 
Nimm doch eine TStringList.

DP-Maintenance 11. Dez 2007 18:57

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Ein delphispezifisches Problem

Christian Seehase 11. Dez 2007 19:07

Re: Listbox ohne Anzeige für TStrings
 
Moin Marcel,

ein paar Sachen, die mir so aufgefallen sind:

Das
Delphi-Quellcode:
if Path[Length(Path)] <> '\' then Path := Path + '\'
geht schief, wenn Path leer ist.

Zwei Lösungsansätze:

Delphi-Quellcode:
Path := IncludeTrailingPathDelimiter(Path);
// oder
if (Length(Path) > 0) and (Path[Length(Path)] <> '\') then Path := Path + '\';
Ausserdem noch etwas, das definitiv falsch ist:

Delphi-Quellcode:
(Search.Name[1] <> '.')
filtert auch gültige Verzeichnisnamen heraus.
Du musst explizit auf

Delphi-Quellcode:
(Search.Name <> '.') and (Search.Name <> '..')
prüfen, da ein Datei-/Verzeichnisname durchaus mit einem . beginnen kann.

List würde ich auch nicht als Wert- sondern als Const-Parameter übergeben, damit man nicht versehentlich bei einer Überarbeitung List einen Wert zuweist, und sich dann anschliessend wundert, warum man kein Ergebnis zurück erhält.

Ich für meinen Teil verwende sogar ausschliesslich Var- oder Const-Parameter ;-)

DeddyH 11. Dez 2007 19:31

Re: Listbox ohne Anzeige für TStrings
 
Moin Christian,

diese Kritik müsstest Du aber an Popov richten ;). Außerdem stößt mir die Zeile
Delphi-Quellcode:
Attrib := faArchive + faReadOnly + faHidden;
auf, Bitmasken verknüpft man mit or.

himitsu 11. Dez 2007 19:37

Re: Listbox ohne Anzeige für TStrings
 
Jupp, User ist da mal nicht selbst dran Schuld,
aber ich = Erster :tongue:

http://www.delphipraxis.net/shoutbox_max.php?max=400 [11.12.2007, 19:07]

[add]
Zitat:

Zitat von SB: himitsu [vorhin 19:07
]ist hier wer da http://www.delphi-library.de/viewtopic.php?t=21275 angemeldet und haut dem Verfasser für (Search.Name[1] <> '.') mal kräftig auf die Pfötchen?

OK und für Path[Length(Path)] und faArchive+faReadOnly+faHidden sollte er auch noch was draufbekommen, wobei Letzteres sich als Konstante auch nicht schlecht machen würde :stupid:
[/add]

nur ich nicht da angemeldet und Popov's HP ist wohl auch down :nerd:


@holle: hier im Forum und ich glaub auch in der Code-Library finden sich da bessere Funktionen hierfür.

Christian Seehase 11. Dez 2007 19:58

Re: Listbox ohne Anzeige für TStrings
 
Moin Deddy,

Zitat:

Zitat von DeddyH
Moin Christian,

diese Kritik müsstest Du aber an Popov richten ;).

Vielleicht liest er das hier ja ;-)

Zitat:

Zitat von DeddyH
Außerdem stößt mir die Zeile
Delphi-Quellcode:
Attrib := faArchive + faReadOnly + faHidden;
auf, Bitmasken verknüpft man mit or.

Stimmt, dass ist mir diesmal gar nicht aufgefallen :oops:

Wobei ich sowieso bei FindFirst nur faAnyFile verwende, und später selber filtere.

Das mit dem [1] <> '.' dürfte wohl der "beliebteste" Fehler sein, wenn es darum geht Verzeichnisstrukturen durchzugehen :mrgreen:

Christian Seehase 11. Dez 2007 20:02

Re: Listbox ohne Anzeige für TStrings
 
Moin himitsu,

Zitat:

Zitat von himitsu
Jupp, User ist da mal nicht selbst dran Schuld,

wie man's nimmt. Bei Copy&Paste sollte man ja möglichst verstehen was man da einfügt... ;-)

Zitat:

Zitat von himitsu
aber ich = Erster :tongue:

http://www.delphipraxis.net/shoutbox_max.php?max=400 [11.12.2007, 19:07]

Wieso Erster?
Dein SB-Beitrag ist von 19:07 und meiner hier im Thread auch :mrgreen:
(Ich denke mal, meinen Beitrag zu schreiben hat etwas länger gedauert als Deiner :tongue: ;-))


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