我创建了一个VCL表单,其中包含的多个副本TFrame,每个副本包含多个TLabel组件。
标签占据了框架内部的大部分区域,几乎没有暴露的客户区域用于专门选择框架。当用户选择框架组件并在各种标签标题中显示特定文本时,该程序必须采取措施。问题是,如果用户单击标签组件之一而不是框架中的空白区域,OnClick则不会触发该事件。
OnClick如果用户单击框架中的任意位置,如何生成框架的事件?
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)
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |