GetGadgetState()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

GetGadgetState()

Beitrag 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)
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 »

Die Nummer, die Du bei LoadImage übergibst, ist nicht die ImageID, sondern die PBID

Debug ImageID(PBID) ergibt die ImageID
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
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag 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
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

Beitrag von GreyEnt »

sorry ts-soft.

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

Dis ist keine Verarsche, ich bin so. :)
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag 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(#))
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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
Windows 10 Pro, 64-Bit / Outtakes | Derek
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 »

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.
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
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

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

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten