уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности
тут.
Сегодня страничка «Видео» блога 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 месяца и, если эта платформа приживется (а я очень на это надеюсь), то в ближайшем будущем мы увидим обновления и платформа станет ещё мощнее и удобнее в использовании.
Книжная полка
0
0
голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности
тут.
А как сделать так, чтобы кнопка увеличивалась не вниз, а равномерно по всем направлениям (без смещения центра)?
Kirill, интересный вопрос =) Учитывая то, что с FireMonkey я познакомился только вчера, могу предположить, что здесь надо будет использовать: анимацию для изменения линейных размеров (ширины и высоты) и одновременно использовать анимацию на положение кнопки на форме, но вот как это будет выглядеть на деле….надо попробовать сделать.
Интересно вот — разработчики рассчитывают и дальше вести ВЦЛ и ФМ или должен остаться только один?
kylt, я думаю, что будет и VCL и FireMonkey
Вожно заанимировать свойство 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. Запускаем. При наведении на… Подробнее »
Что касается приоритетов, то VCL останется, но основное направление разработки — абизянка, ибо VCL не кроссплатформ.
Спасибо за статью. Возможностей масса, причем для бизнес-приложений тоже.
ps: представляете, сколько появится «гламурных» интерфейсов, написанных без какого-либо представления о правилах проектирования взаимодействия?))
Ничего особо нового для тех кто знаком с KSDev, но удобство работы на много выше. Что же касается VCL, то его поддержку они не прекратят, ведь во-первых — это совместимость с предыдущими версиями, а во-вторых, для разработчиков под винду фаерманки уж больно увеличивает размер приложения и минимизирует использование возможностей ОС.
А как изменить в приложении стиль приложения программно? (использую VCL) Заранее спасибо)
Так пробовали?
TStyleManager.TrySetStyle('Ruby Graphite');
Сам с VCL-стилями не разбирался, но вроде, то что написано выше должно помочь
А как у FM грида изменить размер шрифта?
Я люблю Delphi но давно перешел на Qt там тоже легко создавать эффекты так при этом как хочешь, можешь кодом, можешь визуально и при этом этот код работает на любой платформе и библиотека графики построена на языке QML (JavaScript) и поддержка Qt а не давно и для Androida вышла поддержка.
При этом они объединились с майкрософт так что ждет ноу хау.
suanto, Я с Qt никогда не работал, поэтому не могу сказать нравится мне Qt или нет, но некоторое время имел дело с WPF и это, конечно, сугубо моё ИМХО, но после WPF FireMonkey мне показался проще в освоении…гораздо проще. Может Qt ещё проще и круче показался бы, но мне менять язык программирования не зачем, так как в случае чего этот вопрос остается пока всегда за мной и ответ один — Delphi =)
Влад, так что, не вкурсе как изменить размер шрифта у грида?
Антон, сорри, но пока не в курсе )
Влад, спасибо) А случаем незнаеш, можно ли свои стили под VCL создавать? А то как создавать стили под FireMonkey нашел, а как под VCL нет.
Кстати TStyleManager.SetStyle(‘Ruby Graphite’); тоже работает =)
Delphi как всегда круче всех!
S9, так под VCL редактор есть в «Tools — VCL Style Designer» — вот с помощью этой тулзы и можно создать свой скин
Спасибо огромное Влад!! А то я начал пытаться через Alpha Control стили создавать) Не зря мне всегда говорили, что я невнимательный)
S9, да не за что =) Пользуйся на здоровье
Как мне кажется, ОгненнаяОбезьянка ещё пока сильно сыровата. Во-первых, не хватает кучи компонент. Например, PageControl — аналога не нашёл.
И простая форма (одна), на которой лежит с десяток компонент, кушает 30-40 мегабайт оперативной памяти. Страшно подумать, что будет с серьёзным проектом, где внутри — сотни контролов.
А где TActionList, TImageList ???
Что писать вместо Application.MessageBox ?
Где в Сети искать ответы на подобные вопросы? И это только за 20 минут пробы Delphi XE2…
Что использовать вместо TRegistry при компиляции под iOS?
Как жить то дальше без всего этого!? :)
sz, VCL никто не отменял. Ну, а под iOS — надо выкручиваться)
писАть VCL Applications можно и под другими версиями Delphi. А тут попробовал набросать простенькую утилиту «для себя», под Windows, но с использованием проекта FireMonkey и заткнулся вроде как на пустом месте — отсутствие TActionList и TimageList. Со времен Delphi 3 уже как-то и забыл как без них жилось-то :)
sz, вот поэтому FireMonkey сейчас и может оказаться для разработчиков компонентов «золотым дном». В FMX много чего ещё не хватает, но думаю, что со временем ситуация поправиться. Всё-таки FMX в Delphi появился официально не так давно.
Если у меня на компе семёрка Windows, могу я писат приложения для ios?
Алексей, ответил на письмо.
Если в клиент-серверной (или DataSnap например) модели в качестве клиента испольовать FireMonkey, а в качестве сервера стандартый VCL возникнут ли проблемы и можно ли вообще?
13, никогда не пробовал так делать, поэтому точно сказать не могу. То что одновременно в одном проекте нельзя использовать VCL и FMX-контролы — это написано и в оффициальной документации, а вот клиент и сервер…не знаю.
[…] знакомиться с новыми возможностями в Delphi XE2. С FireMonkey немного познакомились — в дальнейшем, думаю, мы ещё вернемся к этому вопросу. […]
как сделать что бы при наведение на кнопку цвет изменялся?
Руслан, цвет чего: кнопки, текста на кнопке? Самый общий вариант — получить через TFMXObject той части компонента чей цвет надо изменить и работать с этим объектом. Чтобы понять какой именно элемент вам нужен — киньте на форму TStyleBook, откройте его редактор, найдите там описание своей кнопки и посмотрите свойства какого компонента вам надо изменять. Я в последнее время вообще обхожусь без компоентов типа Tbutton — все делаю на примитивах типа TShapes, TImage и т.д. и надо сказать так даже иногда оказывается намного удобнее и проще.
Привет.
Создал пустой проект, кинул кнопку, сделал TFloatAnimation… В итоге получилась лажа… При наведении на кнопку форма заливается то черным, то цветом фона — мерцает. Тут видео — http://youtu.be/V3ntYwL6PKM
WD, FloatAnimation должен лежать на КНОПКЕ, а не на форме. в FMX каждый объект — контейнер для других объектов
Vlad, оно так делает, даже если никакой анимации не лежит ни на форме, ни на кнопке.
Просто — чистый проект, копка, Run — вот такая лажа =) как на видео
WD, хм..прикольно =) Если серьезно, то возможно надо дрова на видюху свежие поставить — всё-таки FireMonkey активно её использует. Мне переустановка дров в свое время помогла, но только у меня ничего не мерцало, а просто проект «тупил» и медленно прорисовывались контролы
вот неудача какая-то… это ладно у меня, у девелопера на машине, еще куда не шло… а как же потом этот софт людям-то отдавать? )) по типу «вы еще дрова обновите, а то у нас тут FireMonkey» =)
Такой вопрос: а как дела с базами данных у FM? я хотел бы узнать если вариант создавать Базу в Access и потом подключаться через ADO ? или реализовать пример из книги Флёнова в Firemonkey?
Виталик, с БД в FireMonkey все не так просто как в VCL — во-первых, работа завязана на LiveBindings (не поймем как с LB работать — придётся работать с данными в «ручном режиме», т.е. ручками вытягивать каждую запись, выводить куда-то и т.д. и т.п.), во-вторых, пока сам до конца не разобрался как выводить в TGrid данные где некоторые поля представляют из себя списки подстановок и т.д. В принципе, простенькие программки для работы с БД написать можно, но, повторюсь, все не так просто как может показаться на первый взгляд. Что касается Access, ADO и т.д., то, думаю, что можно реализовать без проблем,… Подробнее »
Оу спсаибо Влад :D Надеюсь Embarcadero всё таки сделают поддержку ADO в ближайшем тысячелетии. Хочется что то новенького в работе с БД =)
Есть такой косяк в Firemonkey.
Попробуйте добавить в ЛистБокс или Комбобокс или в подобный компонент сожедержащий список. И начинаются тормоза.
Еще почему то программа занимает огромное количество оперативки 3 формы без особых наворотов без 3D. занимает 250-300 метров оперативки.
Кстати исли в ОнГреат формы закинуть цикл на добовление 3000 строк в комбобокс то программа запустится а появление формы я так и не дождался.
Проверял на XE2 update4.
Ищу причину всего этого,так как хотелось сделать красивое приложение в офис, но скаждым разом думаю что Firemonkey еще кривой и сырой, на рынок его выкинули и доделать забыли!
Здоровенько Влад! Интересно. Я ещё даже не видал всё это дело. Буду по твоим статьям вдуплять, что там да как, а то долго я оффлайнил, больше года. Забыл наверное уже всё нафик… Ну отстал точно… Наверстывать буду. По теме: Штука конечно интересная, красивая, рюшечки-юбочки и всё такое, но блин, прочитав коммент Denjf, я мягко говоря очумел от прожорливости этой рюшечной обези. :( Не у всех же 8-коре феном икс 8 с 8гб рамы (да чё там рама, если тут 3 формы, тестовое приложение такое проглотское, то что будет в серьёзном, законченном продухте?) Если три формы — 250, то 9 форм… Подробнее »
В офисы эта падлюка никогда не проберется, ну по крайней мере ближайшие года, и по крайней мере в России. У нас средний офисный комп — Целерон Дэ с 2 гигами рам и интегренной видяхой. А у них там и так всякие 1С, Гаранты прожорливые и прочие клиент банки… Нее, можете со мной спорить, но макака эта в разработку бизнес-приложений не ходок!
>> Что касается Access, ADO и т.д., то, думаю, что можно реализовать без проблем, но только программка будет работать исключительно под Win, а FireMonkey — это все-таки кросплатформенная штука.
Вроде где-то видел ADO драйвер для Linux… или что-то потую, но по крайней мере ODBC точно есть!