nvo_tltips.sru 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. $PBExportHeader$nvo_tltips.sru
  2. $PBExportComments$ToolBar 用户对象
  3. forward
  4. global type nvo_tltips from nonvisualobject
  5. end type
  6. end forward
  7. type point from structure
  8. long x
  9. long y
  10. end type
  11. type msg from structure
  12. long hwnd
  13. long message
  14. long wparam
  15. long lparam
  16. long time
  17. point pt
  18. end type
  19. type rect from structure
  20. long left
  21. long top
  22. long right
  23. long bottom
  24. end type
  25. type toolinfo from structure
  26. long cbsize
  27. long uflags
  28. long hwnd
  29. long uid
  30. rect rect
  31. long hinstance
  32. long lpsztext
  33. end type
  34. global type nvo_tltips from nonvisualobject autoinstantiate
  35. end type
  36. type prototypes
  37. // ToolTips函数
  38. SubRoutine InitCommonControls() library "comctl32.dll"
  39. Function long CreateWindowExA(ulong dwExStyle, string ClassName, &
  40. long WindowName, ulong dwStyle, ulong X, ulong Y, ulong nWidth, &
  41. ulong nHeight, ulong hWndParent, ulong hMenu, ulong hInstance, &
  42. ulong lpParam) library "user32.dll" alias for "CreateWindowExA;Ansi"
  43. Function integer DestroyWindow(long hWnd) library "user32.dll"
  44. Function integer ToolTipMsg(long hWnd, long uMsg, long wParam, &
  45. REF TOOLINFO ToolInfo) library "user32.dll" Alias For "SendMessageA;Ansi"
  46. Function integer RelayMsg(long hWnd, long uMsg, long wParam, &
  47. REF MSG Msg) library "user32.dll" Alias For "SendMessageA;Ansi"
  48. //内存管理函数
  49. Function long LocalAlloc(long Flags, long Bytes) library "kernel32.dll"
  50. Function long LocalFree(long MemHandle) library "kernel32.dll"
  51. Function long lstrcpy(long Destination, string Source) library "kernel32.dll" alias for "lstrcpy;Ansi"
  52. end prototypes
  53. type variables
  54. //私有常量
  55. Private:
  56. //杂项常量
  57. CONSTANT string TOOLTIPS_CLASS = 'tooltips_class32'
  58. CONSTANT ulong CW_USEDEFAULT = 2147483648
  59. CONSTANT long WM_USER = 1024
  60. CONSTANT long WS_EX_TOPMOST = 8
  61. CONSTANT long WM_SETFONT = 48
  62. // ToolTips消息
  63. CONSTANT long TTM_ADDTOOL = WM_USER + 4
  64. CONSTANT long TTM_NEWTOOLRECT = WM_USER + 6
  65. CONSTANT long TTM_RELAYEVENT = WM_USER + 7
  66. CONSTANT long TTM_UPDATETIPTEXT = WM_USER + 12
  67. CONSTANT long TTM_TRACKACTIVATE = WM_USER + 17
  68. CONSTANT long TTM_TRACKPOSITION = WM_USER + 18
  69. //公共变量和常量
  70. Public:
  71. long hWndTT // Tooltip control window handle
  72. long ToolID = 1 // Tooltip internal ID
  73. //Tooltips标记
  74. CONSTANT integer TTF_CENTERTIP = 2
  75. CONSTANT integer TTF_RTLREADING = 4
  76. CONSTANT integer TTF_SUBCLASS = 16
  77. CONSTANT integer TTF_TRACK = 32
  78. CONSTANT integer TTF_ABSOLUTE = 128
  79. CONSTANT integer TTF_TRANSPARENT = 256
  80. CONSTANT integer TTF_DI_SETITEM = 32768
  81. end variables
  82. forward prototypes
  83. public subroutine relaymsg (dragobject object)
  84. public subroutine setfont (long hfont)
  85. public subroutine settipposition (integer x, integer y)
  86. public subroutine settiptext (dragobject object, long uid, long tiptext)
  87. public subroutine settiptext (dragobject object, long uid, string tiptext)
  88. public subroutine settrack (dragobject object, integer uid, boolean status)
  89. public subroutine updatetiprect (dragobject object, long uid, long left, long top, long right, long bottom)
  90. public function integer addtool (dragobject object, string tiptext, integer flags)
  91. end prototypes
  92. public subroutine relaymsg (dragobject object);//此函数用于向显示ToolTips窗口发送控制消息,代码如下:
  93. MSG Msg
  94. Msg.hWnd = Handle(Object)
  95. Msg.Message = 512 // WM_MOUSEMOVE
  96. Msg.WParam = Message.WordParm
  97. Msg.LParam = Message.LongParm
  98. RelayMsg(hWndTT,TTM_RELAYEVENT,0,Msg)
  99. end subroutine
  100. public subroutine setfont (long hfont);//此函数用于设置ToolTips窗口的字体,代码如下:
  101. Send(hWndTT,WM_SETFONT,hFont,1)
  102. end subroutine
  103. public subroutine settipposition (integer x, integer y);//此函数用于设置ToolTips的位置,代码如下:
  104. Send(hWndTT,TTM_TRACKPOSITION,0,Long(X,Y))
  105. end subroutine
  106. public subroutine settiptext (dragobject object, long uid, long tiptext);//此函数用于为ToolTips窗口设置新文本,代码如下:
  107. TOOLINFO ToolInfo
  108. ToolInfo.hWnd = Handle(Object)
  109. ToolInfo.uID = uID
  110. ToolInfo.lpszText = TipText
  111. ToolTipMsg(hWndTT,TTM_UPDATETIPTEXT,0,ToolInfo)
  112. end subroutine
  113. public subroutine settiptext (dragobject object, long uid, string tiptext);//此函数用于为ToolTips窗口设置新文本,代码如下:
  114. long lpszText
  115. lpszText = LocalAlloc(0,255)
  116. lStrCpy(lpszText,Left(TipText,255))
  117. SetTipText(Object,uId,lpszText)
  118. LocalFree(lpszText)
  119. end subroutine
  120. public subroutine settrack (dragobject object, integer uid, boolean status);//此函数用于激活或取消ToolTips窗口设置新文本,代码如下:
  121. //参数Status为True时激活,为False时取消
  122. TOOLINFO ToolInfo
  123. ToolInfo.cbSize = 40
  124. ToolInfo.hWnd = Handle(Object)
  125. ToolInfo.uID = uID
  126. If Status Then
  127. ToolTipMsg(hWndTT,TTM_TRACKACTIVATE,1,ToolInfo)
  128. Else
  129. ToolTipMsg(hWndTT,TTM_TRACKACTIVATE,0,ToolInfo)
  130. End If
  131. end subroutine
  132. public subroutine updatetiprect (dragobject object, long uid, long left, long top, long right, long bottom);//此函数用于更新ToolTips的矩形框,代码如下:
  133. TOOLINFO ToolInfo
  134. ToolInfo.hWnd = Handle(Object)
  135. ToolInfo.uID = uID
  136. ToolInfo.Rect.Left = Left
  137. ToolInfo.Rect.Top = Top
  138. ToolInfo.Rect.Right = Right
  139. ToolInfo.Rect.Bottom = Bottom
  140. ToolTipMsg(hWndTT,TTM_NEWTOOLRECT,0,ToolInfo)
  141. end subroutine
  142. public function integer addtool (dragobject object, string tiptext, integer flags);//此函数用于注册要显示ToolTips的控制,代码如下:
  143. TOOLINFO ToolInfo
  144. ToolInfo.cbSize = 40
  145. ToolInfo.uFlags = Flags
  146. ToolInfo.hWnd = Handle(Object)
  147. ToolInfo.hInstance = 0
  148. ToolInfo.uID = ToolID
  149. ToolID++
  150. ToolInfo.lpszText = LocalAlloc(0,80)
  151. POST LocalFree(ToolInfo.lpszText) //释放分配的内存
  152. LStrCpy(ToolInfo.lpszText,Left(tiptext,80))
  153. ToolInfo.Rect.Left = 0
  154. ToolInfo.Rect.Top = 0
  155. ToolInfo.Rect.Right = UnitsToPixels(Object.Width,XUnitsToPixels!)
  156. ToolInfo.Rect.Bottom = UnitsToPixels(Object.Height,YUnitsToPixels!)
  157. If ToolTipMsg(hWndTT,TTM_ADDTOOL, 0, ToolInfo) = 0 Then
  158. // MessageBox("错误","不能注册控件!",StopSign!,Ok!)
  159. Return(-1)
  160. End If
  161. Return(ToolID - 1)
  162. end function
  163. on nvo_tltips.create
  164. TriggerEvent( this, "constructor" )
  165. end on
  166. on nvo_tltips.destroy
  167. TriggerEvent( this, "destructor" )
  168. end on
  169. event constructor;//结构point用于传送坐标
  170. //结构msg用于传送消息
  171. //结构rect用于传送矩形框的位置
  172. //结构toolinfo用于传送与tooltips相关的消息
  173. //用法/////////////////////////////////////////////////////////////
  174. //定义实例变量:
  175. //nca_tlTips invo_tlTip
  176. //window open事件:
  177. //注册要显示ToolTips的控制
  178. //invo_tltip.AddTool(sle_userid,"请输入登录用户名",0)
  179. //invo_tltip.AddTool(sle_password,"请输入登录口令",0)
  180. //需要提示的控件,在自定义ue_mousemove事件(pbm_mousemove):
  181. //invo_tltip.RelayMsg(This)
  182. //////////////////////////////////////////////////////////////////
  183. InitCommonControls()
  184. hWndTT = CreateWindowExA(WS_EX_TOPMOST,TOOLTIPS_CLASS,0, &
  185. TTF_CENTERTIP, CW_USEDEFAULT, CW_USEDEFAULT, &
  186. CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, Handle(GetApplication()),0)
  187. end event
  188. event destructor;DestroyWindow(hWndTT)
  189. end event