程序进入一个长循环后(也用了application.processmessage;)为何很多控件如Label,CheckBox等都无法触发MOUSEENTER或

  • 主题发起人 主题发起人 labixiaoxin
  • 开始时间 开始时间
L

labixiaoxin

Unregistered / Unconfirmed
GUEST, unregistred user!
程序进入一个长循环后(也用了application.processmessage;)为何很多控件如Label,CheckBox等都无法触发MOUSEENTER或MOUSELEAVE事件?(150)<br />如题。我当我的程序进入下面一个长循环后,窗口上很多控件如Label,CheckBox,还有我自已写的控件(从TCustomControl继承来)等都无法触发MOUSEENTER或MOUSELEAVE这两个事件?但是可以触发MOUSEMOVE,MOUSEDOWN,MOUSEUP等。从我自写的控件中跟踪,发现控件没有收到CM_MOUSEENTER或CM_MOUSELEAVE消息。其实我只要我自写的控件能收到这两个消息就行了。请问有没有大侠有触决方案? while true do begin .... application.processmessage; end;
 
CM_MOUSEENTER或CM_MOUSELEAVE是VCL定义的消息 从MOUSEMOVE,MOUSEDOWN,MOUSEUP消息分析出状态的。
 
像这种循环都要做到线程中,和主程序用自定义消息通信(或者delphi提供的同步函数synchronized)。 线程和自定义消息代码网上搜,很多的。。。
 
baiduan是正确的给分吧
 
同意 baiduan 的说法,以前遇到类似的问题,利用线程技术和自定义消息通信顺利解决
 
多人接受答案了。
 
后退
顶部