首页 > 解决方案 > 如何为 onclick 事件选择 Delphi 框架而不是其组件?

问题描述

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

标签占据了框架内的大部分区域,为专门选择框架提供了很少的暴露客户区域。当用户选择框架组件并在各种标签标题中显示特定文本时,程序必须采取行动。问题在于,如果用户单击其中一个标签组件而不是框架中的一个开放区域,OnClick则不会触发该事件。

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

标签: delphicomponents

解决方案


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;

推荐阅读