-
-
Notifications
You must be signed in to change notification settings - Fork 17
/
ksAppEvents.pas
96 lines (75 loc) · 3.14 KB
/
ksAppEvents.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
{*******************************************************************************
* *
* PentireFMX *
* *
* https://github.com/gmurt/PentireFMX *
* *
* Copyright 2020 Graham Murt *
* *
* email: [email protected] *
* *
* Licensed under the Apache License, Version 2.0 (the "License"); *
* you may not use this file except in compliance with the License. *
* You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an "AS IS" BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License forthe specific language governing permissions and *
* limitations under the License. *
* *
*******************************************************************************}
unit ksAppEvents;
interface
uses FMX.Objects, FMX.Platform;
type
IksEventForm = interface
['{2A2C3294-795B-4CC3-85FE-99F9A29DEAA9}']
procedure DoAppEvent(AAppEvent: TApplicationEvent);
end;
implementation
uses
System.SysUtils, System.Classes, FMX.Forms, fmx.dialogservice;
type
TksAppEvents = class
private
public
constructor Create; virtual;
function DoAppEvent(AAppEvent: TApplicationEvent; AContext: TObject) : Boolean;
end;
var
AAppEvents: TksAppEvents;
{ TksAppEvents }
function TksAppEvents.DoAppEvent(AAppEvent: TApplicationEvent;
AContext: TObject): Boolean;
var
ICount: integer;
AIntf: IksEventForm;
begin
if aappevent <> TApplicationEvent.BecameActive then exit;
for ICount := 0 to Screen.FormCount-1 do
begin
if Supports(Screen.Forms[ICount], IksEventForm, AIntf) then
begin
tthread.Synchronize(nil, procedure begin
AIntf.DoAppEvent(AAppEvent);
end
);
end;
end;
Result := True;
end;
constructor TksAppEvents.Create;
var
AppEventSvc: IFMXApplicationEventService;
begin
if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(AppEventSvc)) then
AppEventSvc.SetApplicationEventHandler(DoAppEvent);
end;
initialization
AAppEvents := TksAppEvents.Create;
finalization
AAppEvents.Free;
end.