Delphi xe2 1
Ось сьогодні 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 пікселів, а після того як курсор прибраний висота кнопки з тієї ж затримкою повертається в первинне значення. І ніякого коду. У занедбаному додаток кнопка буде вести себе ось так:
По-перше, варто відзначити, що всі елементи управління в 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 тип анімації.
Анімацію для кольору я задав зациклену, тобто властивість Loop виставлено в значення True, а властивості Trigger і TriggerInverse залишив порожніми.
Крім анімацій Ви також можете застосовувати також для своїх елементів на формі різні ефекти типу розмиття, тіні і т.д. Наприклад, на малюнку нижче показаний елемент TCalloutRectangle з накладеним на нього ефектом тіні:
І навіть більше того - для ефектів Ви також можете створювати різні інформації =) Загалом можливостей створити гарний і інтерфейс програми - маса.
Ну і на завершення кілька слів про стилі. Як ви могли помітити, в наведених вище роликах форма додатка виглядає рівно так якою ми її бачили в VCL. У Delphi XE2 для додатків VCL Applications стали доступні стилі оформлення, які можна налаштувати, наприклад, вибравши в меню Project - Options - Application - Apperance. Вибір стилю виглядає так:
Щоб завантажити стиль за замовчуванням необхідно натиснути кнопку Load Default. Тепер найцікавіше. Кожен елемент в дереві стилю визначать стиль для будь-якої частини компонента. Наприклад, за стиль кнопки відповідає елемент buttonstyle за задній фон елемента - backgroundstyle і т.д.
4. Для кольору форми вибираємо в дереві backgroundstyle і в Object Inspector змінюємо колір, наприклад, на червоний.
5. Тиснемо кнопку Apply і дивимося на форму в дизайнера:
Щоб вказати якому-небудь елементу його унікальний стиль, йому необхідно вказати значення властивості StyleLookup. Наприклад, Ви можете застосувати той же стиль backgroundstyle для кнопки або взагалі створити свою унікальну кнопку використовуючи елементи з вкладок Shapes, Layouts, Animations і Effects палітри компонентів.
Резюмуючи все вищесказане, можна сказати, що FireMonkey - це досить зручний фрейморк для створення красивих, інформативних і зручних додатків - хочете створюйте елементи управління з анімацією, хочете - з еффети, що спрацьовують по якій-небудь події, повністю перемальовувати стиль оформлення компонентів і т. д. На ряду з цим FireMonkey досить простий у використанні - можна будувати красивий інтерфейс програми не написавши жодного рядка коду (хоча ніхто не забороняє вам, якщо необхідно - робити те ж саме в коді програми).
Не буду лукавити і скажу, що по ходу написання статті я також зіткнувся і з деякими проблемами в роботі. Наприклад, не завжди вдавалося з першого разу відкрити дизайнер стилю у TStyleBook. Дрібниця, але тим не менше є присутнім. Або у випадку з анімацією мені так і не вдалося повісити нормально на ефект TShadow анімацію TFloatAnimation - начебто і спрацьовує анімація, але тільки не за подією, а лише в зацикленості режимі. Були знайдені і інші проблеми про які розробники писали в своїх блогах і на форумах. Однак не варто забувати, що FireMonkey ще не виповнилося і 1 місяця і, якщо ця платформа приживеться (а я дуже на це сподіваюся), то в найближчому майбутньому ми побачимо оновлення і платформа стане ще потужнішим і зручніше у використанні.