LoadImage

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

LoadImage

Beitrag 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?
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

@Xaby
Guck Dir mal bitte FileSize in der Hilfe an :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Beitrag 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]
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Beitrag 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.
Antworten