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

そのため、フレームの色が変化しています。
色を戻すイベントが見つかりません-カーソルがフレームから離れている場合はどうなりますか?

4

3 に答える 3

3

ユーザーフォームで?ユーザーフォームには、フレーム内にいるときに発生しない MouseMove イベントもあります。

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 に答える