Что делать, когда код зависит от платформы?

Несмотря на то, что библиотека 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;

 

 

Во время компиляции вашего приложения 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;

 

 

Если речь идет о мобильной платформе 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;


������� ������ ��� dle ������� ��������� ������

Помоги проекту! Расскажи друзьям об этом сайте: