TLabel OnMouseDown 事件未在 Firemonkey 中触发
TLabel OnMouseDown event not firing in Firemonkey
我试图在用户触摸时更改 TLabel
颜色,但看起来 MouseDown
事件没有被触发。
procedure TForm_Master.tv_1Down(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
tv_1.FontColor := TAlphaColors.Dodgerblue;
end;
可能出了什么问题?
如果我们将 HitTest
设置为 True
,此控件将捕获所有鼠标 OnClick
和 OnDblClick
事件。
如果我们把HitTest
设置为False
,这两个鼠标点击事件都会通过这个控件,这样放置在这个控件后面的一个控件就会接收到鼠标事件,而不是这个控件。
对于大多数控件,HitTest
默认为 True
。但是,对于 TLabel
和 TPathLabel
则不是这样,其中 HitTest
默认为 False;这两个控件不会捕获 OnClick
和 OnDblClick
事件,除非您将 HitTest
设置为 True
。
http://docwiki.embarcadero.com/Libraries/XE8/en/FMX.Controls.TControl.HitTest
不幸的是,Machado 的解决方案在使用样式和以编程方式创建的标签时似乎不起作用。
在这种情况下,更容易创建看起来像标签的按钮样式(例如在样书中将其背景不透明度设置为 0),然后使用样式化的按钮而不是标签。
在您的情况下,您通过设置样式按钮的 OnClick 属性 触发的 TNotifyEvent 事件将根据需要更改任何对象的样式。使用样式有助于保持一致的外观。例如。将 TStyleBook 置于空表单中,并从该基本表单继承应用程序的其他来源。
我试图在用户触摸时更改 TLabel
颜色,但看起来 MouseDown
事件没有被触发。
procedure TForm_Master.tv_1Down(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
tv_1.FontColor := TAlphaColors.Dodgerblue;
end;
可能出了什么问题?
如果我们将 HitTest
设置为 True
,此控件将捕获所有鼠标 OnClick
和 OnDblClick
事件。
如果我们把HitTest
设置为False
,这两个鼠标点击事件都会通过这个控件,这样放置在这个控件后面的一个控件就会接收到鼠标事件,而不是这个控件。
对于大多数控件,HitTest
默认为 True
。但是,对于 TLabel
和 TPathLabel
则不是这样,其中 HitTest
默认为 False;这两个控件不会捕获 OnClick
和 OnDblClick
事件,除非您将 HitTest
设置为 True
。
http://docwiki.embarcadero.com/Libraries/XE8/en/FMX.Controls.TControl.HitTest
不幸的是,Machado 的解决方案在使用样式和以编程方式创建的标签时似乎不起作用。
在这种情况下,更容易创建看起来像标签的按钮样式(例如在样书中将其背景不透明度设置为 0),然后使用样式化的按钮而不是标签。
在您的情况下,您通过设置样式按钮的 OnClick 属性 触发的 TNotifyEvent 事件将根据需要更改任何对象的样式。使用样式有助于保持一致的外观。例如。将 TStyleBook 置于空表单中,并从该基本表单继承应用程序的其他来源。