0

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

4

3 回答 3

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;
于 2009-11-20T12:55:04.103 回答
0

JVCL有一个 datetimepicker 控件,无论 Delphi 版本如何,它都应该有 OnMouseEnter/OnMouseLeave 事件(AFAIK 所有 JVCL 控件都有这些)。

于 2009-11-20T11:27:09.793 回答
-2

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

了解您使用的是哪个版本的 Delphi 也会很有帮助

谢谢...

对不起,我昨天可以提供更多帮助,我所在的计算机没有安装 Delphi。要为不导出它的特定控件获取鼠标离开事件,请尝试以下操作。(此代码在包含日期时间选择器控件的表单上)

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

希望这能给你一个解决方法。

于 2009-11-20T11:16:57.240 回答