delphi - 如何为 onclick 事件选择 Delphi 框架而不是其组件?
问题描述
我创建了一个 VCL 表单,其中包含 a 的多个副本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;
推荐阅读
- databricks - dbutils.notebook.run 不选择保存在 DBFS 位置的运行笔记本
- python - 如何在 atom 上指定模块(django)的版本?
- sql-server - 'float' (DT_R8) 数据类型上的 SSIS 截断错误
- python - 我的代码以某种方式乘以 0.5 倍,我不知道为什么
- javascript - 如何在 Javascript 中检查和更改砖块的状态?
- php - 背景图像在实时服务器中有效,但在 Xamp 中无效
- javascript - Vue:模板不能键入,但不能用 div 替换模板 - 需要没有包装 div 元素的 v-for,嵌套的 v-for 循环
- elasticsearch - elasticsearch 7xx exceptions.RequestError
- spring-boot - 如何在春季云网关的路由级别覆盖默认过滤器参数?
- python - 修改 Pandas DataFrame crosstab() 的 matplot.pyplot.plot() 的线型