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

问题描述 投票:1回答:3

我创建了一个VCL表单,其中包含一个tframe的多个副本,每个副本包含多个tlabel组件。标签占据了框架内部的大部分区域,几乎没有暴露的框架区域用于专门选择框架。当用户选择框架组件并在各种标签标题中显示特定文本时,该程序必须采取措施。问题是,如果用户单击标签组件之一而不是框架中的开放区域,则不会触发onclick事件。如果用户指向并单击框架中的任何位置,如何生成框架的onclick事件?

delphi components
3个回答
1
投票

也将相同的OnClick事件处理程序也分配给内部的每个标签。多个控件可以共享同一事件处理程序,只要它们具有相同的签名即可。


0
投票

如果您不介意Label的文本为灰色,则只需将Labels的Enabled属性设置为False。这将防止您的标签捕获任何键盘或鼠标事件,因此所有这些事件都将到达底层框架。


0
投票

VCL在确定控件是否为有效目标之前,先测试控件对鼠标事件的响应。您可以使用专门的标签来修改此响应。如果期望所有标签的行为相同,最简单的方法是在帧单元中使用插入器类。

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

  TMyFrame = class(TFrame)
  ...
...

procedure TLabel.CMHitTest(var Message: TCMHitTest);
begin
  Message.Result := HTNOWHERE;
end;
© www.soinside.com 2019 - 2024. All rights reserved.