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个函数!谢谢!
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个函数!谢谢!
procedure OnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); overload; //重写我应该在哪里建立什么消息映射之类呢?
楼上这样果然行!
Self.OnMouseDown := OnMyPanelMouseDown;
Self.OnMouseMove := OnMyPanelMouseMove;
不过消息映射怎么建立呢?如果要重写的话。
这个就是Delphi的消息事件的实现了,不过一般写控件不直接对其进行改写,一般用这个函数来实现
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
而这个函数实际上就是调用你前面的OnMouseDown事件