Code: Select all
; Define Icons
#Icons=10
Structure NOTIFYICONDATA_
cbSize.l
hwnd.i
uId.l
uFlags.l
uCallbackMessage.l
hIcon.i
StructureUnion
szTip.s{64}
szTipEx.s{128}
EndStructureUnion
dwState.l
dwStateMask.l
szInfo.s{256}
StructureUnion
uTimeout.l
uVersion.l
EndStructureUnion
szInfoTitle.s{64}
dwInfoFlags.l
guidItem.GUID
hBalloonIcon.i
EndStructure
Global MyHandle
Global SysTrayInfo.NOTIFYICONDATA_ ; Handle für Balloon-Tooltip über dem SysTray-Icon
Prototype.l ProtoAccessibleObjectFromPoint(x.l,y.l,*ia,*var)
Global AccessibleObjectFromPoint.ProtoAccessibleObjectFromPoint
Global Dim Icon(#Icons)
For i=0 To #Icons
Icon(i)=CreateImage(i,24,24,24,#Black)
StartDrawing(ImageOutput(i))
Box(1,1,22,i*2,$c0c0c0)
Box(1,1+i*2,22,22-i*2,#Blue)
StopDrawing()
Next i
#SysTray=0
Global Icon_File.s=ProgramFilename()
Global Icon_Lib.i
Global Icon_Count.i
Global *Icon_Group.GRPIconDIR
Global *Icon_Image.IconIMAGE
; EndDefine
Procedure SystrayBalloon_(Title.s,Message.s,Flags)
#NIIF_LARGE_ICON= $20
#NIIF_RESPECT_QUIET_TIME= $80
#TenSeconds=10000; kürzer gehts nicht
If OSVersion() >=#PB_OS_Windows_Vista
SysTrayInfo\cbSize=SizeOf(NOTIFYICONDATA_)
ElseIf OSVersion() >=#PB_OS_Windows_XP
SysTrayInfo\cbSize=OffsetOf(NOTIFYICONDATA_\hBalloonIcon)
ElseIf OSVersion() >=#PB_OS_Windows_2000
SysTrayInfo\cbSize=OffsetOf(NOTIFYICONDATA_\guidItem)
Else
SysTrayInfo\cbSize=OffsetOf(NOTIFYICONDATA_\szTip) + SizeOf(NOTIFYICONDATA_\szTip)
EndIf
If SysTrayInfo\cbSize
SysTrayInfo\uVersion=#NOTIFYICON_VERSION
SysTrayInfo\uCallbackMessage=#WM_NOTIFYICON
SysTrayInfo\uId=#Null; SysTray
SysTrayInfo\uFlags=#NIF_INFO|#NIF_TIP;|#TTS_NOPREFIX
SysTrayInfo\uTimeout=#TenSeconds
;Shell_NotifyIcon_(#NIM_SETVERSION,@SysTrayInfo)
SysTrayInfo\hwnd=MyHandle
SysTrayInfo\dwInfoFlags=Flags
SysTrayInfo\dwState=#NIS_SHAREDICON
SysTrayInfo\szInfoTitle=Left(Title,63)
SysTrayInfo\szInfo=Left(Message,255)
If Message
Protected ToolTip.s=StringField(Message,CountString(Message,#CR$)+1,#CR$)
EndIf
SysTrayInfo\szTip=ToolTip.s
ProcedureReturn Shell_NotifyIcon_(#NIM_MODIFY,@SysTrayInfo)
EndIf
ProcedureReturn #False
EndProcedure
Procedure ChangeIcon(n)
If IconActive<>n
IconActive=n
ChangeSysTrayIcon(#SysTray,Icon(n))
EndIf
EndProcedure
MyHandle=OpenWindow(0,0,0,0,0,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_Invisible)
AddWindowTimer(0,666,200)
AddSysTrayIcon(#SysTray,MyHandle,Icon(1))
SystrayBalloon_("'Hey'","Just click on the tray icon to quit...",#NIIF_USER|#NIIF_NOSOUND|#NIIF_LARGE_ICON|#NIIF_RESPECT_QUIET_TIME)
Repeat
Select WaitWindowEvent(10)
Case #PB_Event_SysTray; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Mausklick im Systray ~~~~~~
Select EventType()
Case #PB_EventType_LeftClick
End
EndSelect
Case #PB_Event_Timer
If EventTimer()=666
ChangeIcon(Random(#Icons))
EndIf
EndSelect
Until quit