cMouseEvent.cls
上传用户:davilee3
上传日期:2015-04-22
资源大小:986k
文件大小:7k
源码类别:

浏览器

开发平台:

Visual Basic

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "cMouseEvent"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. '鼠标手势等数据,操作
  15. Option Explicit
  16. Private Const DescriptionHead As String = "鼠标手势: "
  17. Private Type mMouseHandInfo
  18.     Hand(0 To 2) As Byte
  19.     HandStr As String
  20.     Description As String
  21.     CallSub As cCallByName
  22. End Type
  23. Private mMouseHand() As mMouseHandInfo
  24. Private mMouseHandCnt As Long
  25. Private DirFlag(0 To 4) As String
  26. Public Function GetHandCount() As Long
  27. GetHandCount = mMouseHandCnt
  28. End Function
  29. Public Sub AddHand()
  30. mMouseHandCnt = mMouseHandCnt + 1
  31. ReDim Preserve mMouseHand(0 To mMouseHandCnt)
  32. With mMouseHand(mMouseHandCnt)
  33.     .Description = DescriptionHead
  34.     Set .CallSub = New cCallByName
  35. End With
  36. End Sub
  37. Public Function RemoveHand(index&) As Boolean
  38. Dim i&
  39. Dim rtn As Boolean
  40. On Error Resume Next
  41. rtn = False
  42. If index > 0 And index <= mMouseHandCnt Then
  43.     Set mMouseHand(index).CallSub = Nothing
  44.     For i = index To mMouseHandCnt - 1
  45.         mMouseHand(i) = mMouseHand(i + 1)
  46.     Next i
  47.     mMouseHandCnt = mMouseHandCnt - 1
  48.     ReDim Preserve mMouseHand(0 To mMouseHandCnt)
  49.     rtn = True
  50. End If
  51. RemoveHand = rtn
  52. End Function
  53. Public Sub Execute(nKey As String, Optional nObject As Object = Nothing)
  54. Dim index&
  55. index = FindByHandStr(nKey)
  56. If index > 0 Then
  57.     mMouseHand(index).CallSub.Execute nObject
  58. End If
  59. End Sub
  60. '获得鼠标手势的"表示",复制的方式
  61. Public Function GetHand(index&, ptrHand&) As Boolean
  62. Dim rtn As Boolean
  63. rtn = False
  64. If index > 0 And index <= mMouseHandCnt Then
  65.     CopyMemory ByVal ptrHand, ByVal VarPtr(mMouseHand(index).Hand(0)), 3
  66.     rtn = True
  67. End If
  68. GetHand = rtn
  69. End Function
  70. Public Function GetDescription(index&) As String
  71. If index > 0 And index <= mMouseHandCnt Then
  72.     GetDescription = mMouseHand(index).Description
  73. End If
  74. End Function
  75. Public Sub GetInfo_ByIndex(index&, nDescription$, _
  76.         nHandShow$, nInsideIndex&, nEventText$)
  77. If index > 0 And index <= mMouseHandCnt Then
  78.     With mMouseHand(index)
  79.         nDescription = .Description
  80.         nHandShow = DirFlag(.Hand(0)) & DirFlag(.Hand(1)) & DirFlag(.Hand(2))
  81.         nInsideIndex = .CallSub.InsideIndex
  82.         nEventText = .CallSub.EventText
  83.     End With
  84. End If
  85. End Sub
  86. '获得CallObject
  87. Public Function GetCallObject_ByIndex(index As Long) As cCallByName
  88. If index > 0 And index <= mMouseHandCnt Then
  89.     Set GetCallObject_ByIndex = mMouseHand(index).CallSub
  90. End If
  91. End Function
  92. Public Function GetCallObject_ByKey(nKey As String) As cCallByName
  93. Dim index&
  94. index = FindByHandStr(nKey)
  95. If index > 0 Then
  96.     Set GetCallObject_ByKey = GetCallObject_ByIndex(index)
  97. End If
  98. End Function
  99. Public Function GetCallObject_ByKey2(nKeyArr() As Byte) As cCallByName
  100. Dim index&
  101. Dim tKey$
  102. tKey = Replace(Str(nKeyArr(0)) & Str(nKeyArr(1)) & Str(nKeyArr(2)), " ", "")
  103. index = FindByHandStr(tKey)
  104. If index > 0 Then
  105.     Set GetCallObject_ByKey2 = GetCallObject_ByIndex(index)
  106. End If
  107. End Function
  108. '=========================================
  109. '改变鼠标手势,两种方式
  110. Public Function ChangeHand_ByKey(nKey As String, nPtrHand As Long) As Boolean
  111. Dim index&
  112. Dim rtn As Boolean
  113. rtn = False
  114. index = FindByHandStr(nKey)
  115. If index > 0 Then
  116.     rtn = ChangeHand_ByIndex(index, nPtrHand)
  117. End If
  118. ChangeHand_ByKey = rtn
  119. End Function
  120. Public Function ChangeHand_ByIndex(index&, nPtrHand As Long) As Boolean
  121. Dim tHand(0 To 2) As Byte, tHandStr$
  122. Dim rtn As Boolean
  123. Dim tIndex&
  124. rtn = False
  125. If index > 0 And index <= mMouseHandCnt Then
  126.     With mMouseHand(index)
  127.         CopyMemory ByVal VarPtr(tHand(0)), ByVal nPtrHand, 3
  128.         tHandStr = Replace(Str(tHand(0)) & Str(tHand(1)) & Str(tHand(2)), " ", "")
  129.         tIndex = FindByHandStr(tHandStr)
  130.         If tIndex = 0 Or tIndex = index Then
  131.             CopyMemory ByVal VarPtr(.Hand(0)), ByVal nPtrHand, 3
  132.             .HandStr = tHandStr
  133.             .Description = DescriptionHead & DirFlag(.Hand(0)) & DirFlag(.Hand(1)) & DirFlag(.Hand(2))
  134.             rtn = True
  135.         End If
  136.     End With
  137. End If
  138. ChangeHand_ByIndex = rtn
  139. End Function
  140. '=======================================
  141. Private Function FindByHandStr(nStr As String) As Long
  142. Dim rtn&, i&
  143. rtn = 0
  144. For i = 1 To mMouseHandCnt
  145.     If nStr = mMouseHand(i).HandStr Then
  146.         rtn = i
  147.         Exit For
  148.     End If
  149. Next i
  150. FindByHandStr = rtn
  151. End Function
  152. Private Sub Class_Initialize()
  153. DirFlag(0) = ""
  154. DirFlag(1) = "→"
  155. DirFlag(2) = "↑"
  156. DirFlag(3) = "←"
  157. DirFlag(4) = "↓"
  158. End Sub
  159. Public Sub Save(nfile As String)
  160. Dim tIniFile As cINIFile
  161. Dim i&
  162. Dim tstr$
  163. Set tIniFile = New cINIFile
  164. With tIniFile
  165.     .IniFile = nfile
  166.     Call .DeleteSection("MouseHand")
  167.     Call .WriteKey("MouseHand", "MouseHandCount", Str(mMouseHandCnt))
  168.     For i = 1 To mMouseHandCnt
  169.         'tstr = mMouseHand(i).HandStr & Format(mMouseHand(i).CallSub.InsideIndex, "0000") & _
  170.             Format(mMouseHand(i).CallSub.ScriptIndex, "0000")
  171.         tstr = mMouseHand(i).HandStr & Format(mMouseHand(i).CallSub.InsideIndex, "0000") & _
  172.             Format(mMouseHand(i).CallSub.PluginIndex, "0000")
  173.         Call .WriteKey("MouseHand", "mh" & LTrim(Str(i)), tstr)
  174.     Next i
  175. End With
  176. End Sub
  177. '共3+4+4=11位
  178. '头3位是鼠标手势,接着4位是InsideIndex,接着是执行脚本index
  179. Public Sub Load(nfile As String)
  180. On Error GoTo due
  181. Dim tIniFile As cINIFile
  182. Dim i&
  183. Dim tstr$
  184. Set tIniFile = New cINIFile
  185. With tIniFile
  186.     .IniFile = nfile
  187.     mMouseHandCnt = Val(.ReadKey("MouseHand", "MouseHandCount", "0"))
  188.     If mMouseHandCnt <= 0 Then mMouseHandCnt = 0
  189.     ReDim mMouseHand(0 To mMouseHandCnt)
  190.     
  191.     For i = 1 To mMouseHandCnt
  192.         tstr = .ReadKey("MouseHand", "mh" & LTrim(Str(i)), String(3 + 4 + 4, "0"))
  193.         If Len(tstr) <> 3 + 4 + 4 Then tstr = String(3 + 4 + 4, "0")
  194.         
  195.         With mMouseHand(i)
  196.             .Hand(0) = Val(Mid(tstr, 1, 1))
  197.             .Hand(1) = Val(Mid(tstr, 2, 1))
  198.             .Hand(2) = Val(Mid(tstr, 3, 1))
  199.             .HandStr = Replace(Str(.Hand(0)) & Str(.Hand(1)) & Str(.Hand(2)), " ", "")
  200.             .Description = DescriptionHead & DirFlag(.Hand(0)) & DirFlag(.Hand(1)) & DirFlag(.Hand(2))
  201.             Set .CallSub = New cCallByName
  202.             .CallSub.InsideIndex = Val(Mid(tstr, 4, 4))
  203.             '.CallSub.ScriptIndex = Val(Mid(tstr, 8, 4))
  204.             .CallSub.PluginIndex = Val(Mid(tstr, 8, 4))
  205.         End With
  206.     Next i
  207. End With
  208. Exit Sub
  209. due:
  210.     mMouseHandCnt = 0
  211.     ReDim mMouseHand(0 To mMouseHandCnt)
  212. End Sub