Сегодня страничка «Видео» блога 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
Но это только на первый взгляд. В действительности же все намного сложнее, если копать глубже. Например, если посмотреть модуль в котором содержится класс TButton для VCL-приложения, то мы увидим Vcl.StdCtrls (или просто StdCtrls для Delphi XE и ниже), а описание того же TButton для FireMonkey содержится уже в FMX.Controls. И всё, что роднит две казалось бы одинаковые кнопки — это только родительский класс TComponent — дальше всё другое. И эти отличия Вы почувствуете сразу же как только бросите кнопку на форму и посмотрите в Object Inspector.
3. Выбираем в списке первый тип анимации — «Create New TFloatAnimation» и задаем в Object Inspector следующие значения свойств анимации:- Duration = 0,5
- Enabled = True
- Inverse = True
- StartValue = 22
- StopValue = 50
- Trigger = IsMouseOver=true
- TriggerInverse = IsMouseOver=false
[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 — событие после которого анимация пройдет в обратном направлении.
И даже более того — для эффектов Вы также можете создавать различные информации =) В общем возможностей создать красивый и интерфейс приложения — масса.
Так вот, FireMonkey дает намного больше возможностей по изменению стиля приложения, чем при использовании обычной VCL. В силу того, что каждый элемент в FireMonkey — это контейнер, мы в силах самостоятельно изменить стиль отрисовки любой части элемента — бордюра, заднего фона, выбрать толщину рамки и т.д. Всё это можно сделать, используя, опять же визуальный редактор. Для примера изменим задний фон для формы. Наши действия будут следующими:
Чтобы загрузить стиль по умолчанию необходимо нажать кнопку Load Default. Теперь самое интересное. Каждый элемент в дереве стиля определят стиль для какой-либо части компонента. Например, за стиль кнопки отвечает элемент buttonstyle за задний фон элемента — backgroundstyle и т.д.
Чтобы указать какому-либо элементу его уникальный стиль, ему необходимо указать значение свойства StyleLookup. К примеру, Вы можете применить тот же стиль backgroundstyle для кнопки или вообще создать свою уникальную кнопку используя элементы с вкладок Shapes, Layouts, Animations и Effects палитры компонентов.Книжная полка
![]() |
Описание Подробно рассматривается библиотека FM, позволяющая создавать полнофункциональное программное обеспечение для операционных систем Windows и OS X, а также для смартфонов и планшетных компьютеров, работающих под управлением Android и iOS
|
![]() |
![]() |
Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
|
![]() |
![]() |
Название: О чем не пишут в книгах по Delphi
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
|
![]() |
![]() |
Описание: Книга рассчитана на подготовленного пользователя ПК, желающего самостоятельно научиться программировать и разрабатывать приложения и базы данных в среде Delphi. Опытные программисты смогут использовать издание как справочник. В тексте подробно описаны более 80 компонентов VCL, функции Object Pascal и Win32 API.
|
![]() |
![]() |
Описание: Описаны общие подходы к программированию приложений MS Office. Даны программные методы реализации функций MS Excel, MS Word, MS Access и MS Outlook в среде Delphi.
|
![]() |








А как сделать так, чтобы кнопка увеличивалась не вниз, а равномерно по всем направлениям (без смещения центра)?
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 точно есть!