我需要检测OnMouseLeave
组件的TDateTimePicker
事件,但事件列表中不包含此类事件。有没有办法手动检测它?
答案 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控件中查找鼠标离开消息,然后执行您想要的任何处理(如果我的示例,我只是使用颜色)
希望这能让你解决问题。