2016-11-26 64 views
4

如何检测组件外部的鼠标点击? 我正在制作自定义日历,当点击提交日期的TLabel时 - TCalendar正在出现。它正在工作。但是当鼠标位于组件之外并且按下按钮时,我想消失TCalendar?在VCL中,我可能会使用WindowsMessages,但有一个Firemonkey,我也想在iOS上使用它。Delphi 10.1 Firemonkey - 检测组件外部的鼠标

BR

+1

如何隐藏日历,当它失去了重点?所有视觉控件都有['OnExit'](http://docwiki.embarcadero.com/Libraries/en/FMX.Controls.TControl.OnExit)事件。或者,在显示日历时,您可以尝试调用其受保护的['Capture()'](http://docwiki.embarcadero.com/Libraries/en/FMX.Controls.TControl.Capture)方法(或设置其[[ AutoCapture'](http://docwiki.embarcadero.com/Libraries/en/FMX.Controls.TControl.AutoCapture)属性为true),以便捕获所有鼠标事件。 –

+0

OnExit在FMX的TCalendar中不存在... – Wojtek

+0

如前所述,**所有可视控件都有一个['OnExit'](http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.Controls .TControl.OnExit)事件**。它是从'TControl'继承的。 'OnExit'肯定是[**发布在'TCalendar' **](http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.Calendar.TCalendar_Events)。检查'FMX.Calendar.pas'中'TCalendar'的声明,你会发现这是真的:'TCalendar = class(TCustomCalendar)published ... {Events} property OnExit; ...结束;' –

回答

2

试试这个。它在屏幕上获得鼠标位置(Win,iOs,Android)。所以你可以用它来找出光标何时不在你的控制之下。对于MouseDown,请尝试在Form上使用MouseDown。

function MousePos: TPointF; 
var 
    MouseService: IFMXMouseService; 
begin 
    if TPlatformServices.Current.SupportsPlatformService(IFMXMouseService, IInterface(MouseService)) then 
    Exit(MouseService.GetMousePos); 
    Result := PointF(0, 0); 
end;