Seite 1 von 1

LoadImage

Verfasst: 20.08.2008 22:16
von uweb
Hallo, in meinem Alter vergisst man shneller als man lernt. Und da ich nur noch wenig zum Programmieren komme habe ich wohl schon reichlich vergessen.

Code: Alles auswählen

CatchImage(0, ?play)
....
    If LoadImage(1, "C:\Dokumente und Einstellungen\Patrick\Eigene Dateien\pb\xxx.ico")    
      ButtonImageGadget(0, 10, 10, 100, 83, ImageID(1))
    Else
      ButtonImageGadget(0, 70, 10, 60, 24, ImageID(0))
    EndIf

...

End 

  DataSection
    play: IncludeBinary "C:\Dokumente und Einstellungen\Patrick\Eigene Dateien\pb\play.ico"
  EndDataSection
Wenn ich Image(0) direkt verwende oder Image(1) existiert ist alles ok. Ich wollte es aber offen lassen ob es ein externes Bild gibt.
Um das zu testen habe ich im funktionierenden code "C:\Dokumente und Einstellungen\Patrick\Eigene Dateien\pb\play.ico" durch "C:\Dokumente und Einstellungen\Patrick\Eigene Dateien\pb\xxx.ico" ersetzt. Nun wir das Fenster ohne Inhalt aufgebaut und das Programm hängt. Was mache ich falsch?

Verfasst: 20.08.2008 22:33
von Xaby
Versuch mal folgendes:

Code: Alles auswählen

Procedure ExistFile_FL2D(Name$) ; Damit kein Abbruch bei LoadImage()
Protected dat, result
   dat=ReadFile(#PB_Any,Name$)

   If dat
     CloseFile(dat)
     result=1
   Else
     result=0  
   EndIf

  ProcedureReturn result
EndProcedure 
Dein Programm sollte auch im Debug-Modus komplett lauffähig sein.

Später dann

Code: Alles auswählen

If ExistFile_FL2D(ImageName$)
       img=LoadImage(#PB_Any,ImageName$) 
     Else
       ; Bilddatei nicht vorhanden
     EndIf  
img ist hier die #ImageID des Bildes.
Du kannst mit IsImage(img) nun überprüfen, ob es ein Bild ist oder nicht.

:roll:

Verfasst: 20.08.2008 22:44
von ts-soft
@Xaby
Guck Dir mal bitte FileSize in der Hilfe an :wink:

Verfasst: 20.08.2008 23:17
von uweb
Danke euch beiden !

Sorry, daß ich nicht gleich geantwortet habe. Ich schreibe das Programm gerade mit meinem Sohn, und der hatte Hunger.

Das Bessere ist ja bekanntlich der Feind des Guten.

Code: Alles auswählen

    If FileSize("C:\Dokumente und Einstellungen\Patrick\Eigene Dateien\pb\pause.ico") > 317
      LoadImage(1, "C:\Dokumente und Einstellungen\Patrick\Eigene Dateien\pb\pause.ico") 
      ButtonImageGadget(0, 10, 10, 100, 83, ImageID(1))
    Else
      ButtonImageGadget(0, 70, 10, 60, 24, ImageID(0))
    EndIf
Ideal wäre es natürlich wenn ich sicher sein könnte, daß das Dateiformat auch stimmt.
Also wenn LoadImage so wie ReadFile einen Fehler abfangen würde.
Aber alle möglichen Fehlerbedingungen kann man wahrscheinlich ohnehin nicht abdecken.[/code]

Verfasst: 20.08.2008 23:42
von Kiffi
uweb hat geschrieben:Ideal wäre es natürlich wenn ich sicher sein könnte, daß das Dateiformat auch stimmt.
LoadImage() hat auch einen Rückgabewert. Wenn also 0 zurückgeliefert
wird, ist das Laden der Grafik fehlgeschlagen. Kannste auch gerne noch
einmal in der Hilfe nachschauen ;-)

Grüße ... Kiffi

Verfasst: 21.08.2008 02:08
von uweb
Danke Kiffi. Ich habe das zunächst auch so verstanden, aber wenn es so wäre dann hätte mein erster Code ja laufen müssen. Vielleicht kann man sich den kleinen Umweg ja ab dem nächsten Update sparen.

Verfasst: 21.08.2008 02:18
von ts-soft
Dein Code läuft ja so auch, nur bei aktiviertem Debugger gibts natürlich
ne Warnung, weil da ist es wahrscheinlich das ein Programmierfehler
vorliegt, falscher Pfad.
Ohne Debugger passiert das was Du wünscht, es wird 0 zurückgegeben und
verzweigt.

Gruß
Thomas

Verfasst: 21.08.2008 02:44
von uweb
Dann war der ganze Aufwand fast umsonst. Na, immerhin bin ich jetzt klüger. Mal sehen wie lange meine grauen Zellen das speichern können. Einmal mehr : Danke!
PS
Du bist ganz schön fix. Wollte vorhin dem anderen Player selbst helfen und bis ich fertig war hattest Du schon geantwortet.