我正在尝试在excel中创建一个不错的用户界面。我有以下图片我想模仿 当我将鼠标悬停在它们上面时,我想点亮某些元素(我确定你以前见过类似的东西,可能不是在Excel中!)
我现在正在筹备事情;我需要整个界面可以调整大小,并且由于图像中工具栏的复杂性,我打算使用:
这种形状复杂性实际上是导致问题的原因 - 即我当前的解决方案是使用透明的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
此方法的问题(正如您在gif的末尾看到的那样)是标签是矩形的,因此当鼠标实际上不在形状上时,形状上的任何圆角都会导致突出显示。特别是在使用更复杂的复合形状时,比如我的例子中的工具栏,我不得不求助于重叠的矩形标签,这种方法已经足够滞后了!
那还有另一种方式吗?
insert->activex->more controls->register custom
听起来很有希望)