自由形状moseover事件Excel

我正在尝试在Excel中创build一个不错的用户界面。 我有下面的图片,我试图效仿 在这里输入图像说明 当我像这样hover在他们身上时,我想点亮某些元素 在这里输入图像说明 (我相信你以前见过类似的东西,也许不在Excel中)

我现在正在绘画的过程中, 我需要调整整个界面的大小,并且由于图像中的工具栏等形状的复杂性,我打算使用以下两种方法之一:

  • MSO标准形状组
  • 一个“自由forms”的MSO形状
  • .SVGvectorgraphics

这种形状的复杂性实际上是导致这个问题的原因 – 也就是说,我现在的解决scheme是使用透明的activeX标签来拾取MouseMove事件(另一个在鼠标移开时在后台捕获更大的事件)。 不可见的标签放置在我的可见形状上,以创build形状正在拾取鼠标hover的错觉,请参阅下面的代码和图像。

 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 

例如Gif

这个方法的问题(你可以看到在GIF的末尾)是标签是矩形的,所以当鼠标不在形状上时,形状上的任何圆angular都会导致高亮显示。 特别是在我的例子中,当使用更复杂的复合形状(如工具栏)时,我将不得不求助于重叠的矩形标签,这种方法已经足够迟了!

那么还有其他的方法吗?

  • 也许SVG文件可以在VBA中使用不同的事件?
  • 也许有MSO形状/组/自由形状的事件
  • 也许你可以做一个自定义的ActiveX控件( insert->activex->more controls->register custom声音)
  • 也许直接跟踪鼠标的方法将工作?

Interesting Posts