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?