将控件上的滑下事件转移到其父控件

  • 本文关键字:控件 事件转移 delphi
  • 更新时间 :
  • 英文 :


面板上有一个标签。是否可以将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。当子窗口被销毁时,系统在任何销毁窗口的处理发生之前发送消息。

最新更新