уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Как я говорил в прошлый раз, в Delphi XE7 появился новый тип проектов под названием Multi-Device Application. Как по мне, так это очень хорошая идея — создаем один проект и потом, переключаясь между различными режимами просмотра настраиваем интерфейс приложения под различные платформы. Код один — интерфейсов пользователя несколько. И всё в одном проекте.

Итак, приступим.

Запускаем Delphi XE7, создаем новый проект Multi-Device Application и в качестве шаблона выбираем «Blank Application». Сейчас в дизайнере отображается пустая форма, без заголовков и вообще без каких-либо опознавательных знаков. При этом, в верхней части окна дизайнера определен стиль (Style) Windows, а режим просмотра (View) — Master:

multiПереключаясь между различными стилями и режимами просмотра  мы можем видеть как будет выглядеть наша форма на различных устройствах. Например, на Android:

multi2

Правда при этом, как справедливо заметил Андрей в своем блоге, размеры форм стали, мягко говоря, не совсем понятными. Но, если это глюк, то его исправят в ближайшем обновлении, а мы пока перейдем к дальнейшему изучению дизайнера.

Первое, на что стоит обратить внимание: добавлять компоненты на форму мы можем в любом режиме просмотре будь то Master или любой Android или IOS-шаблон, но удалять — только в режиме Master. При попытке удалить компонент в режиме просмотра отличном от Master Delphi выдаст ошибку:

Selection contains a component, XXXXX, introduced in an ancestor and cannot be deleted.

Следующий момент — это работа со свойствами компонентов.  Перейдем в режим Master, бросим на форму компонент TLabel и зададим ему свойство Text как «Master Label». Должно получиться как-то так:

multi3

Теперь меняем режим просмотра на любой другой и видим, что метка содержит один и тот же текст везде:

multi4Теперь выберем режим просмотра (View) Android 4» Phone и изменим текст метки, например, на «Android Label»:

multi5Теперь в этом режиме просмотра метка будет иметь один текст (Android Label), а во всех остальных — другой (Master Label). Таким образом, используя различные режимы просмотра мы можем настраивать свойства компонентов под каждый вид приложения. То есть:

Если мы хотим изменить свойство компонента так, чтобы оно изменилось во всех режимах просмотра, то его (свойство) необходимо изменять в режиме просмотра Master. Если мы хотим изменить свойство компонента так, чтобы изменения коснулись определенного режима, то необходимо переключиться на требуемый режим и изменить значение свойства.

Такая работа со свойствами компонентов, по-моему, вполне логична и понятна. Единственное, что несколько непонятно (может я просто не до конца разобрался) — почему нельзя добавить на форму компонент так, чтобы он был доступен только в определенном режиме просмотра? Например, в версии для Windows я хочу использовать компонент TTreeView, а в мобильной версии — TListView и как мне в мобильной версии избавиться от TTreeView? По-моему только с помощью TreeView.Viasible=False.  Если не прав — поправьте, пожалуйста.

Следующий момент, касающийся Multi-Device Application — каждый раз после того, как мы выбираем новый режим просмотра, Delphi XE7 создает для этого режима отдельный pas-файл. К примеру, я выбираю режим «Android 7» Tablet». В результате получаем новую форму TForm1_LgXhdpiTb и, соответственно новый файл Unit1.LgXhdpiTb.pas. В проект новые формы включаются как ресурсы:

implementation
 
{$R *.fmx}
{$R *.LgXhdpiTb.fmx ANDROID}

При этом, само собой, весь исходный код находится в одном файле — Unit1.pas. Соответственно, чтобы удалить лишнюю форму, достаточно выбрать необходимый режим просмотра и зажать кнопку «Remove View»:

multi6Ресурс с указанной формой будет удален, однако файл *.fmx останется в директории с проектом и удалять его придётся вручную.

После того, как приложение написано, достаточно выбрать в Project Manager необходимую платформу и Delphi XE7 соберет проект.

Что можно сказать в целом про новый вид проекта в XE7? По-моему очень классная и удобная штука получается. Теперь не надо создавать несколько отдельных проектов, можно «на лету» просматривать как будет выглядеть наше приложение при работе на различных платформах и т.д. И, надо сказать, что изучение работы с Multi-Device Application, а также изучение ранее добавленных новинок в Delphi XE6 сподвигло меня восстановить работу над небольшим рабочим проектом, который был «заморожен» по причине того, что мне не хватало на тот момент возможностей FMX. Теперь, похоже, возможностей должно хватить полностью. Так что, в ближайшее время я продолжу разговор про новинки Delphi XE6-XE7 и приведу ещё один или несколько примеров по их использованию.

Книжная полка

Описание Подробно рассматривается библиотека FM, позволяющая создавать полнофункциональное программное обеспечение для операционных систем Windows и OS X, а также для смартфонов и планшетных компьютеров, работающих под управлением Android и iOS
купить книгу delphi на ЛитРес
Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
купить книгу delphi на ЛитРес

 

0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
13 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
ter
ter
08/09/2014 14:57

куда то у тебя кнопки +1 пропали к статьям.

Kitty
Kitty
09/09/2014 00:43

Большое спасибо!

SLAto
11/09/2014 00:26

здравствуйте, читал про rest client library, попытался реализовать, список файлов грузит, файлы на google drive грузит, но вот название файла прицепить к запросу не получается, как это сделать?

RESTClient.BaseURL := ‘https://www.googleapis.com/upload/drive/v2’;
RESTRequest.Resource := ‘/files?uploadType=multipart’;
memstream := TMemoryStream.Create;
memstream.LoadFromFile(’11.docx’);
RESTRequest.AddBody(memstream,contenttypefromstring(‘application/vnd.openxmlformats-officedocument.wordprocessingml.document’));

RESTRequest.Execute;

файл загружается на диск гугла, но в параметре title всегда untitled

SLAto
14/09/2014 21:19
Ответить на  Vlad

Спасибо за ответ, двумя запросами получилось нормально загрузить файл. А что насчет multipart загрузки?

SLAto
14/09/2014 21:20
Ответить на  SLAto

не получается правильно создать тело запроса, и правильно ли я отправляю заголовки? var FTitle,FMimeType : TJsonObject; memstream,dump : TMemoryStream; bound,s,ss:ansistring; begin restclient.Accept:=’application/json, text/plain; q=0.9, text/html;q=0.8,’; restclient.AcceptCharset:= ‘UTF-8, *;q=0.8′; restclient.ContentType:=’multipart/related’; RESTRequest.Method := TRESTRequestMethod.rmPuT; RESTClient.BaseURL := ‘https://www.googleapis.com/upload/drive/v2’; RESTRequest.Resource := ‘/files?uploadType=multipart’; bound:=’foo_bar_baz’; restrequest.Params.AddItem; restrequest.Params.Items[0].Kind:=pkHTTPHEADER; restrequest.Params.Items[0].name:=’ContentType’; restrequest.Params.Items[0].Value:=’multipart/related; boundary=»‘+bound+'»‘; restrequest.Params.AddItem; restrequest.Params.Items[1].Kind:=pkHTTPHEADER; restrequest.Params.Items[1].name:=’Content-Transfer-Encoding’; restrequest.Params.Items[1].Value:=’base64′; s := ‘—‘+bound+sLineBreak; s := s + ‘Content-Type: application/json; charset=UTF-8’ + sLineBreak + sLineBreak; s := s + ‘{«title»:»app.doc»}’ + sLineBreak + sLineBreak +’—‘+bound; s := s + sLineBreak + sLineBreak; ss:=sLineBreak + sLineBreak + ‘—‘ + bound+ ‘—‘; memstream := TMemoryStream.Create; dump := TMemoryStream.Create; dump.Write(PAnsiChar(s)^, Length(s)); memstream.LoadFromFile(’11.doc’); dump.CopyFrom(memstream,memstream.Size); dump.Write(PAnsiChar(ss)^, Length(ss)); restrequest.AddBody(dump,ctmultipart_related);… Подробнее »

Дмитрий
Дмитрий
15/09/2014 14:42

Влад, как всегда спасибо за статью.
Подскажите пожалуйста, это у меня глючит IDE или у баг? в XE6, в опциях проекта, отсутствует выбор ориентации девайса.. Ранее было не критично и да же, по этому внимания не обращал, но проблема появилась. Решил проверить, в xe-7 , всё на месте. Я про Project-Options-Application и там в дереве должен висеть айтем выбора ориентации… Это глюк моей среды xe6? Скажите пожалуйста у кого установлена.

Дмитрий
Дмитрий
15/09/2014 14:49

В догоночку, проверил на триал -версиях Devart UNIDac — замечательно присоединился к удаленным базам PostgreeSQl и MySQL через Android , очень быстро и без танцев с бубном. … FireDAC — не успев родиться, умер в моих глазах….
Хотя, если кто скажет, как через FireDAC создать приложение для андроид и подсоединиться к упомянутым БД — заберу слова обратно.
p.s. Всякие обходные замороченные темы , типа DataSnap прошу не предлагать.

Дмитрий
Дмитрий
16/09/2014 10:37
Ответить на  Vlad

Еще разок спасибо Влад. Значит надо постепенно на xe7 переходить, хотя в xe5 был выбор ориентации принудительной, а мне очень стало это важно.
Delphi — в своем репертуаре, со времен первых версий — удачные только нечетные версии :) (d3 — d5 — d7 и т.д….)

Дмитрий
Дмитрий
16/09/2014 10:42
Ответить на  Vlad

И ладно — бы Влад, что удобнее Dervart , обидно то, что уже добившись от FireDAC соединения (пусть и более заморочено), в конечном итоге оказалось, что на андроид это не сработает :(

Максим
Максим
03/12/2014 03:01

Спасибо за статью, а то уроки нашел начальные, но они по 6й версии, а там кое-что отличается… надеюсь на продолжение. Вот тут Дмитрий пишет про подключение к БД, вот статья для чайников была бы вообще полезной.