![]() |
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:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:47 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