Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Dateien einlesen (https://www.delphipraxis.net/167486-dateien-einlesen.html)

schöni 1. Apr 2012 19:23

Dateien einlesen
 
Hallo,

ich habe folgenden Quelltext erstellt:

Delphi-Quellcode:
var StillFiles: Integer;
begin
  Image.Proportional := true;
  Image.Stretch := true;
  FFileList := TStringList.Create;
  while (FindFirst(FFilename,faAnyFile,FSearch)=0) and (StillFiles=0) do
  begin
    FFileList.Add(FSearch.Name);
    StillFiles := FindNext(FSearch);
  end;
  FindClose(FSearch);
  ListBox1.Items.Assign(FFileList); //Die soll zum Testen sein, ob die Dateien gelesen wurden
end;
Ich will damit eine Diashow erzeugen, indem ich die Dateinamen (Bilder) meines Verzeichnisses in eine Stringliste einlese um später per Timerereignis einen Stringlistenindex zu inkrementieren und so die einzelnen Dateien in eine TImage Komponente lade mit Image.Picture.LoadFromFile(FFileList.Strings[Index].

Leider wird mit dem obigen Quelltext keine Datei eingelesen und so bleibt die Listbox auch leer. Warum? Was mache ich falsch? Ich habe mir auch diesen Quelltext aus http://forum.delphi-treff.de/showthr...-einer-Diashow

Delphi-Quellcode:
procedure TFHaupt.SBDiaClick(Sender: TObject);
var
  sr : TSearchRec;
  start : Cardinal;
begin
  extension := extractfileext(OpenPictureDialog1.FileName);
  if FindFirst(extractFilepath(OpenPictureDialog1.FileName)+'*'+extension,
     faAnyFile, sr) = 0 then
  begin
    repeat
      image1.Picture.LoadFromFile(sr.Name);
      image1.Update;
      Label1.Caption:=sr.Name;
      start := GetTickCount;
      repeat
        application.ProcessMessages;
      until GetTickCount > (start + warten);
      repeat
        application.ProcessMessages;
        if Bruch then break;
      until weiter;
      if Bruch then break;
    until FindNext(sr) <> 0;
    FindClose(sr);
  end;
end;
Hieraus habe ich mir meinen Quelltext darüber gebaut.

Weil es so leider nicht funktioniert:

Delphi-Quellcode:
procedure TBildbetrachter.SpTBXItem2Click(Sender: TObject);
var
  space: String;
begin
  //
  space := ' ';
  if FFilename='' then
  begin
    if PicsDialog.Execute then
    begin
      FFilename := PicsDialog.FileName;
      Image.Picture.LoadFromFile(FFilename);
      Bildbetrachter.Caption := Bildbetrachter.Caption + space + FFileName;
      Image.Update;
    end;
    if FindFirst(FFilename,faAnyFile,FSearch) = 0 then
    Timer.Enabled := true;
  end;
end;

procedure TBildbetrachter.TimerTimer(Sender: TObject);
var space: String;
begin
  space := ' ';
  if FindNext(FSearch) = 0 then
  begin
    Bildbetrachter.Caption := Bildbetrachter.Caption + space + FSearch.Name;
    Image.Picture.LoadFromFile(FSearch.Name);
    Image.Update;
  end;
  //Als ich vorher ShowMessage('Timer ausgelöst") testweise hier stehen hatte, wurde der Timer ausgelöst.
end;
Nach dem ButtonClick sehe ich nur das erste Bild. Ich habe das Timer Intervall auf 10 Sekunden eingestellt.

Nachdem das erste Bild angezeigt wurde, kann ich den Dialog zur Dateiauswahl nicht mehr aufrufen.



Was ist hier falsch. Ich werde ein weiteres Thema eröffnen "Mediaplayer verstehen. Denn diesen wollte ich zuvor einsetzen aber der hat nur ein OnClick Ereignis, das wohl ausschliesslich zur Auswertung in Frage kommt. Die Fragen hierzu folgen dort.
.
.
.
.

DeddyH 1. Apr 2012 19:28

AW: Dateien einlesen
 
Obwohl ich ja sonst eher nicht so der "Komponentenschubser" bin, möchte ich hier sagen: spar Dir den Aufwand und schau Dir diese Komponente einmal an: http://www.delphiarea.com/products/d...nents/picshow/

schöni 1. Apr 2012 19:42

AW: Dateien einlesen
 
Danke @DeddyH, werde ich machen. Sieht vielversprechend aus.

himitsu 1. Apr 2012 21:44

AW: Dateien einlesen
 
Zitat:

Delphi-Quellcode:
var StillFiles: Integer;
begin
  Image.Proportional := true;
  Image.Stretch := true;
  FFileList := TStringList.Create;
  while (FindFirst(FFilename,faAnyFile,FSearch)=0) and (StillFiles=0) do
  begin
    FFileList.Add(FSearch.Name);
    StillFiles := FindNext(FSearch);
  end;

Warnt dich denn nicht der Compiler vor dem nicht initialisierten StillFiles?

Ich könnte fast wetten diese Variable ist nicht 0 und deswegen wird auch nicht in die Schleife gesprungen.
Du kannst aber froh sein, denn wäre dort reingesprungen wurden, dann hättest du dir vermutlich eine Endlosschleife gebastelt.

Denn wer kommt schon auf die Idee FindFirst ebenfalls mit in die Schleife aufzunehmen?
Da wird der Suchvorgann immer wieder von neu vorne gestartet. :stupid:

PS: In der DP und vorallem in der CL gibt es schon mehrere Codes ala "find all files".
Hier im Forum suchenFindAllFiles
FindAllFilesFindAllFiles
...

Ansonsten steht in deiner Delphi-OH sogar ein Beispielcode für FindFiles.
Delphi-Referenz durchsuchenFindFirst (auch zu Erreichen über die geheime F1-Funktion)

Tipp für neuere Delphis: Delphi-Referenz durchsuchenTDirectory.GetFiles

DeddyH 2. Apr 2012 07:02

AW: Dateien einlesen
 
Oder mein TFileSearcher, aber das ist in diesem Fall wohl mit Kanonen auf Spatzen geschossen.

ConnorMcLeod 2. Apr 2012 17:52

AW: Dateien einlesen
 
Geht das nicht üblicherweise mit
Delphi-Quellcode:
FindFirst...
while FindNext do
begin
end;

DeddyH 2. Apr 2012 18:10

AW: Dateien einlesen
 
Oder mit
Delphi-Quellcode:
if FindFirst... then
  repeat
  until FindNext... <> 0;

ConnorMcLeod 2. Apr 2012 18:20

AW: Dateien einlesen
 
Genau, aber
Delphi-Quellcode:
while FindFirst...
finde ich ziemlich exotisch ;-)

himitsu 2. Apr 2012 18:23

AW: Dateien einlesen
 
Nicht nur ODER oder EXOTISCH,

denn sonst würde man den ersten Fund überspringen.
Zitat:

Delphi-Quellcode:
FindFirst...
while FindNext do
begin
  // verarbeiten
end;

Delphi-Quellcode:
if FindFirst... then
begin
  // verarbeiten ;)
  while FindNext... do
  begin
    // verarbeiten
  end;
  FindClose...;
end;
Wobei am Ende natürlich Beides ginge.
Delphi-Quellcode:
if FindFirst... then
begin
  repeat
    // verarbeiten
  until FindNext... <> 0;
  FindClose...;
end;

schöni 4. Apr 2012 10:20

AW: Dateien einlesen
 
Danke @Himitsu, @ConnorMcLeod, DeddyH....

@Himitsu:

Danke für den Hinweis, werde mir meinen Quelltext noch mal bezüglich der Variablen "stillfiles" ansehen.

Aber:

Ich wollte allerdings eigentlich eine selber erstellte Lösung schaffen. :wink: Der Filesearcher von DeddyH sieht gut aus, aber damit nutze ich wieder eine Lösung, die jemand anderes geschrieben hat. Wenn ich aber programmieren will, muss ich auch fähig sein, selber eine Lösung zu erarbeiten. Außerdem muss ich mich in eine von anderen Programmierern erstellte Lösung auch hineinarbeiten, bevor ich sie nutzen kann.

Werd mir deshalb die anderen Lösungen für findallfiles auch anschauen. Werde auch den FileSearcher-Quelltext von DeddyH studieren und bei Verständnisproblemen hier fragen. Die pichshow Komponente(n) schaue ich mir auch an.

Und schließlich habe ich genug Ehrgeiz, aus all diesen Anregungen meine persönliche Lösung zu schaffen. :wink:

.


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