Code
#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
Global TimerStart=0
Global down_time=0
Global ClearTimer=0
Procedure MyWindowCallback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_USER
Select lParam
Case #WM_LBUTTONDOWN
TimerStart=1
ClearTimer=0
Debug "Начался отсчет времени"
Case #WM_RBUTTONDOWN
Debug "Right mousebutton click on Icon"
Case #WM_LBUTTONDBLCLK
Debug "Left button doublecklick on Icon"
Case #WM_MOUSEMOVE
Debug "Мышка движется над иконкой"
If TimerStart=1
ClearTimer+1
If ClearTimer>10
TimerStart=0
down_time = 0
Debug "Время нажатия сброшено!Руки трясутся???"
EndIf
EndIf
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"
Case #WM_LBUTTONUP
Debug "UP"
TimerStart=0
down_time = 0
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)
If CreateGadgetList(WindowID(#Window_0))
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(100)
;********** Считаемвремя - цикл повторяется каждые 100 милисек. 30 раз это 3 сек.
If TimerStart=1
down_time+1
EndIf
If down_time=30
ShowBalloonTip("Ваше событие свершилось!","Вы смогли удержать мышку нажатой"+Chr(13)+"В заданных пределах 3 секунды","Поздравляю!!!",#NIIF_INFO)
MessageRequester("Событие свершилось!","3 cek")
down_time=0:TimerStart=0
EndIf
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
EndIf
End
DataSection
Icon:
IncludeBinary "c:\37.ico" ; укажите свою иконку
EndDataSection