2009-11-20 6 views
0

TDateTimePicker 구성 요소에 대해 OnMouseLeave 이벤트를 감지해야하지만 이벤트 목록에 해당 이벤트가 포함되어 있지 않습니다. 수동으로 감지하는 방법이 있습니까?Delphi 7에서 TDateTimePicker 구성 요소에 대한 onmouseleave 이벤트를 catch하는 방법

+0

여기에 언급 된 내용이 확실하지 않습니다. TDateTime은 구성 요소가 아닌 기본 데이터 형식입니다. –

+0

TDateTimePicker 구성 요소를 의미합니까? –

+0

Ops, 예 TDateTimePicker :) –

답변

2

CMMouseLeave 프로 시저의 보호를 해제 할 수 있습니다.

TDateTimePicker = class(ComCtrls.TDateTimePicker) 
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; 
end; 

{ TDateTimePicker } 

procedure TDateTimePicker.CMMouseLeave(var Message: TMessage); 
begin 
    {do something}; 
end; 
+0

보호 여부는 중요하지 않습니다. 메시지 핸들러는 비공개이며 여전히 override 할 수 있습니다. 여기에있는 속임수는 클래스를 폼 클래스 선언 위에 놓고 새 구성 요소를 설치하지 않고도 자동으로 새 비헤이비어를 가져올 수 있다는 것입니다. 스코프 트릭없이이를 수행하려면 컨트롤의 'WindowProc' 속성에 새 값을 지정하기 만하면됩니다. –

+0

OnMOuseLeave 메시지가 잡히면이 기능은 한 번만 작동합니다. 더 이상 작동하지 않습니다. 왜 아무도 알지 못해? –

+0

나를 위해 그것은 당신이 컨트롤을 떠날 때마다 작동합니다. – Linas

-2

TDateTime은 시각적 구성 요소가 아니므로 마우스 이탈 이벤트가 발생하지 않습니다. 실제 구성 요소를 확인할 수 있습니까 (날짜 선택기입니까?) onExit 이벤트는 시각적 컨트롤을 남긴 마우스를 처리해야합니다.

또한

가 미안, 어제 내가 델파이가 설치되어 있지 않은에 있던 컴퓨터를 더 많은 도움을 제공 할 수 있습니다 ... 당신이

감사를 사용하는 델파이의 버전을 알고 도움이 될 것입니다. 내보낼 수없는 특정 컨트롤에 대한 마우스 나가기 이벤트를 가져 오려면 다음을 시도하십시오.

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    application.OnMessage := AppMsg; 
    // Save the windows hande of the date time picker... 
    DTWind := DateTimePicker1.handle; 
end; 

procedure TForm1.AppMsg(var Msg: TMsg; var Handled: Boolean); 
begin 
    // If we find a mouse leave event, for the date/time picker, 
    // then do something 
    if (msg.message = 160) and 
    (msg.hwnd = DTWind) 
    then 
    begin 
    if dateTimePicker1.color = clBlue 
    then dateTimePicker1.Color := clRed 
    else dateTimePicker1.Color := clBlue; 
    end; 
end; 

이 (AppMsg를) 응용 프로그램의 메시지를 얻고 응용 프로그램 객체의 onMessage 이벤트에 할당하는 프로 시저를 작성 (이 코드는 날짜 시간 선택 컨트롤을 잡고 양식에). dateTimePicker 컨트롤의 창 핸들을 저장하십시오. 절차 내에서

, DateTimePicker 컨트롤에서 마우스 휴가 메시지를보고, 다음이 당신에게 일을 주위에 제공

희망 (내 예를 들어, 난 그냥 색상 재생) 원하는대로 처리 할 .

+0

질문의 제목은 Delphi 7을 나타냅니다. 'OnExit' 이벤트는 마우스 움직임을 처리하지 않고 curosr 이동 만 처리합니다. –

+0

그래, TDateTimePicker,하지만 OnExit은 완전히 다른 것입니다 –

+0

죄송합니다, 제 브라우저가 Delphi 버전을 차단했습니다 ... onMessage 이벤트를 캡처하고 CMMouseLeave 메시지에 응답 해보십시오. – Sparky

0

JVCL에는 datetimepicker 컨트롤이 있으며 Delphi 버전과 관계없이 OnMouseEnter/OnMouseLeave 이벤트가 있어야합니다 (AFAIK 모든 JVCL 컨트롤에 해당).

관련 문제