Open source for PBOSL
I notice the PB4 source code is simplier than my previous version in PB3.94
Features :
- ADDED : toolbar gadgets (button, text, spin, .... 17 gadgets supported)
- ADDED : toolbar popup menu
- ADDED : toolbar grouped toggle buttons
- ADDED : toolbar drop-down style button
Demo Video : http://www.screencast.com/users/rineddy ... 9b4c770d01
Code: Select all
;/// ToolbarPlus for PB 4.XX (open source)
;{ Utils
Macro ValidateGadgetID(Result, ID, gadget)
If ID=#PB_Any
ID=Result
gadget=GadgetID(ID)
Else
gadget=Result
EndIf
EndMacro
;}
;{ ToolbarPlus Functions
Structure ToolbarPlusMenu
ToolbarPlusParent.l
ToolbarPlus.l
ToolbarPlusID.l
ButtonID.l
ButtonArrow.l
MenuID.l
EndStructure
Global NewList ToolbarPlusMenu.ToolbarPlusMenu()
CompilerIf Defined(TBN_DROPDOWN, #PB_Constant)=#False
#TBN_DROPDOWN=-710
#TBSTYLE_DROPDOWN=$8
#BTNS_WHOLEDROPDOWN=$80
CompilerEndIf
ProcedureDLL ToolbarContainerHeight() ;Get default height for toolbar gadget
Shared ToolbarPlus
If ToolbarPlus
GetClientRect_(ToolbarPlus, sz.RECT)
ProcedureReturn sz\bottom-sz\top
EndIf
EndProcedure
ProcedureDLL ToolbarCenterGadget(ID) ;Center gadget vertically inside ToolbarContainer
ResizeGadget(ID, #PB_Ignore, GadgetY(ID)+(ToolbarContainerHeight()-GadgetHeight(ID))/2, #PB_Ignore, #PB_Ignore)
EndProcedure
ProcedureDLL SetToolBarArrow(SimpleArrow.b=#False) ;Creates a drop-down style button
Shared ToolbarPlusParent
Shared ToolbarPlus
Shared ToolbarPlusID
;get button
Protected pos.l=SendMessage_(ToolbarPlus, #TB_BUTTONCOUNT, 0, 0)-1
Protected button.TBBUTTON
SendMessage_(ToolbarPlus, #TB_GETBUTTON, pos, @button)
If (button\fsStyle & #TBSTYLE_SEP) : ProcedureReturn 0 : EndIf
;change button style
If SimpleArrow
button\fsStyle=button\fsStyle | #TBSTYLE_DROPDOWN | #BTNS_WHOLEDROPDOWN
Else
button\fsStyle=button\fsStyle | #TBSTYLE_DROPDOWN
EndIf
SendMessage_(ToolbarPlus, #TB_DELETEBUTTON, pos, 0)
SendMessage_(ToolbarPlus, #TB_INSERTBUTTON, pos+1, button)
EndProcedure
ProcedureDLL SetToolBarMenu(MenuID) ;Specifies that the button will display a popup menu.
Shared ToolbarPlusParent
Shared ToolbarPlus
Shared ToolbarPlusID
;get button
Protected pos.l=SendMessage_(ToolbarPlus, #TB_BUTTONCOUNT, 0, 0)-1
Protected button.TBBUTTON
SendMessage_(ToolbarPlus, #TB_GETBUTTON, pos, @button)
If (button\fsStyle & #TBSTYLE_SEP) : ProcedureReturn 0 : EndIf
;get dropdown-arrow mode
Protected ButtonArrow=0
If (button\fsStyle & #TBSTYLE_DROPDOWN) : ButtonArrow=1 : EndIf
AddElement(ToolbarPlusMenu())
ToolbarPlusMenu()\ToolbarPlusParent=ToolbarPlusParent
ToolbarPlusMenu()\ToolbarPlus=ToolbarPlus
ToolbarPlusMenu()\ToolbarPlusID=ToolbarPlusID
ToolbarPlusMenu()\ButtonArrow=ButtonArrow
ToolbarPlusMenu()\ButtonID=button\idCommand
ToolbarPlusMenu()\MenuID=MenuID
EndProcedure
ProcedureDLL SetToolBarToggle(Grouped)
Shared ToolbarPlusParent
Shared ToolbarPlus
Shared ToolbarPlusID
;get button info
Protected pos.l=SendMessage_(ToolbarPlus, #TB_BUTTONCOUNT, 0, 0)-1
Protected button.TBBUTTON
SendMessage_(ToolbarPlus, #TB_GETBUTTON, pos, @button)
If (button\fsStyle & #TBSTYLE_SEP) : ProcedureReturn 0 : EndIf
;change button
If Grouped
button\fsStyle=button\fsStyle | #TBSTYLE_CHECKGROUP
Else
button\fsStyle=button\fsStyle | #TBSTYLE_CHECK
EndIf
SendMessage_(ToolbarPlus, #TB_DELETEBUTTON, pos, 0)
SendMessage_(ToolbarPlus, #TB_INSERTBUTTON, pos+1, button)
EndProcedure
ProcedureDLL ToolBarPlusCB(Window.l, message.l, wParam.l, lParam.l, Result.l) ;ToolbarPlus callback procedure.
Shared ToolbarPlus_Toolbar.l
Shared ToolbarPlus_ToolbarParent.l
Shared ToolbarPlus_ButtonID.l
Shared ToolbarPlus_PressedArrow.b
Shared ToolbarPlus_PopupX.l
Shared ToolbarPlus_PopupY.l
ToolbarPlus_Toolbar=0
ToolbarPlus_ButtonID=0
ToolbarPlus_PressedArrow=0
ToolbarPlus_PopupX=0
ToolbarPlus_PopupY=0
If Result<>#PB_ProcessPureBasicEvents : ProcedureReturn Result : EndIf
;detect toolbar events
Select message
Case #WM_COMMAND
ToolbarPlus_Toolbar=lParam
ToolbarPlus_ButtonID=wParam ;(wParam -> high word = 0)
ToolbarPlus_PressedArrow=0
Case #WM_NOTIFY
*msgTB.NMTOOLBAR=lParam
If *msgTB\hdr\code=#TBN_DROPDOWN
ToolbarPlus_Toolbar=*msgTB\hdr\hwndFrom
ToolbarPlus_ButtonID=*msgTB\iItem
ToolbarPlus_PressedArrow=1
EndIf
EndSelect
;validate found results
If ToolbarPlus_Toolbar
Protected classname.s=Space(1000)
Protected lg=GetClassName_(ToolbarPlus_Toolbar, @classname, Len(classname))
classname=LCase(Left(classname, lg))
If classname="toolbarwindow32"
SendMessage_(ToolbarPlus_Toolbar, #TB_GETRECT, ToolbarPlus_ButtonID, @rc.RECT)
MapWindowPoints_(ToolbarPlus_Toolbar, 0, @rc, 2)
ToolbarPlus_PopupX=rc\left
ToolbarPlus_PopupY=rc\bottom
ToolbarPlus_ToolbarParent=GetParent_(ToolbarPlus_Toolbar)
Else
ToolbarPlus_Toolbar=0
ToolbarPlus_ButtonID=0
ToolbarPlus_PressedArrow=0
ToolbarPlus_PopupX=0
ToolbarPlus_PopupY=0
EndIf
EndIf
; ===================
; toolbar popup menu
; ===================
If ToolbarPlus_Toolbar
ForEach ToolbarPlusMenu()
Protected ButtonID=ToolbarPlusMenu()\ButtonID
Protected ButtonArrow=ToolbarPlusMenu()\ButtonArrow
Protected ToolbarPlusParent=ToolbarPlusMenu()\ToolbarPlusParent
Protected ToolbarPlus=ToolbarPlusMenu()\ToolbarPlus
Protected MenuID=ToolbarPlusMenu()\MenuID
If ToolbarPlus=ToolbarPlus_Toolbar And ButtonID=ToolbarPlus_ButtonID
If IsMenu(MenuID) And ButtonArrow=ToolbarPlus_PressedArrow
DisplayPopupMenu(MenuID, ToolbarPlus, ToolbarPlus_PopupX, ToolbarPlus_PopupY)
ProcedureReturn 0
EndIf
EndIf
Next
EndIf
ProcedureReturn Result
EndProcedure
ProcedureDLL ToolbarPlusCB_Toolbar() ;ToolbarPlusCB() -> active toolbar
Shared ToolbarPlus_Toolbar
ProcedureReturn ToolbarPlus_Toolbar
EndProcedure
ProcedureDLL ToolbarPlusCB_ButtonID() ;ToolbarPlusCB() -> pressed button ID
Shared ToolbarPlus_ButtonID
ProcedureReturn ToolbarPlus_ButtonID
EndProcedure
ProcedureDLL ToolbarPlusCB_PressedArrow() ;ToolbarPlusCB() -> pressed button arrow
Shared ToolbarPlus_PressedArrow
ProcedureReturn ToolbarPlus_PressedArrow
EndProcedure
ProcedureDLL ToolbarPlusCB_PopupX() ;ToolbarPlusCB() -> popup position X
Shared ToolbarPlus_PopupX
ProcedureReturn ToolbarPlus_PopupX
EndProcedure
ProcedureDLL ToolbarPlusCB_PopupY() ;ToolbarPlusCB() -> popup position Y
Shared ToolbarPlus_PopupY
ProcedureReturn ToolbarPlus_PopupY
EndProcedure
;}
;{ ToolbarPlus Gadgets
ProcedureDLL CreateToolBarPlus(ID, parent) ;Create toolbar plus
; ====================
; Create
; ====================
Shared ToolbarPlusParent
Shared ToolbarPlus
Shared ToolbarPlusID
Result=CreateToolBar(ID, parent)
ToolbarPlusID=ID
ToolbarPlusParent=parent
ValidateGadgetID(Result, ToolbarPlusID, ToolbarPlus)
; ====================
; Change Style
; ====================
#TB_SETEXTENDEDSTYLE=$400+84
#TB_GETEXTENDEDSTYLE=$400+85
#TBSTYLE_EX_DRAWDDARROWS=$1
Protected s=SendMessage_(ToolbarPlus, #TB_GETEXTENDEDSTYLE, 0, 0) | #TBSTYLE_EX_DRAWDDARROWS
SendMessage_(ToolbarPlus, #TB_SETEXTENDEDSTYLE, 0, s)
ProcedureReturn Result
EndProcedure
ProcedureDLL ToolbarContainer(ID, offsetX, width, flag=0) ;Add toolbar container
Shared ToolbarPlusParent
Shared ToolbarPlus
Shared ToolbarPlusID
; ====================
; Prepare
; ====================
Protected pos.l=SendMessage_(ToolbarPlus, #TB_BUTTONCOUNT, 0, 0)
Protected separator.TBBUTTON
ToolBarSeparator()
;set separator width
SendMessage_(ToolbarPlus, #TB_GETBUTTON, pos, @separator)
separator\iBitmap=width+offsetX
SendMessage_(ToolbarPlus, #TB_DELETEBUTTON, pos, 0)
SendMessage_(ToolbarPlus, #TB_INSERTBUTTON, pos, separator)
;get separator position
SendMessage_(ToolbarPlus, #TB_GETITEMRECT, pos, @rc.RECT)
; ====================
; Create
; ====================
Protected x.l=rc\left
Protected y.l=0
Protected h.l=ToolbarContainerHeight()
Protected w.l=width+offsetX
CompilerIf #PB_Compiler_Version<430
CreateGadgetList(ToolbarPlus)
CompilerElse
UseGadgetList(ToolbarPlus)
CompilerEndIf
Result=ContainerGadget(ID, x, y, w, h, flag)
ProcedureReturn Result
EndProcedure
ProcedureDLL ToolBarSpace(width=5) ;Add toolbar space
result=ToolbarContainer(#PB_Any, width, 0)
CloseGadgetList()
ProcedureReturn result
EndProcedure
ProcedureDLL ToolbarComboBox(ID, offsetX, offsetY, width, height, flags=0) ;Add toolbar ComboboxGadget
If ToolbarContainer(#PB_Any, offsetX, width)
Result=ComboBoxGadget(ID, offsetX, offsetY, width, height, flags)
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
CloseGadgetList()
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL ToolbarCheckBox(ID, offsetX, offsetY, width, height, text$, flags=0) ;Add toolbar CheckBoxGadget
If ToolbarContainer(#PB_Any, offsetX, width)
Result=CheckBoxGadget(ID, offsetX, offsetY, width, height, text$, flags)
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
CloseGadgetList()
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL ToolbarOption(ID, offsetX, offsetY, width, height, text$, close.b=#False) ;Add toolbar OptionGadget (with close flag)
Static ToolbarOptionContainerID
If ToolbarOptionContainerID=0
; ====================
; open option list
; ====================
ToolbarOptionContainerID=ToolbarContainer(#PB_Any, offsetX, width)
Else
Shared ToolbarPlus
Protected pos.l=SendMessage_(ToolbarPlus, #TB_BUTTONCOUNT, 0, 0)
Protected separator.TBBUTTON
ToolBarSeparator()
;set separator width
SendMessage_(ToolbarPlus, #TB_GETBUTTON, pos, @separator)
separator\iBitmap=width+offsetX
SendMessage_(ToolbarPlus, #TB_DELETEBUTTON, pos, 0)
SendMessage_(ToolbarPlus, #TB_INSERTBUTTON, pos, separator)
;set container width
offsetX+GadgetWidth(ToolbarOptionContainerID)
ResizeGadget(ToolbarOptionContainerID, #PB_Ignore, #PB_Ignore, offsetX+width, #PB_Ignore)
EndIf
If ToolbarOptionContainerID
; ====================
; creation new option
; ====================
Result=OptionGadget(ID, offsetX, offsetY, width, height, text$)
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
; ====================
; close option list
; ====================
If close
CloseGadgetList()
ToolbarOptionContainerID=0
EndIf
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL ToolbarButton(ID, offsetX, offsetY, width, height, text$, flags=0) ;Add toolbar ButtonGadget
If ToolbarContainer(#PB_Any, offsetX, width)
Result=ButtonGadget(ID, offsetX, offsetY, width, height, text$, flags)
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
CloseGadgetList()
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL ToolbarButtonImage(ID, offsetX, offsetY, width, height, imageID, flags=0) ;Add toolbar ButtonImage
If ToolbarContainer(#PB_Any, offsetX, width)
CompilerIf #PB_Compiler_Version<420
Result=ButtonImageGadget(ID, offsetX, offsetY, width, height, imageID)
CompilerElse
Result=ButtonImageGadget(ID, offsetX, offsetY, width, height, imageID, flags)
CompilerEndIf
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
CloseGadgetList()
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL ToolbarString(ID, offsetX, offsetY, width, height, content$, flags=0) ;Add toolbar StringGadget
If ToolbarContainer(#PB_Any, offsetX, width)
Result=StringGadget(ID, offsetX, offsetY, width, height, content$, flags)
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
CloseGadgetList()
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL ToolbarIPAddress(ID, offsetX, offsetY, width, height) ;Add toolbar IPAddressGadget
If ToolbarContainer(#PB_Any, offsetX, width)
Result=IPAddressGadget(ID, offsetX, offsetY, width, height)
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
CloseGadgetList()
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL ToolbarHyperlink(ID, offsetX, offsetY, width, height, text$, color, flags=0) ;Add toolbar HyperLinkGadget
If ToolbarContainer(#PB_Any, offsetX, width)
Result=HyperLinkGadget(ID, offsetX, offsetY, width, height, text$, color, flags)
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
CloseGadgetList()
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL ToolbarDate(ID, offsetX, offsetY, width, height, formatDate$="", date=0, flags=0) ;Add toolbar DateGadget
If ToolbarContainer(#PB_Any, offsetX, width)
Result=DateGadget(ID, offsetX, offsetY, width, height, formatDate$, date, flags)
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
CloseGadgetList()
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL ToolbarProgressBar(ID, offsetX, offsetY, width, height, min, max, flags=0) ;Add toolbar ProgressBarGadget
If ToolbarContainer(#PB_Any, offsetX, width)
Result=ProgressBarGadget(ID, offsetX, offsetY, width, height, min, max, flags)
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
CloseGadgetList()
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL ToolbarSpin(ID, offsetX, offsetY, width, height, min, max, flags=0) ;Add toolbar SpinGadget
If ToolbarContainer(#PB_Any, offsetX, width)
Result=SpinGadget(ID, offsetX, offsetY, width, height, min, max, flags)
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
CloseGadgetList()
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL ToolbarTrackBar(ID, offsetX, offsetY, width, height, min, max, flags=0) ;Add toolbar TrackBarGadget
If ToolbarContainer(#PB_Any, offsetX, width)
Result=TrackBarGadget(ID, offsetX, offsetY, width, height, min, max, flags)
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
CloseGadgetList()
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL ToolbarScrollbar(ID, offsetX, offsetY, width, height, min, max, pageLegnth, flags=0) ;Add toolbar ScrollBarGadget
If ToolbarContainer(#PB_Any, offsetX, width)
Result=ScrollBarGadget(ID, offsetX, offsetY, width, height, min, max, pageLegnth, flags)
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
CloseGadgetList()
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL ToolbarImage(ID, offsetX, offsetY, width, height, imageID, flags=0) ;Add toolbar ImageGadget
If ToolbarContainer(#PB_Any, offsetX, width)
Result=ImageGadget(ID, offsetX, offsetY, width, height, imageID, flags)
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
CloseGadgetList()
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL ToolbarText(ID, offsetX, offsetY, width, height, text$, flags=0) ;Add toolbar TextGadget
If ToolbarContainer(#PB_Any, offsetX, width)
Result=TextGadget(ID, offsetX, offsetY, width, height, text$, flags)
ValidateGadgetID(Result, ID, gadget)
ToolbarCenterGadget(ID)
CloseGadgetList()
ProcedureReturn Result
EndIf
EndProcedure
;}
; ====================
; EXAMPLE
; ====================
Enumeration
#WIN=0
#TOOLBAR
#BUTTON
#COMBO
#STRINGS
#CHECK
#BAR
#BAR2
#TEXT
#CONTAINER_BOTTOM
#TOOLBAR_BOTTOM
#SPIN
#IPADRESS
EndEnumeration
If OpenWindow(#WIN, 100, 100, 700, 200, "Toolbar Plus For PB 4.X", #PB_Window_SystemMenu)
;{/// CREATE TOOLBAR TOP
CreateToolBarPlus(#TOOLBAR, WindowID(#WIN))
ToolbarText(#TEXT, 0, 0, 60, 14, "ToolbarPlus")
ToolBarSpace(40)
ToolBarStandardButton(10, #PB_ToolBarIcon_New, #PB_ToolBar_Toggle)
ToolBarStandardButton(11, #PB_ToolBarIcon_Save)
ToolBarSeparator()
CompilerIf #PB_Compiler_Version<430
ToolbarCombobox(#COMBO, 0, 0, 40, 500)
CompilerElse
ToolbarCombobox(#COMBO, 0, 0, 40, #PB_Ignore)
CompilerEndIf
ToolBarSeparator()
ToolbarButton(#BUTTON, 0, 0, 40, ToolbarContainerHeight()-2, "OK", #PB_Button_Toggle)
ToolBarSeparator()
ToolbarString(#STRINGS, 0, 0, 50, 20, "String", #PB_String_UpperCase)
ToolbarCheckBox(#CHECK, 5, 0, 70, 20, "CheckMe")
ToolBarSeparator()
ToolbarOption(#PB_Any, 0, 0, 30, 20, "1")
ToolbarOption(#PB_Any, 0, 0, 30, 20, "2")
ToolbarOption(#PB_Any, 0, 0, 30, 20, "3", #True)
ToolBarSeparator()
ToolbarProgressBar(#BAR, 0, 0, 20, 20, 0, 100, #PB_ProgressBar_Vertical)
ToolbarProgressBar(#BAR2, 5, 0, 40, 20, 0, 100)
ToolBarSeparator()
ToolbarHyperlink(#PB_Any, 0, 0, 150, 14, "http://www.purebasic.com", $0000FF, #PB_HyperLink_Underline)
AddGadgetItem(#COMBO, -1, "A")
AddGadgetItem(#COMBO, -1, "B")
SetToolBarButtonState(#TOOLBAR, 10, 1)
SetGadgetState(#CHECK, 1)
SetGadgetState(#BAR, 20)
SetGadgetState(#BAR2, 60)
ToolBarToolTip(#TOOLBAR, 10, "New document")
GadgetToolTip(#BAR, "veritcal progressbar")
SetGadgetColor(#TEXT, #PB_Gadget_BackColor, RGB(255, 0, 0))
SetGadgetColor(#TEXT, #PB_Gadget_FrontColor, RGB(255, 255, 255))
;}
;{/// CREATE TOOLBAR BOTTOM (inside ContainerGadget)
CreateImage(0, 32, 16)
StartDrawing(ImageOutput(0))
Box(0, 0, 32, 16, RGB(10, 152, 100))
Box(8, 4, 16, 8, RGB(255, 0, 0))
StopDrawing()
CreatePopupMenu(100)
MenuItem(10, "MenuID 10")
MenuItem(20, "MenuID 20")
CompilerIf #PB_Compiler_Version<430
CreateGadgetList(WindowID(#WIN))
CompilerElse
UseGadgetList(WindowID(#WIN))
CompilerEndIf
ContainerGadget(#CONTAINER_BOTTOM, 0, ToolBarHeight(#TOOLBAR), WindowWidth(#WIN), 32, #PB_Container_Double)
CreateToolBarPlus(#TOOLBAR_BOTTOM, GadgetID(#CONTAINER_BOTTOM))
ToolBarSeparator()
ToolbarIPAddress(#IPADRESS, 0, 0, 120, 20)
ToolbarDate(#PB_Any, 5, 0, 100, 20)
ToolBarSeparator()
ToolbarSpin(#SPIN, 0, 0, 40, 20, 0, 100, #PB_Spin_ReadOnly)
ToolbarTrackBar(#PB_Any, 5, 0, 60, 20, 0, 10, #PB_TrackBar_Ticks)
ToolBarSeparator()
ToolbarScrollbar(#PB_Any, 0, 0, 64, 20, 0, 100, 10)
ToolbarButtonImage(#PB_Any, 5, 0, 64, ToolbarContainerHeight(), ImageID(0))
ToolBarSeparator()
ToolBarImageButton(20, ImageID(0))
ToolBarStandardButton(15, #PB_ToolBarIcon_Find)
SetToolBarArrow()
SetToolBarMenu(100)
ToolBarStandardButton(16, #PB_ToolBarIcon_Print)
SetToolBarArrow(#True)
SetToolBarMenu(100)
ToolBarStandardButton(17, #PB_ToolBarIcon_Paste)
SetToolBarMenu(100)
ToolBarSeparator()
ToolBarStandardButton(100, #PB_ToolBarIcon_Help)
SetToolBarToggle(#True)
ToolBarStandardButton(101, #PB_ToolBarIcon_Help)
SetToolBarToggle(#True)
ToolBarStandardButton(102, #PB_ToolBarIcon_Help)
SetToolBarToggle(#True)
SetGadgetColor(#SPIN, #PB_Gadget_BackColor, RGB(255, 225, 10))
SetGadgetFont(#SPIN, LoadFont(1, "Arial", 12, #PB_Font_Bold))
SetGadgetText(#SPIN, "1")
;}
EndIf
Procedure mycallback(Window, message, wParam, lParam)
Protected Result=#PB_ProcessPureBasicEvents
;
;
; your code
;
; ===============================================
; Enable automatic popup menu
; ===============================================
Result=ToolBarPlusCB(Window, message, wParam, lParam, Result)
; ===============================================
; custom popup menu (without using SetToolbarMenu)
; ===============================================
If ToolbarPlusCB_Toolbar()=ToolBarID(#TOOLBAR)
If ToolbarPlusCB_ButtonID()=11 And ToolbarPlusCB_PressedArrow()=#False
Protected owner=ToolbarPlusCB_Toolbar()
Protected x=ToolbarPlusCB_PopupX()
Protected y=ToolbarPlusCB_PopupY()
DisplayPopupMenu(100, owner, x, y)
ProcedureReturn 1
EndIf
EndIf
;
;
; your code
;
ProcedureReturn Result
EndProcedure
SetWindowCallback(@mycallback(), #WIN)
; ====================
; EVENT LOOP
; ====================
Repeat
e=WaitWindowEvent()
If e=#PB_Event_ActivateWindow
;update ipadress
SetGadgetState(#IPADRESS, MakeIPAddress(127, 0, 0, Random(255)))
EndIf
If e=#PB_Event_Menu
m=EventMenu()
Debug "menuID="+Str(m)
EndIf
If e=#PB_Event_Gadget
g=EventGadget()
t=EventType()
Debug "gadgetID="+Str(g)+" eventType="+Str(t)+" state="+Str(GetGadgetState(g))
;update spin
SetGadgetText(#SPIN, Str(GetGadgetState(#SPIN)))
EndIf
Until e=#PB_Event_CloseWindow