type 
    Map = class(TPanel)
//////////////public
    procedure OnMyPanelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
    procedure OnMyPanelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); //鼠标移动//////////////procedure Map.OnMyPanelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ShowMessage('Mouse Down');
end;procedure Map.OnMyPanelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  ShowMessage('Mouse Move');
end;
   
TPanel是在一个 Form窗体里面动态生成的。
现在问题是:我在动态生成的TPanel上操作 Mouse Down 和 Mouse Move 时 并没有运行我自定义的2个函数!谢谢!

解决方案 »

  1.   

    你只是自定义了两个过程,根本没有将动态生成的 TPANEL 事件绑定给它,当然就不会自动执行了。
      

  2.   

    mypanel.OnMouseDown:= OnMyPanelMouseDown;
      

  3.   

    procedure OnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); overload; //重写
            procedure OnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); overload; //重写我应该在哪里建立什么消息映射之类呢?
      

  4.   


    楼上这样果然行!
        Self.OnMouseDown := OnMyPanelMouseDown;
        Self.OnMouseMove := OnMyPanelMouseMove;
    不过消息映射怎么建立呢?如果要重写的话。
      

  5.   

    procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
    这个就是Delphi的消息事件的实现了,不过一般写控件不直接对其进行改写,一般用这个函数来实现
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    而这个函数实际上就是调用你前面的OnMouseDown事件