Irgendwie funktioniert das mit 'BindGadgetEvent()' noch nicht so korrekt. Zuerst habe ich festgestellt, dass wenn man selbst 'BindGadgetEvent()' nutzt, der Callback davon vor dem des TabBarGadget-internen Callbacks aufgerufen wird. Deswegen habe ich eine neue Procedure dazu gebastelt, die den internen Callback immer zuerst aufruft. Die heißt jetzt 'BindTabBarGadgetEvent()'. Trotzdem bekomme ich im 'callback()' immer das Gadget, das zuletzt ausgewählt war (CHANGED2 im Debugfenster) und nicht das, was ich gerade bei diesem Event angeklickt habe (CHANGED3 im Debugfenster). Ich habe noch nicht ganz raus wie ich das ändern kann. Weil das brauche ich unbedingt.
Außerdem würde ich gerne wissen, was 'GetTabBarGadgetItemPosition()' genau tut. Gibt nicht 'GetTabBarGadgetState()' schon die aktuell ausgewählte Position zurück?
Code: Alles auswählen
Procedure BindTabBarGadgetEvent(Gadget.i, *Callback, EventType.i = #PB_All)
	UnbindGadgetEvent(Gadget, @TabBarGadget_Callback())
	BindGadgetEvent(Gadget, *Callback, EventType)
	BindGadgetEvent(Gadget, @TabBarGadget_Callback())
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
	
	Enumeration
		#Window
		#Gadget
	EndEnumeration
	
	UsePNGImageDecoder()
	
	OpenWindow(#Window, 0, 0, 400, 200, "TabBarGadget", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
	TabBarGadget(#Gadget, 10, 10, WindowWidth(#Window)-20, #TabBarGadget_DefaultHeight, #TabBarGadget_CloseButton, #Window)
	AddTabBarGadgetItem(#Gadget, #PB_Default, "Any tab "+Str(Random(999)))
	AddTabBarGadgetItem(#Gadget, #PB_Default, "Any tab "+Str(Random(999)))
	AddTabBarGadgetItem(#Gadget, #PB_Default, "Any tab "+Str(Random(999)))
	AddTabBarGadgetItem(#Gadget, #TabBarGadgetItem_NewTab, "", ImageID(CatchImage(#PB_Any, ?Icon)))
	
	SetTabBarGadgetState(#Gadget, 1)
	
	Procedure callback()
		If (EventType() = #TabBarGadget_EventType_Change)
			Debug "CHANGED2: " + GetTabBarGadgetState(#Gadget)
		EndIf
	EndProcedure
	
	BindTabBarGadgetEvent(#Gadget, @callback())
	
	Define Position.i
	
	Repeat
		
		Select WaitWindowEvent()
				
			Case #PB_Event_CloseWindow
				End
				
			Case #PB_Event_Gadget
				Select EventGadget()
					Case #Gadget
						Select EventType()
							Case #TabBarGadget_EventType_NewItem
								Position = AddTabBarGadgetItem(#Gadget, #PB_Default, "New tab "+Str(Random(999)))
								SetTabBarGadgetState(#Gadget, Position)
							Case #TabBarGadget_EventType_CloseItem
								RemoveTabBarGadgetItem(#Gadget, #TabBarGadgetItem_Event)
							Case #TabBarGadget_EventType_Change
								Debug "CHANGED3: " + GetTabBarGadgetState(#Gadget)
						EndSelect
				EndSelect
				
		EndSelect
		
	ForEver
	
	DataSection
		Icon:
		Data.q $0A1A0A0D474E5089,$524448490D000000,$1000000010000000,$FFF31F0000000608,$5845741900000061
		Data.q $72617774666F5374,$2065626F64410065,$6165526567616D49,$00003C65C9717964,$DA78544144495C02
		Data.q $3D105153684B53A4,$4B1A4987926D36F7,$B65D8DC160B44B69,$5742911161FC1115,$EC4445828A082775
		Data.q $175A845C2E170B22,$A576764A0A17155A,$B48685C42E94DC14,$098D20B442C54A90,$9D3EFBE6D24D34F9
		Data.q $7985E1705315F979,$E6733339CEE777DC,$1FC2CB3FF030C30A,$54860CD2E0E34421,$47B34328C75D3E0D
		Data.q $7F3BCC81624DA04A,$4FCC2E4CBBF54B0F,$380FBB9E34E2E00D,$07FAC70373395D6F,$C89147CAD8735651
		Data.q $8ABC30421EB4206C,$16E5C29F9B9B4572,$F137D839E77E0A00,$5E58B7912B1F9AEC,$F295807672A4A3F7
		Data.q $31617453B0063A54,$4C99417B594282B4,$4D87218B1EC60036,$498FE2C7EEB93E09,$A9CEE0755063B6A4
		Data.q $8811B0167E9E7F6A,$2D75F0BBA648ED14,$92C6BB87F0C74D06,$C646C68F15150BE4,$2A310AA42BCFEDF1
		Data.q $FF46C6816D9BD018,$6EBD136576055B46,$39DDAC9F61986BF2,$268FC9C230E7A477,$F780137A4A229973
		Data.q $38652BB24B872A45,$A2702A1B67BBB315,$91CDC4ECEA8B6D25,$5FA94DD3DE548B74,$2AB2FABA95530B2E
		Data.q $BFE4584049D99023,$54802481CCFB9785,$E0625989B1D50A36,$EF8D2A89EF5D3832,$0958DEA76895308B
		Data.q $B4F131D1F5046680,$3745182FE8E10212,$64D1DACC93AA566C,$72019B2FB19F3DE1,$7E4800D022292279
		Data.q $C3A13247122D6F87,$F0026966CC2C25D0,$88171E2ACA34CF9E,$36BF2CC629C40DA6,$C6EAE378FBF9CA48
		Data.q $470E8F77448F51C4,$6299009AF5B2E017,$467E04C70514B90C,$AB88785B98E2640D,$1E17FDCA3BDF9B14
		Data.q $80B73ED189D2B5E0,$0AE78EE4EA346EC3,$C7453C19A4EDE655,$71C181AD02DE5BBF,$8E3B16DB8C343C9C
		Data.q $2360405AB762A5D7,$FBC1C4F8F7D5D988,$3990F131E2DAA63E,$EFCB21164B3012FF,$4CDC000C02BB8D7D
		Data.q $0000B1AFD4924B07,$42AE444E45490000,$0000000000008260
	EndDataSection
CompilerEndIf
 
Okay, ich habe gerade gemerkt, dass ich es mit 'EventData()' machen kann. Hat sich also erst mal geklärt. Trotzdem komisch?