Einzelnen Beitrag anzeigen

PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#23

Re: Suchmaske nach FindFirst verändern?

  Alt 28. Nov 2009, 21:05
Habe jetzt eine ultimative Lösung geschrieben und möchte sie euch nicht vorenthalten:

Delphi-Quellcode:
procedure TForm1.LoadAFile(const AFile: string);
var
  ThisFilePath, ThisFileName: string;
begin
  Form1.Caption := AFile;
  mmoFilesInDirectory.Lines.Add(AFile);
end;

procedure TForm1.btnManuallyLoadAFileClick(Sender: TObject);
begin
  if dlgOpen.Execute(Handle) then
  begin
    mmoFilesInDirectory.Lines.Clear;
    LoadAFile(dlgOpen.FileName);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  LoadAFile(ExtractFilePath(Application.ExeName) + 'Unit1.dfm');
end;

procedure TForm1.btnGetNextFileClick(Sender: TObject);
var
  ActualFilePath, NextFile: string;
  NextFileFound: Boolean;
  SearchRec: TSearchRec;
begin
  NextFileFound := False;
  ActualFilePath := ExtractFilePath(Form1.Caption);

  // Geladene Datei suchen:
  if FindFirst(ActualFilePath + '*.*', faAnyFile, SearchRec) = 0 then
  begin
    repeat
      if not (SearchRec.Attr and faDirectory > 0) then
      begin
        if AnsiCompareText(ActualFilePath + SearchRec.Name, Form1.Caption) = 0 then
          BREAK;
      end;
    until FindNext(SearchRec) <> 0;
  end;

  // Nächste Datei nach der geladenen Datei suchen:
  while FindNext(SearchRec) = 0 do
  begin
    if not (SearchRec.Attr and faDirectory > 0) then
    begin
      NextFile := ActualFilePath + SearchRec.Name;
      // Geladene Datei ausschließen:
      if AnsiCompareText(NextFile, Form1.Caption) <> 0 then
      begin
        LoadAFile(NextFile);
        NextFileFound := True;
        BREAK;
      end;
    end;
  end;

  FindClose(SearchRec);

  if not NextFileFound then
  begin
    if chkStopAtEndOfDirectory.Checked then
      MessageDlg('Ende des Verzeichnisses!', mtInformation, [mbOK], 0)
    else
    begin
      // Suche erneut am Beginn des Verzeichnisses fortsetzen:
      if FindFirst(ActualFilePath + '*.*', faAnyFile, SearchRec) = 0 then
      begin
        repeat
          if not (SearchRec.Attr and faDirectory > 0) then
          begin
            mmoFilesInDirectory.Lines.Add('');
            LoadAFile(ActualFilePath + SearchRec.Name);
            BREAK;
          end;
        until FindNext(SearchRec) <> 0;
      end;
      FindClose(SearchRec);
    end;
  end;
end;
Ausgehend von einer geladenen Datei wird die nächste Datei im Verzeichnis der geladenen Datei gesucht. Dabei kann bestimmt werden, ob die Suche am Ende des Verzeichnisses gestoppt oder am Beginn des Verzeichnisses fortgesetzt werden soll. So kann man unabhängig von der Position im Verzeichnis der zuerst geladenen Datei alle Dateien durchgehen.

Im Anhang befindet sich ein schönes Demo-Programm, mit dem man alles ausprobieren kann. Der Code kann nach Wunsch auch gerne zur Code-Lib hinzugefügt werden.
Angehängte Dateien
Dateityp: zip holenaechstedatei_561.zip (211,4 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat