Перейти к содержанию
  • 0
97mik

Делаем в FireMonkey несколько разных форм отдельно для телефона отдельно для планшетов

Вопросы

Как сделать чтобы для iPhone например была одна форма, а для iPad другая?

Поделиться сообщением


Ссылка на сообщение

Рекомендуемые сообщения

  • 0

Есть два решения:

  1. Использовать встроенный в FireMonkey механизм автоматического выбора нужной формы (Для телефона или планшета)
  2. При запуске приложения определять тип устройства и создавать нужную формы вручную.

Я рассмотрю первый вариант. Поскольку со вторым более менее все понятно. Первое решение основывается на понятии семейства форм. Основная идея следующая, вы определяете какие формы должны быть в вашем приложения без привязки к устройствам.

 

Например, у вас получилось:

  1. Основная форма с данными
  2. Форма с настройками
  3. и тд 

То что мы перечислили в FireMonkey называется семейство форм или FormFamily. Далее вы создаете несколько форм в каждой семействе отдельно для телефона, отдельно для планшета, а отдельно для настольных систем. Далее все формы одного семейства помечаются через свойство формы TForm.FormFamily названием семейства (любой строковый идентификатор). Для каждой формы вы указываете через TForm.FormFactor на какие ориентации рассчитана каждый форма и на какие устройства, так же не забываем про размер формы на конечном устройстве.

 

Далее приложение на основе этой информации автоматически выбирает нужную форму. Чтобы открыть нужную форму в семействе нужно использовать методы, которые по названию семейства вернут экземпляр формы Application: TApplication.

function GetDeviceForm(const FormFamily: string; const FormFactor: TFormFactor): TCommonCustomForm; overload;
function GetDeviceForm(const FormFamily: string): TCommonCustomForm; overload;

Для ручной регистрации ваших форм в приложении используйте метод у Application: TApplication:

procedure RegisterFormFamily(const AFormFamily: string; const AForms: array of TComponentClass);

По умолчанию семейство главных форм называется "MainForm".

 

Теперь то же самое, но на практике:

 

1. Создаем по отдельной форме для телефона и планшета. Я сделал две формы: PhoneFrm.FormPhone и TabletFrm.FormTablet.

post-1-0-53965900-1390838817.jpg

 

2. Для формы телефона FormPhone указываем размеры формы через TFormFactor и в FormFactor.Devices указываем, что форма рассчитана для телефона iPhone

post-1-0-92200000-1390838817.jpg

 

3. Аналогично для формы планшета FormTablet указывает размер формы через TFormFactor и в FormFactor.Devices указываем, что форма рассчитана для планшетов iPad.

post-1-0-23061600-1390838818.jpg

 

4. Для этих форм задаем название семейства форм FormFamily = "MainForm". Это название семейства по умолчанию для главной формы. Обратите внимание, что в файле проекта появились следующие строки:

program MultiFormsSample;

uses
  System.StartUpCopy,
  FMX.Forms,
  PhoneFrm in 'PhoneFrm.pas' {FormPhone},
  TabletForm in 'TabletForm.pas' {FormTablet};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TFormPhone, FormPhone);
  Application.CreateForm(TFormTablet, FormTablet);
  Application.RegisterFormFamily('MainForm', [TFormPhone, TFormTablet]);
  Application.Run;
end.

Для нас же самое интересное это метод RegisterFormFamily, который регистрирует в системе наши формы под семейством MainForm. В момент запуска Application выберет нужную форму по заданным параметрам в FormFactor.

 

5. Наблюдаем результат работы под симулятором iPad и iPhone

post-1-0-69713800-1390839263.pngpost-1-0-77075700-1390839263.png

 

P.S. Исходники примера доступны для скачивания тут (RAD Studio XE5 Update 2):MultiFormsSample.zip

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...