![]() |
Problem mit Bilder laden
Hallo
Ich habe ein Problem. :!: Ich habe ein Programm geschrieben mit dem ich eigentlich nur Bilder schnell hitereinander abspielen möchte. Hier der Quellcode:
Delphi-Quellcode:
Wenn ich das Programm starte gibt es keine Fehlermeldung nur eine Warnung das die Veriable möglicherweise nich initialisiert ist. Aber wenn ich auf den Button kliche passiert nicht?
procedure TForm1.Timer1Timer(Sender: TObject);
var Fortschritt: Integer; begin Fortschritt := Fortschritt + 1; if Fortschritt = 1 then begin Image1.Picture.LoadFromFile('C:\Dokumente und Einstellungen\Soz1L\Eigene Dateien\Eigene Bilder\X_Wing3.jpg'); end; if Fortschritt = 2 then begin Image1.Picture.LoadFromFile('C:\Dokumente und Einstellungen\Soz1L\Eigene Dateien\Eigene Bilder\X_Wing5.jpg'); end; if Fortschritt = 3 then begin Image1.Picture.LoadFromFile('C:\Dokumente und Einstellungen\Soz1L\Eigene Dateien\Eigene Bilder\X_Wing7.jpg'); end; end; procedure TForm1.BitBtn1Click(Sender: TObject); begin Timer1.Enabled := true; end; Kannmir jemand helfen? :?: Landfloh |
Re: Problem mit Bilder laden
Da Fortschritt eine lokale Variable ist, wird sie bei jedem OnTimer-Ereignis neu gesetzt, un da du ihren Wert nicht bestimmst(bzw. nur 1 draufaddierst) ist der Wert unbestimmt(bzw. nicht initialisiert). Am besten bestimmst du Fortschritt im private-Teil der Form als Eigenschaft und setzt es beim OnCreate auf 0.
Delphi-Quellcode:
Mfg
type
TForm1 = class(TForm) private Fortschritt: Integer; { Private-Deklarationen } public { Public-Deklarationen } end; |
Re: Problem mit Bilder laden
Zitat:
Danke. |
Re: Problem mit Bilder laden
Mit case statt der If-Abfragen wäre das Ganze aber übersichtlicher (und AFAIR auch schneller).
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
const Pfad = 'C:\Dokumente und Einstellungen\Soz1L\Eigene Dateien\Eigene Bilder\'; begin Fortschritt := Fortschritt + 1; case Fortschritt of 1: Image1.Picture.LoadFromFile(Pfad + 'X_Wing3.jpg'); 2: Image1.Picture.LoadFromFile(Pfad + 'X_Wing5.jpg'); 3: Image1.Picture.LoadFromFile(Pfad + 'X_Wing7.jpg'); end; end; |
Re: Problem mit Bilder laden
Und ganz böse ist die Bilder von einem hardcodierten Pfad zu laden!
Kopiere die Bilder lieber ins Anwendungsverzeichnis Deines Programmes und hole Dir diesen Pfad mittels ExtractFilePath(Application.ExeName); |
Re: Problem mit Bilder laden
Außerdem könntest du die Bilder auch von 1 - 3 durchnummerieren, dann bräuchtest du Case garnicht:
Delphi-Quellcode:
Mfg
procedure TForm1.Timer1Timer(Sender: TObject);
var FName: String; begin Inc(Fortschritt); FName := ExtractFilePath(ParamStr(0)) + 'X_Wing' + IntToStr(Fortschritt) + '.jpg'; if FileExists(FName) then Image1.Picture.LoadFromFile(Fname); end; |
Re: Problem mit Bilder laden
Noch eine Möglichkeit:
Delphi-Quellcode:
[edit] Eine Klammer vergessen [/edit]
procedure TForm1.Timer1Timer(Sender: TObject);
const Bilder: array[1..3] of string = ('X_Wing3.jpg','X_Wing5.jpg','X_Wing7.jpg'); begin Fortschritt := Fortschritt + 1; Image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + Bilder[Fortschritt]); Timer1.Enabled := Fortschritt < 3; end; |
Re: Problem mit Bilder laden
Und dann stellen wir noch sicher, dass auch immer der PathDelimiter dran ist:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
const Bilder: array[1..3] of string = ('X_Wing3.jpg','X_Wing5.jpg','X_Wing7.jpg'); begin Fortschritt := Fortschritt + 1; Image1.Picture.LoadFromFile(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + Bilder[Fortschritt]); Timer1.Enabled := Fortschritt < 3; end; |
Re: Problem mit Bilder laden
Und dann erstellen wir uns eine Funktion, die das für uns übernimmt (kann ja auch ein anderer Pfad sein) und eine weitere, die uns mitteilt, ob das Laden funktioniert hat ;)
|
Re: Problem mit Bilder laden
Ach, Du bist doch doof. :tongue:
|
Re: Problem mit Bilder laden
[OT] Aber da steh ich zu :P [/OT]
|
Re: Problem mit Bilder laden
Ich habe mach das immer Mit einer FileListBox
Delphi-Quellcode:
Aber vielleicht gibt es ja bei meinem Code Verbesserungen??
procedure TForm4.Timer2Timer(Sender: TObject);
begin if FileListBox1.Items.Count > 0 then begin if index > FileListBox1.Items.Count -1 then index:= 0; //index auf "O" setzen FileListbox1.Selected[index]:= true; //Aktuellen index makieren bild:= Lowercase(ExtractFileExt(FileListBox1.FileName)); if (bild = '.jpg') then //Pfad + .jpg begin ImageBilderanzeige.Picture.LoadFromFile(FileListBox1.FileName); end; if (bild = '.bmp') then begin ImageBilderanzeige.Picture.LoadFromFile(FileListBox1.FileName); end; if (bild = '.gif') then begin ImageBilderanzeige.Picture.LoadFromFile(FileListBox1.FileName); end; inc(index); //Index +1 LabAnzahlBilder.Caption:= 'Bild '+ IntToStr(index)+' von '+ IntToStr(FileListBox1.Items.Count); end else begin if Form1.MessageDlgPos2('Es sind keine Bilder vorhanden ',mtInformation,[mbok],self) = mrok then Timer2.Enabled:= False; end; end; Gruß Sascha |
Re: Problem mit Bilder laden
Dialoge in einem Timer-Event finde ich irgendwie suboptimal.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 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