Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi repeat schleife unterbrechen (https://www.delphipraxis.net/59219-repeat-schleife-unterbrechen.html)

bluescreen25 19. Dez 2005 16:26


repeat schleife unterbrechen
 
hallo, wer kann mir helfen ? Ich möchte die Search-Schleife unterbrechen können,wenn die Suche mal zu lange dauert (lol ganze Festplatte ausgewählt etc.) ...

habe versucht das über ein Flag zu lösen, aber bei mir scheitert es an der richtigen Stelle.
Die Procedure ist eh etwas zu langsam, da er ja 2x durch die gleichen Ordner geht...und noch nicht mal verschiedene Dateimasken gleichzeitig kann.

Delphi-Quellcode:
procedure Tmediaarchiv_frm.FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
var SR: TSearchRec;
 begin
   RootFolder := IncludeTrailingPathDelimiter(RootFolder);
    if Recurse then
    if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
      try
        repeat
          if SR.Attr and faDirectory = faDirectory then
            // --> ein Verzeichnis wurde gefunden
            //   der Verzeichnisname steht in SR.Name
            //   der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist
            //       RootFolder + SR.Name
            if (SR.Name <> '.') and (SR.Name <> '..') then
              FindAllFiles(RootFolder + SR.Name, Mask, Recurse);
              application.ProcessMessages;
              mediaplayer_frm.search_scroll_txt.Enabled := true; //Aktivierung
              mediaplayer_frm.search_scroll_txt.visible := true;
              mediaplayer_frm.stop_search_btn.Visible := true;
        until FindNext(SR) <> 0;
      finally
        FindClose(SR);
        mediaarchiv_frm.search_files_end_timer.Enabled := true;
        mediaarchiv_frm.search_files_end_timer.Interval := 1500;
      end;
    if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then
      try
        repeat
          if SR.Attr and faDirectory <> faDirectory then
          begin
          // --> eine Datei wurde gefunden
          //   der Dateiname steht in SR.Name
          //   der vollständige Dateiname (inkl. Pfadangabe) ist
          //       RootFolder + SR.Name

          // folgende Zeile schreibt den vollständigen Namen in eine Listbox
           PlayList.Add(RootFolder + SR.Name);
           mediaplayer_frm.PlayList_ListBox.Items.add(SR.Name);
           mediaarchiv_frm.search_files_end_timer.Enabled:= false;//Verzögerung
           mediaplayer_frm.search_scroll_txt.Enabled := true; //Aktivierung
           mediaplayer_frm.search_scroll_txt.visible := true;
           mediaplayer_frm.stop_search_btn.Visible := true;
        end;
        until FindNext(SR) <> 0 ;//or Flag_File_search_stop;
      finally
        FindClose(SR);
        mediaarchiv_frm.search_files_end_timer.Enabled := true;
        mediaarchiv_frm.search_files_end_timer.Interval := 1500;
      end;
 end;

mumu 19. Dez 2005 16:27

Re: repeat schleife unterbrechen
 
schmeis deine abfrage nach dem flag doch einfach in die beiden repeat until schleifen...

bluescreen25 19. Dez 2005 16:38

Re: repeat schleife unterbrechen
 
Zitat:

Zitat von mumu
schmeis deine abfrage nach dem flag doch einfach in die beiden repeat until schleifen...

jau , das klappt, direkt als Bedingung unter repeat....


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:04 Uhr.

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