Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Brauche Hilfe bei Rekursion (https://www.delphipraxis.net/165520-brauche-hilfe-bei-rekursion.html)

Lyan 3. Jan 2012 20:42

Delphi-Version: 2010

Brauche Hilfe bei Rekursion
 
Hallo,

ich möchte aus einem Ordner alle Bilder laden, inklusiv der Unterordner.

Zum auswählen des Ordners folgender Code:

Delphi-Quellcode:
    procedure TMainForm.btnChangePathClick(Sender: TObject);
    var
      Path: String;
    begin
      Path := PicturesPath;
      if SelectDirectory('Ordner mit Bildern für die Slideshow wählen:', '', Path) then
        CreateImageList(Path);
    end;
So nun werden die Bilder in eine Imageliste geladen:

Delphi-Quellcode:
    procedure TMainForm.CreateImageList(const Path: String);
    const
      SNoImage = 'The specified folder does not contain any supported image file.';
    var
      FileList: TFileListBox;
    begin
      if Path <> PicturesPath then
      begin
        FileList := TFileListBox.Create(nil);
        try
          FileList.Visible := False;
          FileList.Parent := Self;
          FileList.Mask := GraphicFileMask(TGraphic);
          FileList.Directory := Path;
          if FileList.Items.Count > 0 then
          begin
            Pictures.Assign(FileList.Items);
            PicturesPath := Path;
            if (Length(Path) > 0) and (PicturesPath[Length(Path)] = '\') then
              Delete(PicturesPath, Length(Path), 1);
            StatusBar.Panels[2].Text := IntToStr(Pictures.Count) + ' Image(s)';
            StatusBar.Panels[3].Text := 'Folder: ' + Path;
            LoadNextImage;
          end
          else
            MessageDlg(Path + #13#10 + SNoImage, mtWarning, [mbCancel], 0);
        finally
          FileList.Free;
        end;
      end;
    end;
Problem:

ich weiß nicht wie ich rekusriv programmiere. Also hier wird ein Ordner ausgewählt und nur aus diesem Ordner die Bilder geladen.

Ich möchte aber, dass auch aus allen Unterordnern und den unterordnern der unterordner die Bilder geladen werden.


Please help me :)

MfG

Lyan

Angel4585 3. Jan 2012 21:48

AW: Brauche Hilfe bei Rekursion
 
Schau mal ob dir diese Einträge aus der Codelib weiterhelfen:

http://www.delphipraxis.net/2235-ver...rchsuchen.html
http://www.delphipraxis.net/39470-ve...rchsuchen.html
http://www.delphipraxis.net/108297-v...re-masken.html

omata 3. Jan 2012 21:54

AW: Brauche Hilfe bei Rekursion
 
Delphi-Quellcode:
uses SysUtils;

procedure getFilesInDirectory(Directory: string; const Mask: string;
                              WithSubDirs: Boolean; Files:TStrings);

  procedure ScanDir(const Directory: string);
  var SR: TSearchRec;
  begin
    if FindFirst(Directory + Mask, faAnyFile and not faDirectory, SR) = 0 then
    begin
      try
        repeat
          Files.Append(Directory + SR.Name);
        until FindNext(SR) <> 0;
      finally
        FindClose(SR);
      end;
    end;

    if WithSubDirs then begin
      if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then
      begin
        try
          repeat
            if    ((SR.attr and faDirectory) = faDirectory)
               and (SR.Name <> '.')
               and (SR.Name <> '..') then
            begin
              ScanDir(Directory + SR.Name + '\');
            end;
          until FindNext(SR) <> 0;
        finally
          FindClose(SR);
        end;
      end;
    end;
  end;

begin
  if trim(Directory) <> '' then begin
    if Directory[Length(Directory)] <> '\' then
      Directory := Directory + '\';
    Files.Clear;
    ScanDir(Directory);
  end;
end;

Lyan 3. Jan 2012 22:34

AW: Brauche Hilfe bei Rekursion
 
Zitat:

Zitat von omata (Beitrag 1144230)
Delphi-Quellcode:
uses SysUtils;

procedure getFilesInDirectory(Directory: string; const Mask: string;
                              WithSubDirs: Boolean; Files:TStrings);

  procedure ScanDir(const Directory: string);
  var SR: TSearchRec;
  begin
    if FindFirst(Directory + Mask, faAnyFile and not faDirectory, SR) = 0 then
    begin
      try
        repeat
          Files.Append(Directory + SR.Name);
        until FindNext(SR) <> 0;
      finally
        FindClose(SR);
      end;
    end;

    if WithSubDirs then begin
      if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then
      begin
        try
          repeat
            if    ((SR.attr and faDirectory) = faDirectory)
               and (SR.Name <> '.')
               and (SR.Name <> '..') then
            begin
              ScanDir(Directory + SR.Name + '\');
            end;
          until FindNext(SR) <> 0;
        finally
          FindClose(SR);
        end;
      end;
    end;
  end;

begin
  if trim(Directory) <> '' then begin
    if Directory[Length(Directory)] <> '\' then
      Directory := Directory + '\';
    Files.Clear;
    ScanDir(Directory);
  end;
end;


Ah wunderbar! hab mal den code von dir in google eingegeben und bin dann auf Delphi-Treff gestoßen.

Bitte auch Quellen angeben - danke!

http://www.delphi-treff.de/tipps/dat...ateien-suchen/

omata 3. Jan 2012 22:47

AW: Brauche Hilfe bei Rekursion
 
Zitat:

Zitat von Lyan (Beitrag 1144236)
Bitte auch Quellen angeben - danke!

Ich hatte den Quellcode aus einer meiner Anwendungen herauskopiert, ich wusste nicht mehr, wo ich den her hatte. Ich hasste Ausrufezeichen. Es kommt nicht nochmal vor, dass ich dir helfe.

Furtbichler 4. Jan 2012 07:03

AW: Brauche Hilfe bei Rekursion
 
Mit Verlaub: Der Code ist so banal, das man auch ohne Quellenangabe hinkommen dürfte.

p80286 4. Jan 2012 07:16

AW: Brauche Hilfe bei Rekursion
 
Zitat:

Zitat von omata (Beitrag 1144237)
Zitat:

Zitat von Lyan (Beitrag 1144236)
Bitte auch Quellen angeben - danke!

Ich hatte den Quellcode aus einer meiner Anwendungen herauskopiert, ich wusste nicht mehr, wo ich den her hatte.

Der Code ist so alt, daß die ursprüngliche Quelle in der grauen Vorzeit verschwunden ist. Ich kenn ihn aus einem TP-Lehrbuch. Allerdings ohne try finally.

Gibt's da vielleicht einenCopyrightjunkie ?

Gruß
K-H

DeddyH 4. Jan 2012 07:19

AW: Brauche Hilfe bei Rekursion
 
[OT]
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Hallo Welt');
end;
Leider weiß ich die Quelle nicht mehr :stupid:. [/OT]

Man kann es aber auch wirklich übertreiben.

Bummi 4. Jan 2012 07:24

AW: Brauche Hilfe bei Rekursion
 
@DeddyH http://en.wikipedia.org/wiki/Hello_world_program :wink:

Furtbichler 4. Jan 2012 07:25

AW: Brauche Hilfe bei Rekursion
 
Zitat:

Zitat von DeddyH (Beitrag 1144252)
Leider weiß ich die Quelle nicht mehr :stupid:

Ach nein?

So kann man sich auch mit fremden Federn schmücken.

Ich möchte hiermit den Code "If" zum Patent anmelden!


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:40 Uhr.
Seite 1 von 2  1 2      

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