ImageGadget und #PB_Any

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

ImageGadget und #PB_Any

Beitrag von bluejoke »

Hallo!

Ich hab euch mal einen Testcode geschrieben, ich hoffe, Schuld ist ein PB-Problem und nicht meine eigene Dummheit...

Es geht darum, dass ImageGadget mir #PB_Any anscheinend nicht die korrekte ID zurückgibt.

Code: Alles auswählen

 Structure window
 	window_id.l
 	bgimage_id.l
 EndStructure

Global Image0.l
Image0 = CreateImage(0, 40, 40)

Procedure.l Pix_Window(x.l, y.l)
	value.window\window_id = OpenWindow(#PB_Any, 200, 200, 40, 40, "", #PB_Window_BorderLess)
  If value\window_id
    If CreateGadgetList(WindowID(value\window_id))
    	value\bgimage_id = ImageGadget(#PB_Any, 0, 0, 40, 40, Image0)
      ProcedureReturn @value
    EndIf
  EndIf
EndProcedure

Procedure ToggleState(gadget.l)
	If GetGadgetState(gadget.l) <> 0
		SetGadgetState(gadget.l, 0)
		Debug "ImageGadget deaktiviert mit der vom EventGadget gelieferten ID"
	Else
		SetGadgetState(gadget.l, Image0)
		Debug "ImageGadget aktiviert mit der vom EventGadget gelieferten ID"
	EndIf
EndProcedure

*window.window = Pix_Window(x, y)
Debug "Von ImageGadget() gelieferte ID: "+Str(*window\bgimage_id)

	Repeat
		;{ Event Zeugs
	  EventID = WindowEvent()
		If EventID = #PB_Event_Gadget
    	EventG = EventGadget()
    	Debug "Von EventGadget() gelieferte ID: "+Str(EventG)
    	ToggleState(EventG)
    EndIf
		Delay(1)
	Until EventID = #PB_Event_CloseWindow
Grüße,
Simon
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

Hmm es gibt nur irgendwie ne art handle zurück,
aber trotzdem können damit die befehle umgehen.
Sollte es Fehler geben und der Rückgabewert ist 0,
da ID ja auch 0 sein kann, könnte man das ja sonst nicht unterscheiden,
evtl gibt es darum halt das Handle oder sowas zurück.
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Nein, die Befehle können eben nicht damit umgehen.

Setz mal ein SetGadgetState(*window\bgimage_id, 0) ein!
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

Code: Alles auswählen

If OpenWindow(0, 0, 0, 100, 100, "TEST", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
 If CreateGadgetList(WindowID(0))
  ImageGadget(0, 0, 0, 32, 32, 0)
 EndIf
EndIf

Define hImg.l = CreateImage(#PB_Any, 32, 32)
StartDrawing(ImageOutput(hImg))
 Circle(16, 16, 16, $FFFFFF) 
StopDrawing()

SetGadgetState(0, ImageID(hImg))
  
While WaitWindowEvent() <> #PB_Event_CloseWindow: Wend
Handle = Api

ImageID(Handle) = PureBasic ID
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Kai hat geschrieben:Handle = Api

ImageID(Handle) = PureBasic ID
Darum gehts nicht sondern darum das er für sein mit #PB_Any erstelltes ImageGadget 2 verschiedene Handles hat. Das liegt an der Art wie er die strukturierte Variable erstellt die das Handle speichert. Deren Werte werden nur "flüchtig" gespeichert müssen aber, eine für die Dauer der Laufzeit, feste Addresse haben. Deshalb musst du einen entsprechenden Speicherbereich definieren:

Code: Alles auswählen

Structure WINDOW
	window_id.l
	bgimage_id.l
EndStructure

Global Image0.l = CreateImage(0, 40, 40)

Procedure.l Pix_Window(x.l, y.l)
	*value.window = AllocateMemory(SizeOf(WINDOW))
	
	*value\window_id = OpenWindow(#PB_Any,200,200,40,40,"",#WS_POPUP)	
	CreateGadgetList(WindowID(*value\window_id))
	*value\bgimage_id = ImageGadget(#PB_Any,0,0,40,40,Image0)
		
	ProcedureReturn *value
EndProcedure

*window.window = Pix_Window(x, y)

Repeat
	EventID = WaitWindowEvent()

	If EventID = #PB_Event_Gadget
		Debug EventGadget()
		Debug *window\bgimage_id
	EndIf
Until EventID = #PB_Event_CloseWindow
Zuletzt geändert von Fluid Byte am 23.03.2007 22:40, insgesamt 1-mal geändert.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Fluid Byte hat geschrieben:Darum gehts nicht sondern darum das er für sein mit #PB_Any erstelltest ImageGadget 2 verschiedene Handles hat. Das liegt an der Art wie er die strukturierte Variable erstellt die das Handle speichert. Deren Werte werden nur "flüchtig" gespeichert müssen aber eine für die Dauer der Laufzeit feste Addresse haben. Deshalb musst du einen entsprechenden Speicherbereich definieren:
Danke! Ich habs verplant. Aber sehr einleuchtend, nachdem du es erläutert hast.

Bitte verschieben nach Anfänger / Allgemein
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Gesperrt