2012-08-30 8 views
2
Private Sub framePDF_MouseMove(ByVal...) 
framePDF.BackColor = &H80000012& 

그래서 프레임의 색상이 변경됩니다.
커서를 프레임에서 멀리 떨어 뜨리면 색상을 반환하는 이벤트를 찾을 수 없습니까?MouseMove - 역 이벤트가 무엇입니까?

+1

레이블보다 약간 큰 프레임을 추가하고 레이블 뒤에 배치 한 다음 MouseMove 이벤트를 프레임에 추가 할 수 있습니까? 그런 다음 레이블 색상을 검색하여 마우스가 레이블을 떠나거나 입력하는지 판별 할 수 있습니다. – user3357963

+0

나는 이해했다. 시도해 주셔서 감사합니다 – Alegro

답변

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 =10Enbaled = 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 
+0

UnBelievable! 그러면 MouseMove의 목적은 무엇입니까? 타이머가 코드 실행을 느리게합니까? 타이머에 대한 간단한 코드 예제를 작성해 주시겠습니까? – Alegro

+0

감사합니다, Matt. 나는 시도 할 것이다 – Alegro

3

사용자 정의 폼에서? Userform에는 또한 Frame에있을 때 실행되지 않는 MouseMove 이벤트가 있습니다.

은 프레임이 빨간색 일 때 빨간색으로 표시하고 그렇지 않을 때는 흰색으로 표시합니다. 이러한 사건은 끊임없이 발생하므로 신중하게 사용하십시오.

+0

Dick, excelent, 많이 고마워. – Alegro

0

쉬운 방법 : MouseMove 이벤트에서 컨트롤의 너비와 높이 (여백 빼기, 예 : 5)에 대해 X 및 Y 인수를 테스트합니다. 마우스가 여백에 있으면 "마우스 출력"으로 간주하고 변경합니다 그에 따라 컨트롤의 색상. 동시 단추, z 순서 조작, 프레임 등이 필요 없습니다.

관련 문제