Code: Alles auswählen
; Quelle: http://www.purebasic.fr/english/viewtopic.php?p=66304#p66304
; auf die Schnelle auf 5.11 angepasst...
#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 = ImageID(#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 = ImageID(#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,"Status Area(Systray) Balloon tip example",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
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 EventGadget()
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 #PB_Compiler_Home + "Examples\Sources\Data\CdPlayer.ico"
EndDataSection
Grüße ... Kiffi