自由形状moseover事件Excel

时间:2017-06-03 13:21:27

标签: excel vba excel-vba events svg

我正在尝试在excel中创建一个不错的用户界面。我有以下图片我想模仿enter image description here 当我将鼠标悬停在它们上面时,我想点亮某些元素enter image description here(我确定你以前见过类似的东西,可能不是在Excel中!)

我现在正在筹备事情;我需要整个界面可以调整大小,并且由于图像中工具栏的复杂性,我打算使用:

  • MSO标准形状组
  • “Freeform”MSO形状
  • .SVG vector graphics

这种形状复杂性实际上是导致问题的原因 - 即我当前的解决方案是使用透明的activeX标签来拾取MouseMove事件(以及当鼠标移开时捕获的另一个更大的事件) )。隐形标签放置在我的可见形状上,以创建形状正在拾取鼠标悬停的错觉,请参阅下面的代码和图像。

Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
flushHighlight 'remove any existing highlght
setHighlight "shp_1" 'then apply highlight to the shape behind Label1
End Sub

Private Sub Label2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
flushHighlight
setHighlight "shp_2"
End Sub

Private Sub Label3_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
flushHighlight 'remove highlighting when focus moves away from either shape 
End Sub

Sub setHighlight(shpName As String)
Dim shp As Shape
Set shp = Me.Shapes(shpName)
shp.Fill.ForeColor.RGB = RGB(255, 0, 0) 'red "highlight"
End Sub

Sub flushHighlight()
Dim shp1 As Shape, shp2 As Shape
Set shp1 = Me.Shapes("shp_1")
Set shp2 = Me.Shapes("shp_2")
shp1.Fill.ForeColor.RGB = RGB(100, 100, 255)'blue "normal" state
shp2.Fill.ForeColor.RGB = RGB(100, 100, 255)
End Sub

Eg Gif

此方法的问题(正如您在gif的末尾看到的那样)是标签是矩形的,因此当鼠标实际上不在形状上时,形状上的任何圆角都会导致突出显示。特别是在使用更复杂的复合形状时,比如我的例子中的工具栏,我不得不求助于重叠的矩形标签,这种方法已经足够滞后了!

那还有另一种方式吗?

  • 也许svg文件可以在VBA中使用不同的事件?
  • 也许有MSO形状/组/自由形状
  • 的事件
  • 也许你可以制作一个自定义的activeX控件(insert->activex->more controls->register custom听起来很有希望)
  • 也许直接跟踪鼠标的方法会起作用吗?

0 个答案:

没有答案