如何为onclick事件选择Delphi框架而不是其组件?

Ash*_*lar 4 delphi components

我创建了一个VCL表单,其中包含的多个副本TFrame,每个副本包含多个TLabel组件。

标签占据了框架内部的大部分区域,几乎没有暴露的客户区域用于专门选择框架。当用户选择框架组件并在各种标签标题中显示特定文本时,该程序必须采取措施。问题是,如果用户单击标签组件之一而不是框架中的空白区域,OnClick则不会触发该事件。

OnClick如果用户单击框架中的任意位置,如何生成框架的事件?

Ser*_*yuz 9

VCL在确定图形控件(非窗口控件)是否为有效目标之前,会对其进行测试。您可以使用专门的标签来修改此响应。最简单的方法是在框架单元中使用插入器类(如果期望所有标签的行为相同)。

type
  TLabel = class(Vcl.StdCtrls.TLabel)
  protected
    procedure CMHitTest(var Message: TCMHitTest); message CM_HITTEST;
  end;

  TMyFrame = class(TFrame)
  ...
  end;

...

procedure TLabel.CMHitTest(var Message: TCMHitTest);
begin
  Message.Result := HTNOWHERE;
end;
Run Code Online (Sandbox Code Playgroud)