Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Inhalt eines Ordners auslesen (https://www.delphipraxis.net/102118-inhalt-eines-ordners-auslesen.html)

Seppel 23. Okt 2007 19:01


Inhalt eines Ordners auslesen
 
Hi,

z.B in einem Ordner sind Bilder gespeichert und der Ordner heißt "Test" in meiner DB gibt es eine Person namens Test und zu der gehört der Ordner, der Pfad zu dem Ordner ist auch in der DB gespeichert.

Ich möchte jetzt also, dass die Bilder(in dem Ordner "Test") in einer Combobox oder etwas anderem aufzurufen sind und wenn man das BIld auswählt und auf Öffnen drückt öffnet sich dies.

Wie bekomme ich hin, dass der Inhalt und ausschließlich, .jpg oder .gif datein angezeigt werden.
Zudem müssen sie ja noch geöffnet werden.
Ich suche schon ne weile mir fällt nur keine Methode ein wie ich das hinbekommen soll.
Also der Pfad zu dem Ordner ist vorhanden in der DB und wenn der User angewählt wird, und in den Bereich kommt wo man alles überihn noch ma genau sieht und ändern kann, sollen Bilder über ihn auch anwählbar sein.

Ich hoffe ihr könnt mir helfen.
Danke.

dominikkv 23. Okt 2007 19:11

Re: Inhalt eines Ordners auslesen
 
Delphi-Quellcode:
procedure GetFileList(Path: String; ZielListe: TStringList);
var
  SR: TSearchRec;
begin
  if Path[length(Path)] <> '\' then
    Path := Path + '\';
  if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
    repeat
      if (Lowercase(ExtractFileExt(Path + sr.Name)) = '.jpg') then
        ZielListe.Add(Path + sr.Name);
    until FindNext(SR) <> 0;
  FindClose(SR);
  if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
    repeat
      if (SR.Attr = faDirectory) and
         (SR.Name <> '.') and (SR.Name <> '..') then
           GetFileList(Path + SR.Name + '\', ZielListe);
    until FindNext(SR) <> 0;
  FindClose(SR);
end;
dabei werden auch unterordner durchsucht.
kannst du so aufrufen:
Delphi-Quellcode:
procedure TForm1.Button1Click;
var
  List: TStringList;
  I: Integer;
begin
  List := TStringList.create;
  try
    GetFileList('<MeinPfad>', List);
    for I := 0 to List.Count do
      LoadMyImage(List[I]); // image laden
  finally
    FreeAndNil(List);
  end;
end;

Seppel 23. Okt 2007 19:14

Re: Inhalt eines Ordners auslesen
 
Kannst du mir das ein bisschen erläutern, ich würd auch gerne etwas lernen und wo muss ich was ändern.

dominikkv 23. Okt 2007 19:31

Re: Inhalt eines Ordners auslesen
 
ok :stupid:
und ich hab beim durchgehen gesehen das man da noch was vereinfachen kann :cyclops:

Delphi-Quellcode:
procedure GetFileList(Path: String; ZielListe: TStringList);
var
  SR: TSearchRec;
begin
  if Path[length(Path)] <> '\' then // erstmal schauen wir ob der übergebene pfad
    Path := Path + '\';             // mit einem \ aufhört, zB C:\Test\
  if FindFirst(Path + '*.jpg', faAnyFile, SR) = 0 then // nach der ersten datei suchen die mit .jpg endet
                                                       // * wird dabei als platzhalter verwendet
                                                       // in SR wird der fund gespeichert
    repeat
      ZielListe.Add(Path + sr.Name);    // pfad zum bild merken
    until FindNext(SR) <> 0;         // mit FindNext wird die suche wiederholt
  FindClose(SR);               // suche abschließen
  if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then   // das ganze noch mal von vorne mit ordnern
    repeat
      if (SR.Attr = faDirectory) and                   //  schauen ob fund ein ordner ist
         (SR.Name <> '.') and (SR.Name <> '..') then   //     "
           GetFileList(Path + SR.Name + '\', ZielListe); // rekursiver aufruf unserer procedure mit unterordner
    until FindNext(SR) <> 0;   // suche widerholen
  FindClose(SR);               // suche abschließen
end;

procedure TForm1.Button1Click;
var
  List: TStringList;
  I: Integer;
begin
  List := TStringList.create;  // unsere StringList erzeugen
  try                          // speicherschutzblock
    GetFileList('<MeinPfad>', List); // unsere prozedure, deinen pfad hier eintragen!
    for I := 0 to List.Count do      // alle elemente der liste durchgehen...
      LoadMyImage(List[I]);          // ... und laden (ist jetzt nur nen beispiel)
  finally
    FreeAndNil(List);          // speicher freigeben
  end;
end;
das laden vom bild musst du übernehmen^^
setz dir am anfang der prozedure nen breakpoint, dann siehst du mit jedem knopfdruck auf F8 wo er gerade hinspringt.
Bei weiteren Fragen fragen.

Seppel 23. Okt 2007 19:40

Re: Inhalt eines Ordners auslesen
 
ok thx, morgen werd ich probieren.

Seppel 24. Okt 2007 12:46

Re: Inhalt eines Ordners auslesen
 
Was muss ich bei LoadMyImage einsetzen??

guidok 24. Okt 2007 13:16

Re: Inhalt eines Ordners auslesen
 
Zitat:

Zitat von Seppel
Was muss ich bei LoadMyImage einsetzen??

Das was du mit deiner Bilderliste, die du erstellt hast, anfangen willst. Steht doch dahinter, dass es nur ein Beispiel ist. Du kannst die ganze for-Schleife weglassen, falls du das an dieser Stelle nicht brauchst, oder du weist die List einer Listbox zu (assign) usw. usw.

Seppel 24. Okt 2007 13:24

Re: Inhalt eines Ordners auslesen
 
ok.
Sagen wir ich möchte, die Datein(also alle Bilder) in dem Ordner in einer Combobox angezeigt bekommen, wie stelle ich das dann an.

DeddyH 24. Okt 2007 13:36

Re: Inhalt eines Ordners auslesen
 
Meine Version ohne Unterordner:
Delphi-Quellcode:
procedure ListAllPics(sPath: string; List: TStrings);
var Rec: TSearchRec;
begin
  List.BeginUpdate;
  List.Clear;
  if sPath[Length(sPath)] <> '\' then
    sPath := sPath + '\';
  if FindFirst(sPath + '*.*',faAnyfile,Rec) = 0 then
    begin
      repeat
        if (AnsiLowerCase(ExtractFileExt(Rec.Name)) = '.jpg') or
           (AnsiLowerCase(ExtractFileExt(Rec.Name)) = '.gif') then
          List.Add(Rec.Name);
      until FindNext(Rec) <> 0;
      FindClose(Rec);
    end;
  List.EndUpdate;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ListAllPics('F:',ComboBox1.Items);
end;

guidok 24. Okt 2007 15:14

Re: Inhalt eines Ordners auslesen
 
Zitat:

Zitat von Seppel
ok.
Sagen wir ich möchte, die Datein(also alle Bilder) in dem Ordner in einer Combobox angezeigt bekommen, wie stelle ich das dann an.

siehe Antwort von DeddyH.

Um aber beim Code von dominikkv zu bleiben:


Delphi-Quellcode:
ComboBox1.Items.Assign(List);
Und dies anstelle von:
Delphi-Quellcode:
for I := 0 to List.Count do      // alle elemente der liste durchgehen...
  LoadMyImage(List[I]);
Die Liste, die erstellt wird ist vom Typ TStringList und die Eigenschaft Items der Combobox ebenfalls. Mit Assign werden die Inhalte der einen Liste in die andere Liste kopiert.

Natürlich wäre es auch richtig:
Delphi-Quellcode:
 GetFileList('<MeinPfad>', ComboBox1.Items);
zu schreiben. Dann kannst du dir die Instanz "List" sparen und die File Liste wird direkt in die Stringliste Items der Combobox geschrieben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 Uhr.
Seite 1 von 3  1 23      

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