It is nothing to do, only include this file before your code.
There is not support for #PB_Any in AddTrayIcon!
Code: Select all
DeclareModule SysTray
Declare AddTrayIcon(ID, WindowID, ImageID)
Declare ChangeTrayIcon(ID, ImageID)
Declare RemoveTrayIcon(ID)
Declare TrayIconToolTip(ID, Text.s)
EndDeclareModule
Module SysTray
EnableExplicit
Global TB_Message = RegisterWindowMessage_("TaskbarCreated")
Structure _TrayIcon
ID.i
WindowID.i
ImageID.i
Text.s
EndStructure
Global NewList TrayIcon._TrayIcon()
Procedure Callback(hWnd, Msg, wParam, lParam)
If Msg = TB_Message
With TrayIcon()
ForEach TrayIcon()
AddSysTrayIcon(\ID, \WindowID, \ImageID)
SysTrayIconToolTip(\ID, \Text)
Next
EndWith
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
SetWindowCallback(@Callback())
Procedure AddTrayIcon(ID, WindowID, ImageID)
Protected Result
Result = AddSysTrayIcon(ID, WindowID, ImageID)
AddElement(TrayIcon())
TrayIcon()\ID = ID
TrayIcon()\WindowID = WindowID
TrayIcon()\ImageID = ImageID
ProcedureReturn Result
EndProcedure
Procedure ChangeTrayIcon(ID, ImageID)
ChangeSysTrayIcon(ID, ImageID)
ForEach TrayIcon()
If TrayIcon()\ID = ID
TrayIcon()\ImageID = ImageID
Break
EndIf
Next
EndProcedure
Procedure RemoveTrayIcon(ID)
RemoveSysTrayIcon(ID)
If ID = #PB_All
ClearList(TrayIcon())
Else
ForEach TrayIcon()
If TrayIcon()\ID = ID
DeleteElement(TrayIcon())
Break
EndIf
Next
EndIf
EndProcedure
Procedure TrayIconToolTip(ID, Text.s)
SysTrayIconToolTip(ID, Text)
ForEach TrayIcon()
If TrayIcon()\ID = ID
TrayIcon()\Text = Text
Break
EndIf
Next
EndProcedure
EndModule
Macro AddSysTrayIcon(ID, WindowID, ImageID)
SysTray::AddTrayIcon(ID, WindowID, ImageID)
EndMacro
Macro ChangeSysTrayIcon(ID, ImageID)
SysTray::ChangeTrayIcon(ID, ImageID)
EndMacro
Macro RemoveSysTrayIcon(ID)
SysTray::RemoveTrayIcon(ID)
EndMacro
Macro SysTrayIconToolTip(ID, Text)
SysTray::TrayIconToolTip(ID, Text)
EndMacro
CompilerIf #PB_Compiler_IsMainFile
EnableExplicit
Define IconName$, Event
If OpenWindow(0, 100, 150, 300, 100, "PureBasic - SysTray Example", #PB_Window_SystemMenu)
; .ico format is available only on Windows
IconName$ = #PB_Compiler_Home + "examples/sources/Data/CdPlayer.ico"
AddSysTrayIcon(1, WindowID(0), LoadImage(0, IconName$))
AddSysTrayIcon(2, WindowID(0), LoadImage(1, IconName$))
SysTrayIconToolTip(1, "Icon 1")
SysTrayIconToolTip(2, "Icon 2")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_SysTray
If EventType() = #PB_EventType_LeftDoubleClick
MessageRequester("SysTray", "Left DoubleClick on SysTrayIcon "+Str(EventGadget()),0)
ChangeSysTrayIcon (EventGadget(), LoadImage(0, IconName$))
SysTrayIconToolTip(EventGadget(), "Changed !")
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
CompilerEndIf