* * *    
Главная » Статьи » Код PB

Просмотров: 1699 | Дата: 08.05.2024 | Коментарии (0)

Отлавливаем соб.




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










Сайт посвящён языку программирования PureBasic — коммерческий компилятор языка программирования, использующего синтаксис BASIC. Предназначен для создания кроссплатформенных приложений для AmigaOS, Linux, Microsoft Windows, Windows NT и Mac OS X. Разработан компанией Fantaisie Software.