面板上有一个标签。是否可以将mousedown事件转移到父控件,当标签上有mousedown事件时,它可以触发其父面板的mousedown事件?
试试这个:
type
TMyControl = class(TControl);
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton; Shift:
TShiftState; X, Y: Integer);
begin
TMyControl(Label1.Parent).MouseDown(Button, Shift, X, Y);
end;
TMyControl声明是用来访问TControl的受保护的可见性MouseDown方法的
OnMouseActivate表单事件帮助您。或者你可以处理消息WM_MOUSEACTIVATE和CM_MOUSEACTIVATE
你可以在"hacking"你的TLabel。
→重新声明它,并重新实现它的procedure CMHitTest(var Message: TCMHitTest); message CM_HITTEST
,如下所示:
procedure TLabel.CMHitTest(var Message: TCMHitTest);
begin
Message.Result := HTNOWHERE;
end;
为TPanel
, TLabel
的父级,VCL执行此操作。控件function TWinControl.ControlAtPos(xxx): TControl
将返回nil
WM_PARENTNOTIFY https://learn.microsoft.com/en-us/previous-versions/ms632638(v=vs.85)
当子窗口被创建或销毁时,或者当用户在子窗口上方单击鼠标按钮时,发送给子窗口的父窗口。当子窗口被创建时,系统在创建窗口的CreateWindow或createwindowwex函数返回之前发送WM_PARENTNOTIFY。当子窗口被销毁时,系统在任何销毁窗口的处理发生之前发送消息。