我在一个Panel上放置了另一个控件SCode(其他公司的一个ocx控件),而SCode没有关于移动的事件(如:OnMouseMove、OnMouseUp、OnMouseDown等),只有关于拖动的事件;我的目的是想在程序运行过程中移动这个SCode控件的同时Panel能随着它移动,这个Panel比较小正好装载这个SCode,不知道该怎么做。请达人指点目前我是知道Panel和Memo的移动,不过这两个控件都是有OnMouseMove这个事件比较好做,而SCode没有这个事件就不知道怎么做了

解决方案 »

  1.   

    直接移动panal就可以移动在它上面的任何控件,
    -没有试过,想当然而已.
      

  2.   

    在Application.OnMessage里面处理:)
      

  3.   

    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure foo(var Msg: TMsg; var Handled: Boolean);
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.foo(var Msg: TMsg; var Handled: Boolean);
    var
      s: string;
    begin
      s:='MsgID: %d, wParam: %d, lParam: %d, X: %d, Y: %d';
      caption:=format(s, [Msg.message, Msg.wParam, Msg.lParam, Msg.pt.X, Msg.pt.Y]);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      application.OnMessage:=foo;
    end;end.根据你捕获到的消息,然后经过一系列计算就可以了:)
      

  4.   

    你之所以不能够拖动那个ocx控件就是因为没有OnMouseMove等一系列事件,我给你的代码只是想说明OnMessage这个事件可以捕获程序中所有(消息队列中的)消息,只不过没有OnMouseMove那么直观的,你需要从这些消息中过滤出对你有用的信息,比如说鼠标被按下、拖动、XY坐标等等,有了这些以后你就可以像处理OnMouseMove的方法一样处理了,比如:Panel1.Left:=Panel1.Left+(X-X_Old);等等