TShape没有窗口Handle,因此不能拥有事件.
但可以从挂在父窗口的事件上, 然后只要Mouse处在TMyShape的范围中,就可以执行你预备的动作.

解决方案 »

  1.   

    看一下:
    http://www.truevcl.com
      

  2.   

    to Muf: 
       TShape 为什么不能有事件?
       把OnMouseUp OnMouseDown OnMouseMove Publish不就行了?
       或者直接挂上自己的处理过程。  OnMOuseUp := DoMouseUp;
      OnMouseDown := DoMouseDown;procedure TMyShape.DoMouseUp( ... );
    begin
      //do sths here.
    end;
      

  3.   

    你可以在控件的 Publish 种添加,然后具体处理 WM_MOUSEXXX的消息!
      

  4.   

    感谢各位的帮助!
    但我还不明白如何在TMyShape中声明OnMouseUp OnMouseDown OnMouseMove事件处理程序,能否再说具体一点?
    另外,TMyShape应该会从Shape中继承OnMouseUp OnMouseDown OnMouseMove事件,由于我已经在TMyShape中实现了拖动,我不希望用户再去使用这三个事件,如何把它们屏蔽起来。