Как реализовать мобильные альтернативные формы fmx в Delphi XE6

Я пишу мобильное приложение, используя Delphi XE6, и нашел в одном из примеров в их репозитории возможность иметь основной вид и альтернативные представления fmx для разных устройств. Образец выглядел так, как если бы он выбрал правильную форму на основе директив компилятора, но я не могу заставить это работать. Интерфейс выглядит великолепно, так как я могу иметь мастер-форму с базовым содержимым, а затем реализовывать унаследованные изменения в зависимости от размера экрана и возможностей. В этом представлении есть значки, такие как «Добавить представление» и «Удалить представление». При выборе «Добавить представление» появляется диалоговое окно всех устройств Android и iOS, позволяющее выбрать, а затем при выборе отображаются дополнительные представления со значком фона устройства, например iPhone5. Затем устройство показывает несколько ссылок следующим образом:

implementation

uses Math;

{$R *.fmx}

{$R *.iPhone5.fmx IOS}

{$R *.Samsung_Galaxy_S4.fmx ANDROID}

Затем в альтернативных представлениях отображаются свойства, унаследованные от основной формы, что позволяет изменять значения и включать определенные стили, соответствующие платформе. Если бы это сработало, это сэкономило бы столько усилий. В настоящее время у меня проблемы с TStyleBook, поскольку стиль iOSBlack несовместим с Android и выдает ошибку на устройстве. При использовании стиля AndroidDark аналогичная проблема возникает на устройстве iOS. Кто-нибудь имел опыт работы с этим режимом множественного просмотра?

Спасибо!


person Randy Sill    schedule 14.08.2014    source источник
comment
Показанный вами образец недействителен на любой платформе или версии Delphi (он вообще не скомпилируется). Можете ли вы предоставить конкретную ссылку на пример в репозитории, который вы описываете?   -  person Ken White    schedule 14.08.2014
comment
Отлично компилируется в моей версии XE6 Architect. Обратите внимание, что все 3 файла fmx должны существовать. Пример взят из [link](svn.code.sf.net/p/radstudiodemos/code/trunk/Object Pascal/Mobile Samples/User Interface/ListView) из проекта SampleListViewAddThumbAndCaptionProject и, в частности, KeyboardDemoForm.pas. Скриншоты того, как это выглядит здесь: ссылка ссылка   -  person Randy Sill    schedule 15.08.2014
comment
Сейчас я смотрю на AddThumbAndMainFormU.pas в своей системе, и implementation содержит только uses System.Math; {$R *.fmx}, прежде чем объявлять константы и запускать реализацию методов для TForm594. 2-го и 3-го {$R} не существует. (Показанный синтаксис не подходит для {$R}, поэтому я сделал свой первый комментарий. Правильный синтаксис — {$R resourcefile resourcescript}, а * относится к имени юнита. Также нет файлов AddThumbAndCaptionMainFormU.iPhone.fmx или AddThumbAndCaptionMainFormU.Samsung_Galaxy_S4.fmx, что может привести к сбою. Это ваши файлы?   -  person Ken White    schedule 15.08.2014
comment
Я указал не тот файл pas, но вы это заметили. Я использую TRUNK, а не ветку XE6 от radstudiodemos, возможно, вы используете ветку. {$R *.fmx} {$R *.LgXhdpiPh.fmx ANDROID} находится в AddThumbAndCaptionMainFormU.pas, и у меня есть файл AddThumbAndCaptionMainFormU.LgXhdpiPh.fmx в моей папке списка. Они есть в репозитории. Возможно, это наконец-то реализованный режим редактирования для XE7.   -  person Randy Sill    schedule 15.08.2014
comment
Просмотр нескольких устройств не является функцией XE6. Учитывая, что изменения в нескольких представлениях были проверены в демонстрационных версиях SVN Спенсером Кимбаллом, инженером Embarcadero, вероятно, можно с уверенностью сказать, что это новая функция, появившаяся в XE7.   -  person Remy Lebeau    schedule 15.08.2014


Ответы (1)


Вы должны обрабатывать указанный код Android и iOS в своем методе создания, например, для своих книг стилей:

{$IFDEF ANDROID}
stylebook := AndroidDarkStylebook;
{$ENDIF}
{$IFDEF IOS}
stylebook := iOSDarkStylebook;
{$ENDIF}
person Remi    schedule 03.03.2015