各种tcontrol都有onmousedown onmouseup以及onmousemove的事件,
但是美中不足的是没有onenter和onexit事件,
如果我想在进入button的区域时,改变该button的caption,这就不好实现了
类似的情况还可能是一个image,或者一个stringgird。
请问如何模拟这种事件呢。谢谢。

解决方案 »

  1.   

    用MouseMove不行吗?
    在TForm1.Form1MouseMove中判断Mouse的X,y与button的Left,Left+width,top,Top+Height的关系
      

  2.   

    http://expert.csdn.net/Expert/topic/1151/1151295.xml
    http://expert.csdn.net/Expert/topic/1021/1021357.xml
      

  3.   

    hujianlinsoft(深蓝): 好注意。。
      

  4.   

    procedure OnEnter(var msg:TMessage); message CM_MOUSEENTER;
     procedure OnLeave(var msg:TMessage); message CM_MOUSELEAVE;
      

  5.   

    procedure Form.OnLeave(var msg:tmessage);
    var
     obj:TObject;
    begin
     obj:=Tobject(msg.lParam);//鼠标所在的控件
     if obj<>nil then
     begin 
      //确定控件的类型
       //你的处理
     end;
      

  6.   

    lanxingw(Qao Kei)的方法可能不行,如果obj:=Tobject(msg.lParam)可以的话,那么obj大部分时间都是form,那么回闪的利害,可能需要假一个判断,如果这样真的行的话,倒是一个好办法。
      

  7.   

    所有窗口都有CM_MOUSEENTER,CM_MOUSELEAVE 这两个标准Windows消息,要实现你的功能,可以截取这两个消息进行处理:在你的控件或窗口的类定义里(如过没有你的类定义,那你就继承一个自己的类),然后在这个类定义里截取消息:
    procedure OnEnter(var msg:TMessage); message CM_MOUSEENTER;
    procedure OnLeave(var msg:TMessage); message CM_MOUSELEAVE;
      

  8.   

    procedure OnEnter(var msg:TMessage); message CM_MOUSEENTER;
     procedure OnLeave(var msg:TMessage); message CM_MOUSELEAVE;以上方法可是可以,但有问题:Mouse移动太快时就不行了。
      

  9.   

    以上的方法可以的,没有人会没事找事,Mouse移动的那么快
      

  10.   

    hujianlinsoft(深蓝)的那种方法可以,我以前试过
      

  11.   

    同意:ehom(?!) 
    建议使用 http://expert.csdn.net/Expert/topic/1151/1151295.xml但是如果想在 多种不同的控件上实现这种效果,好象又过于麻烦,
    不知是否可以做一个东西替换掉
    Hintwindow,是否可以实现???
      

  12.   

    procedure OnEnter(var msg:TMessage); message CM_MOUSEENTER;
    procedure OnLeave(var msg:TMessage); message CM_MOUSELEAVE;
    肯定可以的procedure TForm1.OnEnter(var msg :TMessage);
    Begin
      if Msg.LParam =LongInt(SpeedButton1) then
         SpeedButton1.Font.Style :=SpeedButton1.Font.Style + [fsBold];
    End