![]() |
Dateien einlesen
Hallo,
ich habe folgenden Quelltext erstellt:
Delphi-Quellcode:
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].
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; 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 ![]()
Delphi-Quellcode:
Hieraus habe ich mir meinen Quelltext darüber gebaut.
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; Weil es so leider nicht funktioniert:
Delphi-Quellcode:
Nach dem ButtonClick sehe ich nur das erste Bild. Ich habe das Timer Intervall auf 10 Sekunden eingestellt.
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; 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. . . . . |
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:
![]() |
AW: Dateien einlesen
Danke @DeddyH, werde ich machen. Sieht vielversprechend aus.
|
AW: Dateien einlesen
Zitat:
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". ![]() ![]() ... Ansonsten steht in deiner Delphi-OH sogar ein Beispielcode für FindFiles. ![]() Tipp für neuere Delphis: ![]() |
AW: Dateien einlesen
Oder mein
![]() |
AW: Dateien einlesen
Geht das nicht üblicherweise mit
Delphi-Quellcode:
FindFirst...
while FindNext do begin end; |
AW: Dateien einlesen
Oder mit
Delphi-Quellcode:
if FindFirst... then
repeat until FindNext... <> 0; |
AW: Dateien einlesen
Genau, aber
Delphi-Quellcode:
finde ich ziemlich exotisch ;-)
while FindFirst...
|
AW: Dateien einlesen
Nicht nur ODER oder EXOTISCH,
denn sonst würde man den ersten Fund überspringen. Zitat:
Delphi-Quellcode:
Wobei am Ende natürlich Beides ginge.
if FindFirst... then
begin // verarbeiten ;) while FindNext... do begin // verarbeiten end; FindClose...; end;
Delphi-Quellcode:
if FindFirst... then
begin repeat // verarbeiten until FindNext... <> 0; FindClose...; end; |
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 00:51 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