Seite 1 von 2

GetGadgetState()

Verfasst: 17.08.2007 17:59
von GreyEnt
Hallo, ihr Progger.
hab gerade ein Problem mit GetGadgetState
Der soll die ImageID eines ButtonImageGadget rausgeben.
Ich komme einfach nicht drauf was ich da falsch mache. :?

In Zeile 36 liefert mir der Debug eine Nummer die gibts garnicht. :)

Code: Alles auswählen

OpenWindow(0,0,0,640,480,"Test",#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
TextGadget(0,10, 10,090,20,"Team")
TextGadget(1,100, 10,090,20,"Spieler")
LoadFont(1,"Arial",26,#PB_Font_Bold)
SetGadgetFont(#PB_Default,FontID(1))
TextGadget(10,10,50,40,40,"1",#PB_Text_Center |#PB_Text_Border)
TextGadget(11,10,140,40,40,"2",#PB_Text_Center |#PB_Text_Border)
TextGadget(12,10,230,40,40,"3",#PB_Text_Center |#PB_Text_Border)
TextGadget(13,10,320,40,40,"4",#PB_Text_Center |#PB_Text_Border)
SetGadgetColor(10, #PB_Gadget_FrontColor,#Red)
SetGadgetColor(11, #PB_Gadget_FrontColor,#Green)
SetGadgetColor(12, #PB_Gadget_FrontColor,#Blue)
SetGadgetColor(13, #PB_Gadget_FrontColor,#Gray)
SetGadgetFont(#PB_Default, #PB_Default)

LoadImage(0,"Bitmap\Gadget\Button-Mensch.bmp")
LoadImage(1,"Bitmap\Gadget\Button-KI.bmp")
LoadImage(2,"Bitmap\Gadget\Button-kein.bmp")

ButtonImageGadget(20,100,50,60,80, ImageID(0))
ButtonImageGadget(21,100,140,60,80, ImageID(0))
ButtonImageGadget(22,100,230,60,80, ImageID(0))
ButtonImageGadget(23,100,320,60,80, ImageID(0))

ButtonGadget(81,WindowWidth(0)-130, WindowHeight(0)-25,100,20,"Fertig")


Auswahl.s=""
Repeat
  Event = WindowEvent()    
  If Event = #PB_Event_Gadget
  Gadget  = EventGadget()  
  Select Gadget
   Case 20
   Debug(GetGadgetState(20))
   If GetGadgetState(20)=ImageID(0) : SetGadgetState(20,ImageID(1)) :EndIf
   If GetGadgetState(20)=ImageID(1) : SetGadgetState(20,ImageID(2)) :EndIf
   If GetGadgetState(20)=ImageID(2) : SetGadgetState(20,ImageID(0)) :EndIf
   Case 80
   Auswahl="Abbruch"
   Case 81
   Auswahl="Fertig"
  EndSelect
  EndIf
Until Event = #PB_Event_CloseWindow Or Auswahl<>""
CloseWindow(0)

Verfasst: 17.08.2007 18:05
von ts-soft
Die Nummer, die Du bei LoadImage übergibst, ist nicht die ImageID, sondern die PBID

Debug ImageID(PBID) ergibt die ImageID

Verfasst: 17.08.2007 18:08
von Vermilion
Das habe ich gerade versucht, aber das geht auch nicht. :)

Also das geht nicht:

Code: Alles auswählen

Debug ImageID(GetGadgetState(20))
Compiler hat geschrieben:#Image object not initialized

Verfasst: 17.08.2007 18:12
von GreyEnt
sorry ts-soft.

ich kann dir nicht folgen.
was ist PBID?
was muss ich machen?

Dis ist keine Verarsche, ich bin so. :)

Verfasst: 17.08.2007 18:15
von Vermilion
Die PureBasic ImageID ist eine andere als die eigentliche ID. Die eigentlich ID, die du zurückriegst ist, ist der System Handle, der Pointer zum Image im Speicher. Das System vergibt allem eine eindeutige Nummer.

Eigentlich müsste das funktionieren, meines wissen, aber es tut es nicht.. :?

Code: Alles auswählen

ImageID(GetGadgetState(#))

Verfasst: 17.08.2007 18:16
von Fluid Byte
Ich kann auch nicht ganz folgen aber das geht bei mir:

Code: Alles auswählen

hIcoApplication = LoadIcon_(0,#IDI_APPLICATION)
hicoExclamation = LoadIcon_(0,#IDI_EXCLAMATION)

OpenWindow(0,0,0,320,240,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ButtonImageGadget(0,10,10,200,50,hIcoApplication)

Repeat
	EventID = WaitWindowEvent()

	If EventID = #PB_Event_Gadget
		If GetGadgetState(0) = hIcoApplication
			SetGadgetState(0,hicoExclamation)
		Else
			SetGadgetState(0,hIcoApplication)
		EndIf
	EndIf
Until EventID = #PB_Event_CloseWindow

Verfasst: 17.08.2007 18:19
von ts-soft
Wenn im Souice für die Bilder Pfade wie #PB_CompilerHome + "Examples .."
hätte ich es ja getestet, aber so bin ich ehrlich gesagt zu faul.

PBID ist die PB Verwaltungsnummer des Objekts, ImageID ist das Handle.

Verfasst: 17.08.2007 18:20
von Vermilion
Also ohne die eine Debugzeile geht es jedenfalls.

Vielleicht ist es zu früh, diese Vermutung anzustellen, aber kann es sein, dass es sich vielleicht um einen PB Bug handelt? Theoretisch müsste es ja funktioneren.

Verfasst: 17.08.2007 18:26
von GreyEnt
Es soll sich eigenlich nur das Image von Gadget 20 ändern sobald man es anklickt. Nur so zur Info.

edit:

ach ja PB4.00 läuft bei mir.

Verfasst: 17.08.2007 18:35
von Kaeru Gaman
warum es nicht korrekt verglichen wird, weiß ich auch nicht.

grundsätzlich ist aber die herangehensweise sowieso etwas unglücklich mit
wenn statusabfrage dann statussetzen.

sowas regelt man über counter-variablen, und setzt immer nur neu.

hab hier auch mal nen bilderzeuger hinzugefügt anstatt der lade-befehle...

Code: Alles auswählen

OpenWindow(0,0,0,640,480,"Test",#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
TextGadget(0,10, 10,090,20,"Team")
TextGadget(1,100, 10,090,20,"Spieler")
LoadFont(1,"Arial",26,#PB_Font_Bold)
SetGadgetFont(#PB_Default,FontID(1))
TextGadget(10,10,50,40,40,"1",#PB_Text_Center |#PB_Text_Border)
TextGadget(11,10,140,40,40,"2",#PB_Text_Center |#PB_Text_Border)
TextGadget(12,10,230,40,40,"3",#PB_Text_Center |#PB_Text_Border)
TextGadget(13,10,320,40,40,"4",#PB_Text_Center |#PB_Text_Border)
SetGadgetColor(10, #PB_Gadget_FrontColor,#Red)
SetGadgetColor(11, #PB_Gadget_FrontColor,#Green)
SetGadgetColor(12, #PB_Gadget_FrontColor,#Blue)
SetGadgetColor(13, #PB_Gadget_FrontColor,#Gray)
SetGadgetFont(#PB_Default, #PB_Default)

For n=0 To 2
  CreateImage(n,60,80)
  StartDrawing(ImageOutput(n))
    For t = 0 To n
      Circle(30,20+20*t,10,$ffffff)
    Next
  StopDrawing()
Next

ButtonImageGadget(20,100,50,60,80, ImageID(0))
ButtonImageGadget(21,100,140,60,80, ImageID(0))
ButtonImageGadget(22,100,230,60,80, ImageID(0))
ButtonImageGadget(23,100,320,60,80, ImageID(0))

P1 = 0
P2 = 0
P3 = 0
P4 = 0

ButtonGadget(81,WindowWidth(0)-130, WindowHeight(0)-25,100,20,"Fertig")


Auswahl.s=""
Repeat
  Event = WindowEvent()   
  If Event = #PB_Event_Gadget
  Gadget  = EventGadget() 
  Select Gadget
   Case 20
    P1 + 1 : If P1 > 2 : P1 = 0 : EndIf
    SetGadgetState(20,ImageID(P1))
   Case 21
    P2 + 1 : If P2 > 2 : P2 = 0 : EndIf
    SetGadgetState(21,ImageID(P2))
   Case 22
    P3 + 1 : If P3 > 2 : P3 = 0 : EndIf
    SetGadgetState(22,ImageID(P3))
   Case 23
    P4 + 1 : If P4 > 2 : P4 = 0 : EndIf
    SetGadgetState(23,ImageID(P4))

   Case 80
   Auswahl="Abbruch"
   Case 81
   Auswahl="Fertig"
  EndSelect
  EndIf
Until Event = #PB_Event_CloseWindow Or Auswahl<>""
CloseWindow(0)
PS:
> In Zeile 36 liefert mir der Debug eine Nummer die gibts garnicht.

wie schon die kollegen sagten...
er liefert dir keine Nummer (PBID) sondern die ImageID (Handle)