123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- $PBExportHeader$nvo_tltips.sru
- $PBExportComments$ToolBar 用户对象
- forward
- global type nvo_tltips from nonvisualobject
- end type
- end forward
- type point from structure
- long x
- long y
- end type
- type msg from structure
- long hwnd
- long message
- long wparam
- long lparam
- long time
- point pt
- end type
- type rect from structure
- long left
- long top
- long right
- long bottom
- end type
- type toolinfo from structure
- long cbsize
- long uflags
- long hwnd
- long uid
- rect rect
- long hinstance
- long lpsztext
- end type
- global type nvo_tltips from nonvisualobject autoinstantiate
- end type
- type prototypes
- // ToolTips函数
- SubRoutine InitCommonControls() library "comctl32.dll"
- Function long CreateWindowExA(ulong dwExStyle, string ClassName, &
- long WindowName, ulong dwStyle, ulong X, ulong Y, ulong nWidth, &
- ulong nHeight, ulong hWndParent, ulong hMenu, ulong hInstance, &
- ulong lpParam) library "user32.dll" alias for "CreateWindowExA;Ansi"
- Function integer DestroyWindow(long hWnd) library "user32.dll"
- Function integer ToolTipMsg(long hWnd, long uMsg, long wParam, &
- REF TOOLINFO ToolInfo) library "user32.dll" Alias For "SendMessageA;Ansi"
- Function integer RelayMsg(long hWnd, long uMsg, long wParam, &
- REF MSG Msg) library "user32.dll" Alias For "SendMessageA;Ansi"
- //内存管理函数
- Function long LocalAlloc(long Flags, long Bytes) library "kernel32.dll"
- Function long LocalFree(long MemHandle) library "kernel32.dll"
- Function long lstrcpy(long Destination, string Source) library "kernel32.dll" alias for "lstrcpy;Ansi"
- end prototypes
- type variables
- //私有常量
- Private:
- //杂项常量
- CONSTANT string TOOLTIPS_CLASS = 'tooltips_class32'
- CONSTANT ulong CW_USEDEFAULT = 2147483648
- CONSTANT long WM_USER = 1024
- CONSTANT long WS_EX_TOPMOST = 8
- CONSTANT long WM_SETFONT = 48
- // ToolTips消息
- CONSTANT long TTM_ADDTOOL = WM_USER + 4
- CONSTANT long TTM_NEWTOOLRECT = WM_USER + 6
- CONSTANT long TTM_RELAYEVENT = WM_USER + 7
- CONSTANT long TTM_UPDATETIPTEXT = WM_USER + 12
- CONSTANT long TTM_TRACKACTIVATE = WM_USER + 17
- CONSTANT long TTM_TRACKPOSITION = WM_USER + 18
- //公共变量和常量
- Public:
- long hWndTT // Tooltip control window handle
- long ToolID = 1 // Tooltip internal ID
- //Tooltips标记
- CONSTANT integer TTF_CENTERTIP = 2
- CONSTANT integer TTF_RTLREADING = 4
- CONSTANT integer TTF_SUBCLASS = 16
- CONSTANT integer TTF_TRACK = 32
- CONSTANT integer TTF_ABSOLUTE = 128
- CONSTANT integer TTF_TRANSPARENT = 256
- CONSTANT integer TTF_DI_SETITEM = 32768
- end variables
- forward prototypes
- public subroutine relaymsg (dragobject object)
- public subroutine setfont (long hfont)
- public subroutine settipposition (integer x, integer y)
- public subroutine settiptext (dragobject object, long uid, long tiptext)
- public subroutine settiptext (dragobject object, long uid, string tiptext)
- public subroutine settrack (dragobject object, integer uid, boolean status)
- public subroutine updatetiprect (dragobject object, long uid, long left, long top, long right, long bottom)
- public function integer addtool (dragobject object, string tiptext, integer flags)
- end prototypes
- public subroutine relaymsg (dragobject object);//此函数用于向显示ToolTips窗口发送控制消息,代码如下:
- MSG Msg
- Msg.hWnd = Handle(Object)
- Msg.Message = 512 // WM_MOUSEMOVE
- Msg.WParam = Message.WordParm
- Msg.LParam = Message.LongParm
- RelayMsg(hWndTT,TTM_RELAYEVENT,0,Msg)
- end subroutine
- public subroutine setfont (long hfont);//此函数用于设置ToolTips窗口的字体,代码如下:
- Send(hWndTT,WM_SETFONT,hFont,1)
- end subroutine
- public subroutine settipposition (integer x, integer y);//此函数用于设置ToolTips的位置,代码如下:
- Send(hWndTT,TTM_TRACKPOSITION,0,Long(X,Y))
- end subroutine
- public subroutine settiptext (dragobject object, long uid, long tiptext);//此函数用于为ToolTips窗口设置新文本,代码如下:
- TOOLINFO ToolInfo
- ToolInfo.hWnd = Handle(Object)
- ToolInfo.uID = uID
- ToolInfo.lpszText = TipText
- ToolTipMsg(hWndTT,TTM_UPDATETIPTEXT,0,ToolInfo)
- end subroutine
- public subroutine settiptext (dragobject object, long uid, string tiptext);//此函数用于为ToolTips窗口设置新文本,代码如下:
- long lpszText
- lpszText = LocalAlloc(0,255)
- lStrCpy(lpszText,Left(TipText,255))
- SetTipText(Object,uId,lpszText)
- LocalFree(lpszText)
- end subroutine
- public subroutine settrack (dragobject object, integer uid, boolean status);//此函数用于激活或取消ToolTips窗口设置新文本,代码如下:
- //参数Status为True时激活,为False时取消
- TOOLINFO ToolInfo
- ToolInfo.cbSize = 40
- ToolInfo.hWnd = Handle(Object)
- ToolInfo.uID = uID
- If Status Then
- ToolTipMsg(hWndTT,TTM_TRACKACTIVATE,1,ToolInfo)
- Else
- ToolTipMsg(hWndTT,TTM_TRACKACTIVATE,0,ToolInfo)
- End If
- end subroutine
- public subroutine updatetiprect (dragobject object, long uid, long left, long top, long right, long bottom);//此函数用于更新ToolTips的矩形框,代码如下:
- TOOLINFO ToolInfo
- ToolInfo.hWnd = Handle(Object)
- ToolInfo.uID = uID
- ToolInfo.Rect.Left = Left
- ToolInfo.Rect.Top = Top
- ToolInfo.Rect.Right = Right
- ToolInfo.Rect.Bottom = Bottom
- ToolTipMsg(hWndTT,TTM_NEWTOOLRECT,0,ToolInfo)
- end subroutine
- public function integer addtool (dragobject object, string tiptext, integer flags);//此函数用于注册要显示ToolTips的控制,代码如下:
- TOOLINFO ToolInfo
- ToolInfo.cbSize = 40
- ToolInfo.uFlags = Flags
- ToolInfo.hWnd = Handle(Object)
- ToolInfo.hInstance = 0
- ToolInfo.uID = ToolID
- ToolID++
- ToolInfo.lpszText = LocalAlloc(0,80)
- POST LocalFree(ToolInfo.lpszText) //释放分配的内存
- LStrCpy(ToolInfo.lpszText,Left(tiptext,80))
- ToolInfo.Rect.Left = 0
- ToolInfo.Rect.Top = 0
- ToolInfo.Rect.Right = UnitsToPixels(Object.Width,XUnitsToPixels!)
- ToolInfo.Rect.Bottom = UnitsToPixels(Object.Height,YUnitsToPixels!)
- If ToolTipMsg(hWndTT,TTM_ADDTOOL, 0, ToolInfo) = 0 Then
- // MessageBox("错误","不能注册控件!",StopSign!,Ok!)
- Return(-1)
- End If
- Return(ToolID - 1)
- end function
- on nvo_tltips.create
- TriggerEvent( this, "constructor" )
- end on
- on nvo_tltips.destroy
- TriggerEvent( this, "destructor" )
- end on
- event constructor;//结构point用于传送坐标
- //结构msg用于传送消息
- //结构rect用于传送矩形框的位置
- //结构toolinfo用于传送与tooltips相关的消息
- //用法/////////////////////////////////////////////////////////////
- //定义实例变量:
- //nca_tlTips invo_tlTip
- //window open事件:
- //注册要显示ToolTips的控制
- //invo_tltip.AddTool(sle_userid,"请输入登录用户名",0)
- //invo_tltip.AddTool(sle_password,"请输入登录口令",0)
- //需要提示的控件,在自定义ue_mousemove事件(pbm_mousemove):
- //invo_tltip.RelayMsg(This)
- //////////////////////////////////////////////////////////////////
- InitCommonControls()
- hWndTT = CreateWindowExA(WS_EX_TOPMOST,TOOLTIPS_CLASS,0, &
- TTF_CENTERTIP, CW_USEDEFAULT, CW_USEDEFAULT, &
- CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, Handle(GetApplication()),0)
- end event
- event destructor;DestroyWindow(hWndTT)
- end event
|