Несмотря на то, что библиотека FireMonkey предлагает нам универсальный инструмент, позволяющий создавать приложения, предназначенные для работы на разных программных платформах, надо понимать, что ни одна из библиотек не в состоянии полноценно заменить родной API целевой операционной системы. Поэтому уже в данной главе позволю дать вам совет— если в вашем проекте потребуется воспользоваться функциями API, принадлежащими исключительно Windows, OS X или iOS, то перед обращением к ним необходимо явным образом указать компилятору об их использовании так, как предложено в листинге
procedure TForml.FormShow (Sender:
TObj ect);
begin
{5IFDEF MSWINDOWS}
//код для операционной системы Windows Labell.Text: = * Hello, Windows!1;
{$ELSE} {$IFDEF MACOS}
//код для операционной системы OS X Labell.Text:='Hello, Mac!';
{$ELSE} {$IFDEF IOS}
//код для мобильной платформы iOS Labell.TextHello, iPhone (iPad)!';
{$ELSE} {$IFDEF ANDROID}
//код для мобильной платформы Android Labell.Text:='Hello, Android!';
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$ENDIF} and;
{5IFDEF MSWINDOWS}
//код для операционной системы Windows Labell.Text: = * Hello, Windows!1;
{$ELSE} {$IFDEF MACOS}
//код для операционной системы OS X Labell.Text:='Hello, Mac!';
{$ELSE} {$IFDEF IOS}
//код для мобильной платформы iOS Labell.TextHello, iPhone (iPad)!';
{$ELSE} {$IFDEF ANDROID}
//код для мобильной платформы Android Labell.Text:='Hello, Android!';
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$ENDIF} and;
Во время компиляции вашего приложения Delphi разберется с подключением к проекту необходимых библиотек и создаст бинарный код для требуемой операционной системы.
Еще одна задача, которую, возможно, придется решать разработчику кроссплат- форменного приложения, связана с определением базовых характеристик операционной системы, под управлением которой запускается его творение. Если речь идет о настольном приложении, предназначенном для работы под Windows или OS X, то
наиболее универсальным помощником станет интеллектуальная запись TOSVersion, объявленная в программном модуле System. Sysutiis. С помощью этой записи мы в два счета выясним тип ОС и процессора.
procedure TForml.FormShow(Sender:
TObj ect);
var s:string;
begin
//-------------------------------------------------------------- OS-------------------------------------------------- '-----
case TOSVersion.Platform of pfWindows : s:=’Windows’; pfMacOS : s:=’OS X’;
pfiOS : s:='iOS1;
pfAndroid : s:='Android'; pfWinRT : s:='Win RT1;
pfLinux : s:=fLinux1;
end;
Label/1. Text: = * Операционная система ’ +s;
Label2.Text:=TOSVersion.ToString;
// CPU---------------------------------------------------------------------
case TOSVersion.Architecture of
TOSVersion.TArchitecture.arIntelX86 : s: = ’IntelX86f;
TOSVersion.TArchitecture.arIntelX64 : s:=1IntelX641;
TOSVersion.TArchitecture.arARM32 : s:=’ARM32f;
else s:=1Неопределена’; end;
Labe13.Text:='Архитектура процессора ’+s;
Label4.Text:=Format(’Ядер %df, [ TThread.ProcessorCount]); end;
var s:string;
begin
//-------------------------------------------------------------- OS-------------------------------------------------- '-----
case TOSVersion.Platform of pfWindows : s:=’Windows’; pfMacOS : s:=’OS X’;
pfiOS : s:='iOS1;
pfAndroid : s:='Android'; pfWinRT : s:='Win RT1;
pfLinux : s:=fLinux1;
end;
Label/1. Text: = * Операционная система ’ +s;
Label2.Text:=TOSVersion.ToString;
// CPU---------------------------------------------------------------------
case TOSVersion.Architecture of
TOSVersion.TArchitecture.arIntelX86 : s: = ’IntelX86f;
TOSVersion.TArchitecture.arIntelX64 : s:=1IntelX641;
TOSVersion.TArchitecture.arARM32 : s:=’ARM32f;
else s:=1Неопределена’; end;
Labe13.Text:='Архитектура процессора ’+s;
Label4.Text:=Format(’Ядер %df, [ TThread.ProcessorCount]); end;
Если речь идет о мобильной платформе iOS, то
для получения сведений об устройстве и его ОС можно воспользоваться услугами API операционной
системы, подключив К проекту модуль iOSapi.UIKit
iOSapi.UIKit;
{$R *.fmx} .
procedure TForml.FormShow(Sender: TObj ect); var MobileDevice : UIDevice; s:string;
begin
MobileDevice := TUIDevice.Wrap(TUIDevice.OCClass.currentDevice);
case MobileDevice.userlnterfaceldiom of UlUserlnterfaceldiomPhone: s: = * iPhone';
UlUserlnterfaceldiomPad : s: =1 i'Pad ’; else s: =1Other *; end;
Label1.Text:=fУстройство '+s;
Label2.Text := Format('ОС: %s %sf, [MobileDevice.systeinName.UTF8String,
MobileDevice.systemVersion.UTF8String]);
end;
{$R *.fmx} .
procedure TForml.FormShow(Sender: TObj ect); var MobileDevice : UIDevice; s:string;
begin
MobileDevice := TUIDevice.Wrap(TUIDevice.OCClass.currentDevice);
case MobileDevice.userlnterfaceldiom of UlUserlnterfaceldiomPhone: s: = * iPhone';
UlUserlnterfaceldiomPad : s: =1 i'Pad ’; else s: =1Other *; end;
Label1.Text:=fУстройство '+s;
Label2.Text := Format('ОС: %s %sf, [MobileDevice.systeinName.UTF8String,
MobileDevice.systemVersion.UTF8String]);
end;