2
Private Sub framePDF_MouseMove(ByVal... )
framePDF.BackColor = &H80000012&  

因此,框架的颜色正在发生变化。
我找不到返回颜色的事件 - 当光标远离框架时?

4

3 回答 3

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

当你超过它时会将框架变为红色,当你不在时将变为白色。这些事件不断触发,因此请明智地使用它们。

于 2012-08-31T13:22:18.803 回答
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
于 2012-08-30T15:49:37.873 回答
0

更简单的方法:在 MouseMove 事件中,针对控件的宽度和高度(减去边距,例如 5)测试 X 和 Y 参数 - 如果鼠标在边距中,则将其视为“鼠标移出”并相应地更改控件的颜色. 不需要并发按钮、z 顺序操作、框架等。

于 2017-12-25T19:50:18.630 回答