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

Сегодня страничка «Видео» блога webdelphi.ru пополнилась ещё двумя роликами, которые касаются работы с FireMonkey в Delphi XE2. В принципе, после просмотра этих роликов я и решил познакомиться с FireMonkey, оценить возможности применения этой платформы в каких-то своих приложениях и т.д.

И первое, что вспомнилось буквально после 10-15 минут работы над FireMonkey HD Application — это WPF (Windows Presentation Foundation). Некоторое время назад (примерно с полгода назад) я представлял Вам «Доклад с «вражеской» территории» в котором делал некоторые свои выводы по части C#. Так вот, прежде чем писать тот пост я первым делом написал маленькое простенькое приложение в двух вариантах в одном из которых познакомился чуть-чуть с WPF. Вот сегодня WPF мне и вспомнился при работе c FireMonkey. И пусть меня простят сторонники WPF, но FireMonkey лично для меня показалась более простой и удобной использовании. Есть, конечно, и проблемы, но о проблемах мы ещё поговорить успеем, а пока просто познакомимся с тем, какие возможности открываются перед нами при использовании FireMonkey. 

В принципе о том, что FireMonkey — это потомок библиотеки VGScene от KSDev, думаю, многие уже знают. Если нет, то можете почитать сообщение на сайте KSDev где сообщается о том, что интеллектуальная собственность KSDev приобретена Embarcadero. Что тут можно сказать? Наверное то, что я искренне рад тому, что разработки нашего соотечественника нашли такое мощное применение в Embarcadero и были воплощены в виде FireMonkey.

Что касается Delphi XE2, то теперь помимо простых приложений VCL Application нам стали доступны следующие виды приложений:

  • FireMonkey HD Application — 2D-приложение
  • FireMonkey 3D Application  — приложение с 3D-графикой
  • FireMonkey HD iOS Application — 2D-приложение приложение для iOS
  • FireMonkey 3D iOS Application — 3D-приложение приложение для iOS
Следуя простому правилу «Не знаешь как работать с 2D-графикой — не суйся в 3D» я решил вначале посмотреть, что представляет из себя HD Application. А раз у меня нет iPad’а (я на него только коплю =)), то приложение будем создавать для Windows.
Итак, запускаем Delphi XE2, создаем новый проект: «File -> New -> FireMonkey HD Application«. Всё, что можно заметить сразу после создания нового проекта — это немного изменившийся вид главного окна в дизайнере и, на первый взгляд, чуть-чуть другой состав палитры компонентов. То есть при создании VCL Application IDE выглядит так:
А при создании FireMonkey HD Application — вот так:
Но это только на первый взгляд. В действительности же все намного сложнее, если копать глубже. Например, если посмотреть модуль в котором содержится класс TButton для VCL-приложения, то мы увидим Vcl.StdCtrls (или просто StdCtrls для Delphi XE и ниже), а описание того же TButton для FireMonkey содержится уже в FMX.Controls. И всё, что роднит две казалось бы одинаковые кнопки — это только родительский класс TComponent — дальше всё другое. И эти отличия Вы почувствуете сразу же как только бросите кнопку на форму и посмотрите в Object Inspector.
FireMonkey по сравнению со старой доброй VCL дает нам на порядок больше возможностей для разработки красивых интерфейсов, создания анимации и т.д.
Вот, к примеру, возьмем туже кнопку TButton и прикинем сколько нам надо написать кода, чтобы при наведении курсора мыши на кнопку она меняла свою высоту, а после того как курсор будет убран высота бы возвращалась к своему первоначальному значению и при этом анимация была бы плавной, с небольшой задержкой? Задача, на самом деле простенькая, но как говориться,  «время — деньги» и хотелось бы сделать такую анимацию максимально быстро. С FireMonkey для решения этой задачи Вам даже не придется писать для этого какой-либо код — всё можно сделать, используя Object Inspector. Смотрите.
1 . Бросаем на форму кнопку TButton.
2. Переходим в Object Inspector и находим свойство Height. Можете заметить, что по-мимо того, что рядом с этим свойством появился новый значок, показывающий, что для свойства можно определить какой-либо эффект, также в Object Inspector’e появился и список выбора в котором можно выбрать вид анимации:
3. Выбираем в списке первый тип анимации — «Create New TFloatAnimation» и задаем в Object Inspector следующие значения свойств анимации:
  • Duration = 0,5
  • Enabled = True
  • Inverse = True
  • StartValue = 22
  • StopValue = 50
  • Trigger = IsMouseOver=true
  • TriggerInverse = IsMouseOver=false
4. Жмем F9 и любуемся только что созданной анимацией. При наведении курсора мыши на кнопку высота кнопки плавно изменяется пока не достигнет значения 50 пикселей, а после того как курсор убран высота кнопки с той же задержкой возвращается в первоначальное значение. И никакого кода. В запущенном приложение кнопка будет вести себя вот так:

[youtube_sc url=http://www.youtube.com/watch?v=A74FiF97B-U width=400 rel=0 fs=1]

На создание такой анимации у меня ушло чуть больше времени, чем длится выше представленный видео-ролик. Теперь разберемся, что мы сделали.

Во-первых, стоит отметить, что все элементы управления в FireMonkey (FMX) — это контейнеры, т.е. в любой компонент FMX можно встроить другой. И эту особенность FireMonkey Вы могли легко заметить, когда создавали свою «живую» кнопку:

Здесь мы создали для TButton новый дочерний компонент — анимацию. Никто вам не запретит, если захотите, взять и встроить в кнопку TButton вторую надпись в виде TLabel или хоть TPaenel. Такая вот интересная особенность.

Во-вторых, что касается свойств анимации. Для анимации TFloatAnimation можно использовать следующие свойства:

  • AnimationType — определяет тип воспроизведения анимации.
  • AutoReverse — определяет будет ли анимация воспроизводится автоматически в обратную сторону, когда значение свойства достигнет своего конечного значения (StopValue)
  • Delay — задержка в секундах после которой начнется воспроизведение анимации
  • Duration — продолжительность анимации в секундах.
  • Interpolation — тип интерполяции, используемой для расчёта промежуточных значений свойства. Для простых анимаций достаточно линейной интерполяции (itLinear)
  • Inverse — определяет будет ли анимация воспроизводиться в обратном направлении
  • Loop — определяет будет ли анимация зациклена.
  • PropertyName — имя свойства для которого применяется анимация
  • StartFromCurrent — определяет будет ли анимация воспроизводиться с текущего значения свойства или от заданного в StartValue
  • StartValue и StopValue — начальное и конечное значение свойства.
  • Trigger — событие после которого запустится процесс анимации
  • TriggerInverse — событие после которого анимация пройдет в обратном направлении.
TFloatAnimation — это самый широко используемый в FireMonkey тип анимации. Достаточно посмотреть на другие свойства элементов управления, поддающиеся анимации, чтобы убедиться в этом. Однако этот тип анимации не единственный. На вкладке Animations палитры компонентов Вы можете найти ещё несколько типов анимации для Ваших приложений. Например, можно сделать плавное изменение цвета какого-либо элемента на форме, используя TColorAnimation. Ниже представлен небольшой видео-ролик, демонстрирующий применение TColorAnimation для компонента TCalloutRectangle:
[youtube_sc url=http://www.youtube.com/watch?v=Ri8O_Usq1uE width=400 rel=0 fs=1]
Анимацию для цвета я задал зацикленную, т.е. свойство Loop выставлено в значение True, а свойства Trigger и TriggerInverse оставил пустыми.
Кроме анимаций Вы также можете применять также для своих элементов на форме различные эффекты типа размытия, тени и т.д. Например, на рисунке ниже показан элемент TCalloutRectangle с наложенным на него эффектом тени:
И даже более того — для эффектов Вы также можете создавать различные информации =) В общем возможностей создать красивый и интерфейс приложения — масса.
Ну и в заключении пара слов про стили. Как вы могли заметить, в представленных выше роликах форма приложения выглядит ровно так какой мы её видели в VCL. В Delphi XE2 для приложений VCL Applications стали доступны стили оформления, которые можно настроить, например, выбрав в меню Project — Options — Application — Apperance. Выбор стиля выглядит так:
Так вот, FireMonkey дает намного больше возможностей по изменению стиля приложения, чем при использовании обычной VCL. В силу того, что каждый элемент в FireMonkey — это контейнер, мы в силах самостоятельно изменить стиль отрисовки любой части элемента — бордюра, заднего фона, выбрать толщину рамки и т.д. Всё это можно сделать, используя, опять же визуальный редактор. Для примера изменим задний фон для формы.  Наши действия будут следующими:
1. Кидаем на форму компонент TStyleBook
2. В свойства формы StyleBook указываем StyleBook1.
3. Дважды кликаем по компоненты в результате чего откроется окно дизайнера:
Чтобы загрузить стиль по умолчанию необходимо нажать кнопку Load Default. Теперь самое интересное. Каждый элемент в дереве стиля определят стиль для какой-либо части компонента. Например, за стиль кнопки отвечает элемент buttonstyle за задний фон элемента — backgroundstyle и т.д.
4. Для цвета формы выбираем в дереве backgroundstyle и в Object Inspector изменяем цвет, например, на красный.
5. Жмем кнопку Apply и смотрим на форму в дизайнере:
    Чтобы указать какому-либо элементу его уникальный стиль, ему необходимо указать значение свойства StyleLookup. К примеру, Вы можете применить тот же стиль backgroundstyle  для кнопки или вообще создать свою уникальную кнопку используя элементы с вкладок Shapes, Layouts, Animations и Effects палитры компонентов.
    Резюмируя все вышесказанное, можно сказать, что FireMonkey — это достаточно удобный фреймворк для создания красивых, информативных и удобных приложений — хотите создавайте элементы управления с анимацией, хотите — с эффектами, которые срабатывают по какому-либо событию, полностью перерисовывайте стиль оформления компонентов и т.д. На ряду с этим FireMonkey достаточно прост в использовании — можно строить красивый интерфейс приложения не написав ни одной строчки кода (хотя никто не запрещает вам, если необходимо — делать тоже самое в коде приложения).
    Не буду лукавить и скажу, что по ходу написания статьи я также столкнулся и с некоторыми проблемами в работе. Например, не всегда удавалось с первого раза открыть дизайнер стиля у TStyleBook. Мелочь, но тем не менее присутствует. Или в случае с анимацией мне так и не удалось повесить нормально на эффект TShadow анимацию TFloatAnimation — вроде бы и срабатывает анимация, но только не по событию, а только в зацикленном режиме. Были найдены и другие проблемы о которых разработчики писали в своих блогах и на форумах. Однако не стоит забывать, что FireMonkey ещё не исполнилось и 1 месяца и, если эта платформа приживется (а я очень на это надеюсь), то в ближайшем будущем мы увидим обновления и платформа станет ещё мощнее и удобнее в использовании.

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

Описание Подробно рассматривается библиотека FM, позволяющая создавать полнофункциональное программное обеспечение для операционных систем Windows и OS X, а также для смартфонов и планшетных компьютеров, работающих под управлением Android и iOS
купить книгу delphi на ЛитРес
Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
купить книгу delphi на ЛитРес
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
купить книгу delphi на ЛитРес
Описание: Книга рассчитана на подготовленного пользователя ПК, желающего самостоятельно научиться программировать и разрабатывать приложения и базы данных в среде Delphi. Опытные программисты смогут использовать издание как справочник. В тексте подробно описаны более 80 компонентов VCL, функции Object Pascal и Win32 API.
купить книгу delphi на ЛитРес
Автор: Юрий Магда
Описание: Описаны общие подходы к программированию приложений MS Office. Даны программные методы реализации функций MS Excel, MS Word, MS Access и MS Outlook в среде Delphi.
купить книгу delphi на ЛитРес
0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
43 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Kirill
Kirill
22/09/2011 05:36

А как сделать так, чтобы кнопка увеличивалась не вниз, а равномерно по всем направлениям (без смещения центра)?

kylt
kylt
22/09/2011 12:47

Интересно вот — разработчики рассчитывают и дальше вести ВЦЛ и ФМ или должен остаться только один?

Snowy
22/09/2011 13:03

Вожно заанимировать свойство Scale — масштаб всего контрола. Но более эффектно выглядит анимация в 3D. Для этого нужно положить на форму TViewport3D. На него положить TLayer3D, задать ему Projection = pjScreen и выставить размеры, как у кнопки. На этой лэйер бросаем кнопку и делаем ей Align = clClient. Итак, мы получили слой с кнопкой. Теперь заанимируем его. Для этого воспользуемся событиями кнопки OnMouseEnter и OnMouseLeave. Пропишем на каждое событие сообветственно Layer3D1.AnimateFloat(‘Position.Z’, 0, 0.5); и Layer3D1.AnimateFloat(‘Position.Z’, 100, 0.5); Теперь у слоя выставим Position.Z, как во втором событии = 100, дабы изначально она была удалена вглубь оси Z. Запускаем. При наведении на… Подробнее »

Snowy
22/09/2011 13:04

Что касается приоритетов, то VCL останется, но основное направление разработки — абизянка, ибо VCL не кроссплатформ.

Михаил
Михаил
22/09/2011 15:19

Спасибо за статью. Возможностей масса, причем для бизнес-приложений тоже.

ps: представляете, сколько появится «гламурных» интерфейсов, написанных без какого-либо представления о правилах проектирования взаимодействия?))

xpert13
25/09/2011 03:58

Ничего особо нового для тех кто знаком с KSDev, но удобство работы на много выше. Что же касается VCL, то его поддержку они не прекратят, ведь во-первых — это совместимость с предыдущими версиями, а во-вторых, для разработчиков под винду фаерманки уж больно увеличивает размер приложения и минимизирует использование возможностей ОС.

S9
S9
30/09/2011 00:52

А как изменить в приложении стиль приложения программно? (использую VCL) Заранее спасибо)

Антон
Антон
30/09/2011 21:23

А как у FM грида изменить размер шрифта?

suanto
suanto
01/10/2011 04:36

Я люблю Delphi но давно перешел на Qt там тоже легко создавать эффекты так при этом как хочешь, можешь кодом, можешь визуально и при этом этот код работает на любой платформе и библиотека графики построена на языке QML (JavaScript) и поддержка Qt а не давно и для Androida вышла поддержка.
При этом они объединились с майкрософт так что ждет ноу хау.

Антон
Антон
01/10/2011 12:04

Влад, так что, не вкурсе как изменить размер шрифта у грида?
 

S9
S9
01/10/2011 19:25

Влад, спасибо) А случаем незнаеш, можно ли свои стили под VCL создавать? А то как создавать стили под FireMonkey нашел, а как под VCL нет.
Кстати TStyleManager.SetStyle(‘Ruby Graphite’); тоже работает =)

Delphi как всегда круче всех!

S9
S9
04/10/2011 23:24

Спасибо огромное Влад!! А то я начал пытаться через Alpha Control стили создавать) Не зря мне всегда говорили, что я невнимательный)

Hobit
27/10/2011 17:18

Как мне кажется, ОгненнаяОбезьянка ещё пока сильно сыровата. Во-первых, не хватает кучи компонент. Например, PageControl — аналога не нашёл.
И простая форма (одна), на которой лежит с десяток компонент, кушает 30-40 мегабайт оперативной памяти. Страшно подумать, что будет с серьёзным проектом, где внутри — сотни контролов.

sz
sz
03/11/2011 14:54

А где TActionList, TImageList ???
Что писать вместо Application.MessageBox ?
Где в Сети искать ответы на подобные вопросы? И это только за 20 минут пробы Delphi XE2…
Что использовать вместо TRegistry при компиляции под iOS?
Как жить то дальше без всего этого!? :)

sz
sz
03/11/2011 19:13

писАть VCL Applications можно и под другими версиями Delphi. А тут попробовал набросать простенькую утилиту «для себя», под Windows, но с использованием проекта FireMonkey и заткнулся вроде как на пустом месте — отсутствие TActionList и TimageList. Со времен Delphi 3 уже как-то и забыл как без них жилось-то :)

Алексей
Алексей
10/11/2011 22:46

Если у меня на компе семёрка Windows, могу я писат приложения для ios?

13
13
18/11/2011 20:21

Если в клиент-серверной (или DataSnap например) модели в качестве клиента испольовать FireMonkey, а в качестве сервера стандартый VCL возникнут ли проблемы и можно ли вообще?

trackback

[…] знакомиться с новыми возможностями в Delphi XE2. С FireMonkey немного познакомились — в дальнейшем, думаю, мы ещё вернемся к этому вопросу. […]

Руслан
Руслан
23/02/2012 14:14

как сделать что бы при наведение на кнопку цвет изменялся?

WD
WD
26/02/2012 09:37

Привет.
Создал пустой проект, кинул кнопку, сделал TFloatAnimation… В итоге получилась лажа… При наведении на кнопку форма заливается то черным, то цветом фона — мерцает. Тут видео — http://youtu.be/V3ntYwL6PKM
 

WD
WD
04/03/2012 17:24

Vlad, оно так делает, даже если никакой анимации не лежит ни на форме, ни на кнопке.
Просто — чистый проект, копка, Run — вот такая лажа =) как на видео 

WD
WD
04/03/2012 20:58

вот неудача какая-то… это ладно у меня, у девелопера на машине, еще куда не шло… а как же потом этот софт людям-то отдавать? )) по типу «вы еще дрова обновите, а то у нас тут FireMonkey» =)

Виталик
Виталик
28/05/2012 20:59

Такой вопрос: а как дела с базами данных у FM? я хотел бы узнать если вариант создавать Базу в Access и потом подключаться через ADO ? или реализовать пример из книги Флёнова в Firemonkey?

Виталик
Виталик
29/05/2012 15:29

Оу спсаибо Влад :D Надеюсь Embarcadero всё таки сделают поддержку ADO в ближайшем тысячелетии. Хочется что то новенького в работе с БД =)

Denjf
Denjf
31/08/2012 11:37

Есть такой косяк в Firemonkey.
Попробуйте добавить в ЛистБокс или Комбобокс или в подобный компонент сожедержащий список. И начинаются тормоза.
Еще почему то программа занимает огромное количество оперативки 3 формы без особых наворотов без 3D. занимает 250-300 метров оперативки.
Кстати исли в ОнГреат формы закинуть цикл на добовление 3000 строк в комбобокс то программа запустится а появление формы я так и не дождался.
Проверял на XE2 update4.
Ищу причину всего этого,так как хотелось сделать красивое приложение в офис, но скаждым разом думаю что Firemonkey еще кривой и сырой, на рынок его выкинули и доделать забыли!

Егор
18/09/2012 21:16

Здоровенько Влад! Интересно. Я ещё даже не видал всё это дело. Буду по твоим статьям вдуплять, что там да как, а то долго я оффлайнил, больше года. Забыл наверное уже всё нафик… Ну отстал точно… Наверстывать буду. По теме: Штука конечно интересная, красивая, рюшечки-юбочки и всё такое, но блин, прочитав коммент Denjf, я мягко говоря очумел от прожорливости этой рюшечной обези. :( Не у всех же 8-коре феном икс 8 с 8гб рамы (да чё там рама, если тут 3 формы, тестовое приложение такое проглотское, то что будет в серьёзном, законченном продухте?) Если три формы — 250, то 9 форм… Подробнее »

Егор
18/09/2012 21:20

В офисы эта падлюка никогда не проберется, ну по крайней мере ближайшие года, и по крайней мере в России. У нас средний офисный комп — Целерон Дэ с 2 гигами рам и интегренной видяхой. А у них там и так всякие 1С, Гаранты прожорливые и прочие клиент банки… Нее, можете со мной спорить, но макака эта в разработку бизнес-приложений не ходок!

Егор
18/09/2012 22:19

>> Что касается Access, ADO и т.д., то, думаю, что можно реализовать без проблем, но только программка будет работать исключительно под Win, а FireMonkey — это все-таки кросплатформенная штука.

Вроде где-то видел ADO драйвер для Linux… или что-то потую, но по крайней мере ODBC точно есть!