2016-11-26 3 views
4

Wie erkennt man den Mausklick außerhalb der Komponente? Ich mache einen benutzerdefinierten Kalender und wenn ich auf das TLabel mit dem präsentierten Datum klicke, erscheint der TCalendar. Es funktioniert. Aber ich möchte den TCalendar verschwinden lassen, wenn sich die Maus außerhalb der Komponente befindet und die Taste gedrückt wird? In VCL kann ich die WindowsMessages verwenden, aber es gibt einen Firemonkey und ich möchte ihn auch bei iOS verwenden.Delphi 10.1 Firemonkey - Erkennen des Mausklicks außerhalb der Komponente

BR

+1

Was ist mit dem Verstecken des Kalenders, wenn er den Fokus verliert? Alle visuellen Steuerelemente verfügen über ein Ereignis "OnExit" (http://docwiki.embarcadero.com/Libraries/en/FMX.Controls.TControl.OnExit). Alternativ können Sie beim Anzeigen des Kalenders versuchen, die geschützte Methode ['Capture()'] (http://docwiki.embarcadero.com/Libraries/en/FMX.Controls.TControl.Capture) aufzurufen (oder dessen [' AutoCapture "] (http://docwiki.embarcadero.com/Libraries/en/FMX.Controls.TControl.AutoCapture) Eigenschaft auf true), so dass alle Mausereignisse erfasst werden. –

+0

OnExit existiert nicht in FMX TCalendar ... – Wojtek

+0

Wie ich bereits sagte, ** alle visuellen Steuerelemente haben eine ['OnExit'] (http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.Controls .TControl.OnExit) Ereignis **. Es wird von 'TControl' übernommen. Und "OnExit" ist definitiv [** veröffentlicht in 'TCalendar' **] (http://docwiki.embarcadero.com/Libraries/Berlin/de/FMX.Calendar.TCalendar_Events). Überprüfen Sie die Deklaration von 'TCalendar' in' FMX.Calendar.pas' für sich selbst. Sie werden sehen, dass dies der Fall ist: 'TCalendar = Klasse (TCustomCalendar) veröffentlicht ... {Events} Eigenschaft OnExit; ... Ende; ' –

Antwort

2

Versuchen Sie dies. Es erhält Mauspos auf dem Bildschirm (Win, iOS, Android). So können Sie feststellen, wenn der Cursor außerhalb Ihrer Kontrolle ist. Und für MouseDown versuchen Sie, MouseDown in Form zu verwenden.

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