Mark.
Code: Select all
#TRAY_ID = 999
#NIM_ADD = $0
#NIM_MODIFY = $1
#NIM_DELETE = $2
#NIF_MESSAGE = $1
#NIF_ICON = $2
#NIF_TIP = $4
#NIF_STATE = $8
#NIF_INFO = $10
#NIS_SHAREDICON = $2
#NIFF_NONE = $0
#NIIF_INFO = $1
#NIIF_WARNING = $2
#NIIF_ERROR = $3
#NIIF_NOSOUND = $10
#NIN_BALLOONSHOW=$402
#NIN_BALLOONHIDE=$403
#NIN_BALLOONTIMEOUT =$404
#NIN_BALLOONUSERCLICK=$405
#NOTIFYICON_VERSION = $3
#NOTIFYICONDATA_V1_SIZE = 88
#NOTIFYICONDATA_V2_SIZE = 488
#NOTIFYICONDATA_V3_SIZE = 504
Enumeration
#Window_0
#TRAYICON_0
#image_0
EndEnumeration
Structure IconData
cbSize.l
hwnd.l
uID.l
uFlags.l
uCallbackMessage.l
hIcon.l
szTip.b[128]
dwState.l
dwStateMask.l
szInfo.b[256]
StructureUnion
uTimeout.l
uVersion.l
EndStructureUnion
szInfoTitle.b[64]
dwInfoFlags.l
EndStructure
Procedure MyWindowCallback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_USER
Select lParam
Case #WM_LBUTTONDOWN
Debug "Left mousebutton click on Icon"
Case #WM_RBUTTONDOWN
Debug "Right mousebutton click on Icon"
Case #WM_LBUTTONDBLCLK
Debug "Left button doublecklick on Icon"
Case #WM_MOUSEMOVE
;Debug "Mouse moved over TrayIcon"
Case #NIN_BALLOONSHOW
Debug "SHow balloon"
Case #NIN_BALLOONTIMEOUT
Debug "Timeout or X pressed" ; The 'X' doesn't seem to be available in W2K?!
Case #NIN_BALLOONUSERCLICK
Debug "Balloon user click"
Case #NIN_BALLOONHIDE
Debug "Balloon closed"
EndSelect
EndSelect
ProcedureReturn Result
EndProcedure
Procedure.w GetDataSize()
If OpenLibrary(1,"VERSION.DLL")
BuffSize.l= CallFunction(1,"GetFileVersionInfoSizeA","shell32.dll",0)
If BuffSize>0
databuf.s=Space(BuffSize-1)
;Dim databuf.b(BuffSize-1)
Result=CallFunction(1,"GetFileVersionInfoA","shell32.dll",0,BuffSize,@databuf)
Result=CallFunction(1,"VerQueryValueA",@databuf,"\",@lpBuffer,@puLen)
CopyMemory(lpBuffer+10,@nVerMajor,2)
EndIf
CloseLibrary(1)
Select nVerMajor
Case 6
ProcedureReturn #NOTIFYICONDATA_V3_SIZE
Case 5
ProcedureReturn #NOTIFYICONDATA_V2_SIZE
Default
ProcedureReturn #NOTIFYICONDATA_V1_SIZE
EndSelect
EndIf
EndProcedure
Procedure StatusAreaAddIcon(tooltiptext.s)
Balloon.IconData\cbSize=GetDataSize()
Balloon\hwnd = WindowID(#Window_0)
Balloon\uID = #TRAY_ID
Balloon\uFlags = #NIF_MESSAGE | #NIF_ICON | #NIF_TIP
Balloon\hIcon = UseImage(#image_0)
Balloon\dwState = #NIS_SHAREDICON
Balloon\uCallbackMessage=#WM_USER
If OSVersion() < #PB_OS_Windows_2000
Balloon\uVersion = 0
Else
Balloon\uVersion = #NOTIFYICON_VERSION
EndIf
Balloon\uTimeout = 11000 ; The balloon will not disappear if you don't move the mouse!
Balloon\dwInfoFlags = #NIIF_INFO
If Balloon.IconData\cbSize=#NOTIFYICONDATA_V1_SIZE
PokeS(@Balloon\szTip, tooltiptext,64)
Else
PokeS(@Balloon\szTip, tooltiptext,128)
EndIf
Result= CallFunction(0,"Shell_NotifyIcon",#NIM_ADD,@Balloon)
EndProcedure
Procedure StatusAreaRemoveIcon()
Balloon.IconData\cbSize=GetDataSize()
Balloon\hwnd = WindowID(#Window_0)
Balloon\uID = #TRAY_ID
Result= CallFunction(0,"Shell_NotifyIcon",#NIM_DELETE,@Balloon)
EndProcedure
Procedure ShowBalloonTip(title.s,maintext.s,tooltiptext.s,IconType.l)
Balloon.IconData\cbSize=GetDataSize()
Balloon\hwnd = WindowID(#Window_0)
Balloon\uID = #TRAY_ID
Balloon\uFlags = #NIF_INFO | #NIF_MESSAGE | #NIF_ICON | #NIF_TIP
Balloon\hIcon = UseImage(#image_0)
Balloon\dwState = #NIS_SHAREDICON
Balloon\uCallbackMessage=#WM_USER
Balloon\uTimeout = 10000
If OSVersion() < #PB_OS_Windows_2000
Balloon\uVersion = 0
Else
Balloon\uVersion = #NOTIFYICON_VERSION
EndIf
Balloon\dwInfoFlags = IconType
If Balloon.IconData\cbSize=#NOTIFYICONDATA_V1_SIZE
PokeS(@Balloon\szTip, tooltiptext,64)
Else
PokeS(@Balloon\szTip, tooltiptext,128)
PokeS(@Balloon\szInfo,maintext.s,255)
PokeS(@Balloon\szInfoTitle,title.s,63)
EndIf
Result= CallFunction(0,"Shell_NotifyIcon",#NIM_MODIFY,@Balloon)
EndProcedure
OpenLibrary(0,"shell32.dll")
If OpenWindow(#Window_0,0,0,300,90,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Status Area(Systray) Balloon tip example") And CreateGadgetList(WindowID())
ButtonGadget (1, 50, 10,200, 20, "Add Status area icon")
ButtonGadget (2, 50, 30,200, 20, "Show Balloon tip")
ButtonGadget (3, 50, 50,200, 20, "Remove Icon")
CatchImage(#image_0,?Icon)
SetWindowCallback(@MyWindowCallback())
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadgetID()
Case 1
StatusAreaAddIcon("Tool tip text")
Case 2
ShowBalloonTip("Status Area Balloon Tip demo","This is the first line"+Chr(13)+"This should be the second line","Tool tip text",#NIIF_INFO)
Case 3
StatusAreaRemoveIcon()
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
StatusAreaRemoveIcon()
CloseLibrary(0)
EndIf
End
DataSection
Icon:
IncludeBinary "d:\PureBasic\Examples\Sources\Data\CdPlayer.ico"
EndDataSection