AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Dateien einlesen

Ein Thema von schöni · begonnen am 1. Apr 2012 · letzter Beitrag vom 6. Apr 2012
Antwort Antwort
Seite 1 von 3  1 23   
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#1

Dateien einlesen

  Alt 1. Apr 2012, 19:23
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.
.
.
.
.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.

Geändert von schöni ( 1. Apr 2012 um 19:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Dateien einlesen

  Alt 1. Apr 2012, 19:28
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/
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#3

AW: Dateien einlesen

  Alt 1. Apr 2012, 19:42
Danke @DeddyH, werde ich machen. Sieht vielversprechend aus.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.098 Beiträge
 
Delphi 12 Athens
 
#4

AW: Dateien einlesen

  Alt 1. Apr 2012, 21:44
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.

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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Apr 2012 um 21:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Dateien einlesen

  Alt 2. Apr 2012, 07:02
Oder mein TFileSearcher, aber das ist in diesem Fall wohl mit Kanonen auf Spatzen geschossen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Dateien einlesen

  Alt 2. Apr 2012, 17:52
Geht das nicht üblicherweise mit
Delphi-Quellcode:
FindFirst...
while FindNext do
begin
end;
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Dateien einlesen

  Alt 2. Apr 2012, 18:10
Oder mit
Delphi-Quellcode:
if FindFirst... then
  repeat
  until FindNext... <> 0;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Dateien einlesen

  Alt 2. Apr 2012, 18:20
Genau, aber while FindFirst... finde ich ziemlich exotisch
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.098 Beiträge
 
Delphi 12 Athens
 
#9

AW: Dateien einlesen

  Alt 2. Apr 2012, 18:23
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Apr 2012 um 18:26 Uhr)
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#10

AW: Dateien einlesen

  Alt 4. Apr 2012, 10:20
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. 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.

.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.
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