首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Delphi7中捕获TDateTimePicker组件的onmouseleave事件

如何在Delphi7中捕获TDateTimePicker组件的onmouseleave事件
EN

Stack Overflow用户
提问于 2009-11-20 18:53:13
回答 3查看 1.1K关注 0票数 0

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-20 20:55:04

您可以取消对CMMouseLeave过程的保护。

代码语言:javascript
复制
TDateTimePicker = class(ComCtrls.TDateTimePicker)   
   procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;  
 end;

 { TDateTimePicker }

 procedure TDateTimePicker.CMMouseLeave(var Message: TMessage);
 begin 
   {do something}; 
 end;
票数 2
EN

Stack Overflow用户

发布于 2009-11-20 19:27:10

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

票数 0
EN

Stack Overflow用户

发布于 2009-11-20 19:16:57

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

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

谢谢..。

对不起,我昨天可以提供更多的帮助,我使用的计算机没有安装Delphi。要获取不导出特定控件的Mouse Leave事件,请尝试执行以下操作。(此代码位于包含日期时间选择器控件的窗体上)

代码语言:javascript
复制
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控件的鼠标留言消息,然后执行所需的任何处理(如果是我的示例,我只是处理颜色)

希望这能给你一个变通的方法。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1769719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档