如何在Delphi 7中捕获TDateTimePicker组件的onmouseleave事件

时间:2009-11-20 10:53:13

标签: delphi events datetime mouseevent onmouseout

我需要检测OnMouseLeave组件的TDateTimePicker事件,但事件列表中不包含此类事件。有没有办法手动检测它?

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

JVCL有一个datetimepicker控件,它应该有OnMouseEnter / OnMouseLeave事件而不管Delphi版本(AFAIK所有JVCL控件都有这些)。

答案 2 :(得分:-2)

TDateTime不是可视组件,因此它不会有鼠标离开事件。你能检查实际的组件(它是日期时间选择器吗?)onExit事件应该处理鼠标离开可视控件。

了解您正在使用的Delphi版本

也会有所帮助

...谢谢

抱歉,我昨天可以提供更多帮助,我所在的电脑没有安装Delphi。要为不导出它的特定控件获取Mouse Leave事件,请尝试以下操作。 (此代码位于持有日期时间选择器控件的表单上)

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控件中查找鼠标离开消息,然后执行您想要的任何处理(如果我的示例,我只是使用颜色)

希望这能让你解决问题。