嗨,有没有什么办法可以通过编程方式在Visio中更改鼠标光标? 我经历了Visio SDK中的所有自动化类,并且找不到任何相关的属性,方法,事件......如何以编程方式更改Visio中的游标?
2
A
回答
0
- 编辑:即使在以编程方式更改光标时,似乎Visio(2003 in我的电脑)不断恢复原来的光标。我试过了,如果我不移动鼠标,我可以得到一个不同的光标(如手),直到我移动鼠标,然后返回到箭头。
所以,现在,我的答案是:你不能改变光标。
也许这可能是其他Visio版本。
您可以使用来自VBA代码的Windows API调用来更改光标。
这里有一个例子:http://www.vbaexpress.com/kb/getarticle.php?kb_id=929
一个更好的例子,这是我得到了在Visio中的工作:http://www.tek-tips.com/viewthread.cfm?qid=1700789
及以下的,我已经使用了测试环境代码:
首先,创建一个 “modCursor” 模块:
Option Explicit
'Declare Windows API Constants for Windows System cursors.
Public Const IDC_APPSTARTING = 32650& 'Standard arrow and small hourglass.
Public Const IDC_ARROW = 32512& 'Standard arrow.
Public Const IDC_CROSS = 32515 'Crosshair.
Public Const IDC_HAND = 32649 'Hand.
Public Const IDC_HELP = 32651 'Arrow and question mark.
Public Const IDC_IBEAM = 32513& 'Text I-beam.
Public Const IDC_ICON = 32641& 'Windows NT only: Empty icon.
Public Const IDC_NO = 32648& 'Slashed circle.
Public Const IDC_SIZE = 32640& 'Windows NT only: Four-pointed arrow.
Public Const IDC_SIZEALL = 32646& 'Four-pointed arrow pointing north, south, east, and west.
Public Const IDC_SIZENESW = 32643& 'Double-pointed arrow pointing northeast and southwest.
Public Const IDC_SIZENS = 32645& 'Double-pointed arrow pointing north and south.
Public Const IDC_SIZENWSE = 32642& 'Double-pointed arrow pointing northwest and southeast.
Public Const IDC_SIZEWE = 32644& 'Double-pointed arrow pointing west and east.
Public Const IDC_UPARROW = 32516& 'Vertical arrow.
Public Const IDC_WAIT = 32514& 'Hourglass.
'Declarations for API Functions.
Private Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Private Declare Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long
Private Declare Function DestroyCursor Lib "user32" (ByVal hCursor As Long) As Long
'Declare handles for cursor.
Private hOldCursor As Long
Private hNewCursor As Long
'The UseCursor function will load and set a system cursor or a cursor from file to a
'controls event property.
Public Function UseCursor(ByVal NewCursor As Variant)
'Load new cursor.
Select Case TypeName(NewCursor)
Case "String" 'Custom cursor from file.
hNewCursor = LoadCursorFromFile(NewCursor)
Case "Long", "Integer" 'System cursor.
hNewCursor = LoadCursor(ByVal 0&, NewCursor)
Case Else 'Do nothing
End Select
'If successful set new cursor.
If (hNewCursor > 0) Then
hOldCursor = SetCursor(hNewCursor)
End If
'Clean up.
hOldCursor = DestroyCursor(hNewCursor)
hNewCursor = DestroyCursor(hOldCursor)
End Function
二,创建类模块, “的MouseListener”:
Option Explicit
Dim WithEvents vsoWindow As Window
Private Sub Class_Initialize()
Set vsoWindow = ActiveWindow
End Sub
Private Sub Class_Terminate()
Set vsoWindow = Nothing
End Sub
Private Sub vsoWindow_MouseDown(ByVal Button As Long, ByVal KeyButtonState As Long, ByVal x As Double, ByVal y As Double, CancelDefault As Boolean)
If Button = 1 Then
Debug.Print "Left mouse button clicked"
ElseIf Button = 2 Then
Debug.Print "Right mouse button clicked"
ElseIf Button = 16 Then
Debug.Print "Center mouse button clicked"
End If
End Sub
Private Sub vsoWindow_MouseMove(ByVal Button As Long, ByVal KeyButtonState As Long, ByVal x As Double, ByVal y As Double, CancelDefault As Boolean)
Debug.Print "x-position is "; x
Debug.Print "y-position is "; y
modCursor.UseCursor modCursor.IDC_HAND
End Sub
Private Sub vsoWindow_MouseUp(ByVal Button As Long, ByVal KeyButtonState As Long, ByVal x As Double, ByVal y As Double, CancelDefault As Boolean)
If Button = 1 Then
Debug.Print "Left mouse button released"
modCursor.UseCursor modCursor.IDC_HAND
ElseIf Button = 2 Then
Debug.Print "Right mouse button released"
modCursor.UseCursor modCursor.IDC_ARROW
ElseIf Button = 16 Then
Debug.Print "Center mouse button released"
End If
End Sub
三,插入下面的代码插入到“的ThisDocument”模块:
Private myMouseListener As MouseListener
Private Sub Document_DocumentSaved(ByVal doc As IVDocument)
Set myMouseListener = New MouseListener
End Sub
Private Sub Document_BeforeDocumentClose(ByVal doc As IVDocument)
Set myMouseListener = Nothing
End Sub
现在,通过移动鼠标并点击按钮你在即时窗口中的一些信息。
如果您单击左键,光标将变为手,但是当您再次移动鼠标时,光标会变回。我能想到的唯一解释是Visio的事件正在根据(视觉)上下文改变光标图标。
Regards,
相关问题
- 1. 不能以编程方式更改Visio单元格
- 2. 以编程方式更改标签方向,编程方式
- 3. 如何以编程方式更改wpf窗口中的标题?
- 4. 以编程方式更改MediaController图标
- 5. 以编程方式更改ActionBar图标
- 6. 以编程方式更改UIButton标题
- 7. 如何以编程方式更改UIView?
- 8. 如何以编程方式更改android:configChanges?
- 9. 如何在c#net中以编程方式更改exe图标
- 10. 如何以编程方式更改.bat文件的图标?
- 11. 如何以编程方式更改按钮的图标?
- 12. 如何以编程方式更改ADF表格中的样式
- 13. 如何以编程方式更改TabLayout标题颜色?
- 14. PopupWindow如何以编程方式更改图标和背景?
- 15. 如何以编程方式更改ngTable标题颜色?
- 16. 如何以编程方式更改标识列值?
- 17. 如何以编程方式更改Mac终端程序中光标的位置?
- 18. 如何以编程方式在Qt中更改网络模式
- 19. 以编程方式更改Xamarin中UIBarButton项目的图标
- 20. 以编程方式更改出现在Android ActionBar中的徽标
- 21. 更改R.String的值以编程方式
- 22. 以编程方式更改SCNScene的sceneNamed
- 23. 以编程方式更改R.string的值?
- 24. 如何以编程方式更改Access中的选项?
- 25. 如何在iphone中以编程方式更改UIkeyboard的语言?
- 26. 如何以编程方式更改TWebBrowser中的字体
- 27. 如何以编程方式更改WPF中的DockPanel?
- 28. 如何以编程方式更改Highcharts中的颜色选项?
- 29. 如何更改android中的SeekBar颜色? (以编程方式)
- 30. 如何以编程方式更改TabBarViewController中的视图?