我需要检测组件的OnMouseLeave
事件TDateTimePicker
,但它在事件列表中不包含此类事件。有没有办法手动检测?
问问题
1153 次
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 回答