В XE6 появился специальный сервис для контролирования смены состояния приложения IFMXApplicationEventService. Он позволяет задать свой обработчик на событие смены состояния. Всего поддерживаются следующие типы состояний TApplicationEvent:
FinishedLaunching - приложение запущено
BecameActive - приложение стало активным, после того, как до этого было свернутым.
WillBecomeInactive - приложение будет активировано
EnteredBackground - приложение свернулось
WillBecomeForeground - приложение будет свернуто
WillTerminate - приложение будет завершено
LowMemory - Нехватка памяти
OpenURL - открытие приложение по ссылке.
1 Способ. Запрос сервиса IFMXApplicationEventService
Соответственно, чтобы узнать о смене состояния нужно:
Запросить сервис:
uses
FMX.Platform;
var
ApplicationService: IFMXApplicationEventService;
begin
TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, ApplicationService);
Создать свой обработчик и задать его при помощи полученного сервиса:
function TForm1.ApplicationEventChanged(AAppEvent: TApplicationEvent;
AContext: TObject): Boolean;
begin
// Здесь получаем новое состояние приложения
end;
var
ApplicationService: IFMXApplicationEventService;
begin
TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, ApplicationService);
if ApplicationService <> nil then
ApplicationService.SetApplicationEventHandler(ApplicationEventChanged);
end;
2 Способ. Подписка на получение сообщения:
Вместе со сменой состояния платформа FMX осуществляет широковещательную рассылку сообщения о смене состояния: TApplicationEventMessage
Второй способ заключается в подписке на это сообщение:
Подписываемся на получение сообщения TApplicationEventMessage:
uses
System.Messaging;
// Подписка
TMessageManager.DefaultManager.SubscribeToMessage(TApplicationEventMessage, DoApplicationEventChanged);
Получаем сообщения
procedure DoApplicationEventChanged(const Sender: TObject; const Message: TMessage);
begin
end;
Не забываем отписаться от сообщений, когда это больше уже не нужно:
// Отписка
TMessageManager.DefaultManager.Unsubscribe(TApplicationEventMessage, DoApplicationEventChanged);