Private Sub framePDF_MouseMove(ByVal... )
framePDF.BackColor = &H80000012&
そのため、フレームの色が変化しています。
色を戻すイベントが見つかりません-カーソルがフレームから離れている場合はどうなりますか?
ユーザーフォームで?ユーザーフォームには、フレーム内にいるときに発生しない MouseMove イベントもあります。
Private Sub Frame1_MouseMove(ByVal ...)
Me.Frame1.BackColor = vbRed
End Sub
Private Sub UserForm_MouseMove(ByVal ...)
Me.Frame1.BackColor = vbWhite
End Sub
フレームの上にいるときはフレームが赤くなり、そうでないときはフレームが白くなります。これらのイベントは常に発生するため、慎重に使用してください。
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