Private Sub framePDF_MouseMove(ByVal... )
framePDF.BackColor = &H80000012&
因此,框架的颜色正在发生变化 当光标远离框架时,我无法找到返回颜色的事件?
答案 0 :(得分:3)
在用户表单上? Userform还有一个MouseMove事件,当你在Frame中时不会触发。
Private Sub Frame1_MouseMove(ByVal ...)
Me.Frame1.BackColor = vbRed
End Sub
Private Sub UserForm_MouseMove(ByVal ...)
Me.Frame1.BackColor = vbWhite
End Sub
当你结束时,会将框架变成红色,而当你不是时,它会变成白色。这些事件不断发生,所以明智地使用它们。
答案 1 :(得分:2)
在vba和VB6中没有MouseLeave事件。
实现此目的的最佳方法是在鼠标进入框架时启动计时器。
然后在定时器代码中检查鼠标指针是否仍然在帧的范围内。如果没有改变颜色并停止计时器
将此代码放入模块中:
Public Declare Function GetCursorPos Lib "user32" (lpPoint As _
POINTAPI) As Long
Public Type POINTAPI
x As Long
y As Long
End Type
在表单上创建一个计时器,设置interval =10
Enbaled = False
然后代码看起来像这样:
Private Sub frameTest_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
frameTest.BackColor = vbRed
tmrMouseLeave.Enabled = True
End Sub
Private Sub tmrMouseLeave_Timer()
Dim pt As POINTAPI
Call GetCursorPos(pt)
Dim xValue As Long, yValue As Long
xValue = pt.x * Screen.TwipsPerPixelX
yValue = pt.y * Screen.TwipsPerPixelY
If (xValue > (Me.Left + frameTest.Left)) And _
(xValue < (Me.Left + frameTest.Left + frameTest.width)) And _
(yValue > (Me.Top + frameTest.Top)) And _
(yValue < (Me.Top + frameTest.Top + frameTest.height)) Then
'we are still inside the frame
Else
'mouse is outside the frame
frameTest.BackColor = vbBlue
tmrMouseLeave.Enabled = False
End If
End Sub
答案 2 :(得分:0)
更简单的方法:在你的MouseMove事件中,根据控件的宽度和高度测试X和Y参数(减去一个边距,比如5) - 如果鼠标位于边距内,则将其视为“鼠标移出”并更改控制的颜色相应。不需要并发按钮,z顺序操作,框架等。