FireMonkey
FireMonkey або FMX — це кросплатформена бібліотека візуальних компонентів і application framework для Delphi, C++Builder та RAD Studio. FireMonkey використовується для створення desktop, mobile і multi-device застосунків із графічним інтерфейсом, стилями, анімаціями, векторною графікою, 2D/3D-можливостями та єдиною кодовою базою для кількох платформ.
FireMonkey є альтернативою класичній VCL, але має іншу філософію. Якщо VCL орієнтована на Windows desktop, то FireMonkey створювався як кросплатформений framework для Windows, macOS, iOS, Android та інших підтримуваних платформ.
FireMonkey — це кросплатформений UI-фреймворк Delphi для створення застосунків з однієї кодової бази під кілька платформ.
Коротко
| Параметр | Значення |
|---|---|
| Назва | FireMonkey |
| Скорочення | FMX |
| Тип | Кросплатформена бібліотека візуальних компонентів і application framework |
| Екосистема | Delphi, C++Builder, RAD Studio |
| Основні мови | Object Pascal / Delphi, C++ |
| Основне призначення | Multi-device застосунки з графічним інтерфейсом |
| Платформи | Windows, macOS, iOS, Android; Linux через FMXLinux або відповідні можливості редакцій |
| Головні можливості | UI-компоненти, стилі, анімації, графіка, 2D/3D, multi-device layout |
| Класична альтернатива в Delphi | VCL |
| Open source-аналог за ідеєю | LCL у Lazarus |
| Офіційна документація | https://docwiki.embarcadero.com/RADStudio/ |
Головна ідея FireMonkey
Головна ідея FireMonkey — дозволити розробнику створювати застосунок один раз і адаптувати його для кількох платформ.
Типова схема:
створити multi-device application; додати FMX-компоненти; налаштувати layout; описати події; підключити бізнес-логіку; зібрати застосунок під потрібну платформу.
FireMonkey не просто копіює VCL. Він має власну систему rendering, стилів, анімацій і layout, тому підхід до створення інтерфейсу в FMX відрізняється від класичного Windows desktop-підходу.
VCL мислить переважно Windows-формами. FireMonkey мислить multi-device інтерфейсами.
Важливі акценти
| Статус | Теза | Пояснення |
|---|---|---|
| Ключове | FireMonkey створений для multi-platform | FMX дозволяє створювати застосунки для кількох платформ з однієї кодової бази. |
| Ключове | FireMonkey має власну систему стилів | UI можна оформлювати незалежно від стандартного вигляду ОС. |
| Ключове | FireMonkey підтримує графіку й анімації | FMX сильніший за VCL у візуальних ефектах, стилях і custom UI. |
| Ключове | FireMonkey підходить для desktop і mobile | Його можна використовувати для Windows, macOS, Android, iOS та інших підтримуваних платформ. |
| Важливо | FireMonkey не є VCL | Багато підходів схожі, але компоненти, rendering, layout і стилі працюють інакше. |
| Увага | Кросплатформеність потребує тестування | Один код не гарантує однакову поведінку UI на всіх платформах без перевірки й адаптації. |
Історія
FireMonkey зʼявився в екосистемі Embarcadero як відповідь на потребу створювати застосунки не тільки для Windows, а й для інших платформ.
Класичний Delphi багато років був дуже сильним у Windows desktop через VCL. Але з розвитком macOS, iOS, Android і cross-platform розробки виникла потреба в іншій UI-бібліотеці.
FireMonkey був створений як framework, який може:
- працювати на кількох платформах;
- мати власну систему rendering;
- підтримувати стилі;
- підтримувати анімації;
- підтримувати 2D і 3D;
- використовувати GPU;
- дозволяти створювати multi-device застосунки;
- бути частиною RAD Studio.
FireMonkey, FMX, VCL і Delphi
Ці поняття важливо розрізняти.
| Термін | Що означає |
|---|---|
| Delphi | IDE, компілятор, мова й платформа розробки від Embarcadero |
| RAD Studio | Середовище, яке включає Delphi та C++Builder |
| VCL | Класична бібліотека компонентів Delphi для Windows desktop |
| FireMonkey / FMX | Кросплатформена бібліотека компонентів для multi-device застосунків |
| LCL | Бібліотека компонентів Lazarus, схожа за ідеєю на VCL, але open source |
VCL — це класичний Windows desktop у Delphi. FireMonkey — це multi-device і cross-platform напрям Delphi.
Для чого використовується FireMonkey
| Напрям | Як використовується FireMonkey | Приклади |
|---|---|---|
| Windows desktop | Створення сучасних desktop-застосунків | Бізнес-програми, утиліти, dashboard |
| macOS desktop | Застосунки для macOS | Cross-platform desktop-клієнти |
| Android | Мобільні застосунки | Складські застосунки, мобільні кабінети, польові програми |
| iOS | Мобільні застосунки для iPhone/iPad | Бізнес-клієнти, мобільні форми |
| Linux | GUI-застосунки через FMXLinux або відповідні можливості | Корпоративні desktop-рішення |
| ERP/CRM клієнти | Desktop/mobile інтерфейси до бізнес-систем | Кабінети, робочі місця, mobile ERP |
| Візуальні застосунки | Графіка, анімації, стилізований UI | Презентаційні, технічні, touch UI |
| Інтеграції | Клієнтські застосунки до API | REST, JSON, backend-сервіси |
FireMonkey і RAD-підхід
FireMonkey підтримує RAD-підхід, як і VCL, але з акцентом на multi-device.
Розробник може:
- створити FMX-проєкт;
- візуально розмістити компоненти;
- налаштувати властивості;
- призначити події;
- використати styles;
- налаштувати layout для різних екранів;
- зібрати застосунок під потрібну платформу.
Приклад обробника кнопки:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Hello from FireMonkey!');
end;
Основні поняття FireMonkey
| Поняття | Пояснення |
|---|---|
| Form | Вікно або екран застосунку |
| Component | Візуальний або невізуальний компонент |
| Control | Елемент інтерфейсу |
| Style | Оформлення компонента |
| Layout | Розміщення елементів |
| Animation | Анімація властивостей |
| Effect | Графічний ефект |
| Scene | Візуальна сцена FMX |
| Multi-Device Preview | Перегляд інтерфейсу для різних пристроїв |
FMX Application
У Delphi FireMonkey-проєкт зазвичай створюється як:
File → New → Multi-Device Application
Або як FireMonkey Application, залежно від версії RAD Studio.
Після створення проєкту розробник отримує:
- головну форму;
- FMX unit;
- designer;
- палітру FMX-компонентів;
- можливість вибору target platform;
- налаштування deployment.
Приклад структури FireMonkey-проєкту
Project/ ├── Project.dpr ├── MainForm.pas ├── MainForm.fmx ├── Services/ │ └── CustomerService.pas ├── Models/ │ └── Customer.pas ├── Repositories/ │ └── CustomerRepository.pas ├── Resources/ │ ├── styles/ │ └── images/ └── README.md
У FMX форма часто має файл:
.fmx
Він містить опис візуальних компонентів FireMonkey.
Основні FMX-компоненти
| Компонент | Для чого |
|---|---|
| TForm | Форма або основне вікно |
| TButton | Кнопка |
| TLabel | Текстовий напис |
| TEdit | Поле введення |
| TMemo | Багаторядковий текст |
| TListBox | Список |
| TListView | Список для mobile і desktop UI |
| TGrid | Табличне відображення |
| TLayout | Контейнер для розміщення |
| TPanel | Панель |
| TTabControl | Вкладки |
| TToolBar | Панель інструментів |
| TImage | Зображення |
| TRectangle | Прямокутник для UI/графіки |
TLayout
TLayout — один із важливих контейнерів FMX.
Він використовується для:
- групування компонентів;
- побудови адаптивного інтерфейсу;
- розміщення блоків;
- створення reusable UI;
- контролю позицій;
- побудови mobile-friendly екранів.
Приклад ідеї:
MainLayout ├── HeaderLayout ├── ContentLayout └── FooterLayout
Align і Anchors у FireMonkey
FireMonkey має властивості для розміщення елементів.
Типові значення Align:
- None;
- Top;
- Bottom;
- Left;
- Right;
- Client;
- Center;
- Contents;
- Fit;
- FitLeft;
- FitRight;
- Scale.
Приклад у коді:
HeaderLayout.Align := TAlignLayout.Top; ContentLayout.Align := TAlignLayout.Client; FooterLayout.Align := TAlignLayout.Bottom;
Styles у FireMonkey
Одна з сильних сторін FMX — система стилів.
Style дозволяє змінювати вигляд компонентів без повного переписування логіки.
Стилі можуть впливати на:
- кольори;
- шрифти;
- фони;
- кнопки;
- поля введення;
- списки;
- стани компонентів;
- hover;
- pressed;
- focused;
- disabled.
У FireMonkey зовнішній вигляд компонента значною мірою визначається стилем, а не тільки стандартним виглядом операційної системи.
FMX Style Designer
FMX Style Designer — інструмент для створення й редагування стилів FireMonkey.
Він дозволяє:
- створювати теми;
- редагувати кольори;
- налаштовувати стани компонентів;
- працювати з typography;
- створювати корпоративний стиль;
- адаптувати UI під бренд;
- змінювати вигляд стандартних компонентів.
FireMonkey і графіка
FireMonkey має сильні графічні можливості.
Він підтримує:
- 2D-графіку;
- 3D-графіку;
- векторні елементи;
- прозорість;
- ефекти;
- трансформації;
- масштабування;
- анімації;
- GPU-accelerated rendering.
Типові графічні елементи:
- TRectangle;
- TCircle;
- TLine;
- TPath;
- TImage;
- TText;
- TCanvas.
TCanvas
TCanvas використовується для малювання.
Приклад ідеї:
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
begin
Canvas.BeginScene;
try
Canvas.DrawLine(PointF(10, 10), PointF(100, 100), 1);
finally
Canvas.EndScene;
end;
end;
FireMonkey і анімації
FireMonkey має вбудовану підтримку анімацій.
Приклади:
- зміна прозорості;
- переміщення;
- масштабування;
- обертання;
- зміна кольору;
- плавне відкриття панелі;
- анімація кнопки;
- mobile transitions.
Типові компоненти:
- TFloatAnimation;
- TColorAnimation;
- TPathAnimation;
- TBitmapAnimation.
Приклад ідеї:
FloatAnimation1.PropertyName := 'Opacity'; FloatAnimation1.StartValue := 0; FloatAnimation1.StopValue := 1; FloatAnimation1.Duration := 0.3; FloatAnimation1.Start;
FireMonkey і 3D
FireMonkey має 3D-можливості.
Можна працювати з:
- 3D-сценами;
- 3D-обʼєктами;
- камерами;
- світлом;
- матеріалами;
- трансформаціями;
- обертанням;
- позиціонуванням у просторі.
Проте для класичних бізнес-застосунків 3D використовується рідше. Частіше FMX застосовують для multi-device UI, стилів і mobile/desktop інтерфейсів.
FireMonkey і mobile
FireMonkey може використовуватись для Android та iOS застосунків.
Типові mobile-сценарії:
- мобільний кабінет клієнта;
- складський термінал;
- польовий застосунок;
- мобільний CRM-клієнт;
- інвентаризація;
- форма збору даних;
- мобільний dashboard;
- клієнт до ERP/API.
Для mobile важливо враховувати:
- різні розміри екранів;
- touch input;
- DPI;
- permissions;
- deployment;
- platform services;
- push notifications;
- offline mode;
- роботу з камерою;
- роботу з GPS.
FireMonkey і Android
Для Android-застосунків потрібно враховувати:
- Android SDK;
- JDK;
- target API;
- permissions;
- deployment на пристрій;
- підпис APK/AAB;
- Google Play вимоги;
- продуктивність UI;
- роботу з touch;
- lifecycle застосунку.
FireMonkey і iOS
Для iOS-застосунків потрібно враховувати:
- macOS build host;
- Xcode;
- provisioning profiles;
- certificates;
- App Store вимоги;
- deployment на пристрій;
- sandbox;
- permissions;
- lifecycle застосунку.
FireMonkey і macOS
FMX дозволяє створювати desktop-застосунки для macOS.
Потрібно враховувати:
- відмінності UI;
- меню;
- keyboard shortcuts;
- sandbox;
- code signing;
- notarization;
- packaging;
- шляхи до файлів;
- поведінку вікон;
- підтримку Retina/DPI.
FireMonkey і Windows
На Windows FMX можна використовувати для:
- сучасних desktop-застосунків;
- touch-friendly UI;
- stylized UI;
- dashboard;
- мультимедійних програм;
- застосунків із нестандартним дизайном;
- multi-device клієнтів.
Проте якщо потрібен класичний Windows desktop, стандартні Windows controls і максимальна сумісність зі старими Delphi desktop-проєктами, часто краще підходить VCL.
FireMonkey і Linux
FireMonkey може використовуватись для Linux GUI через FMXLinux або відповідні можливості редакцій Delphi/RAD Studio.
У Linux-сценаріях потрібно перевіряти:
- доступність FMXLinux;
- редакцію RAD Studio;
- deployment;
- графічне середовище;
- залежності;
- шрифти;
- DPI;
- роботу з файлами;
- поведінку UI;
- підтримку потрібних компонентів.
FireMonkey і бази даних
FireMonkey може працювати з базами даних через Delphi-бібліотеки доступу до даних.
Найчастіше використовують:
- FireDAC;
- REST API;
- JSON;
- DataSnap;
- RAD Server;
- SQLite для локальних даних;
- InterBase;
- Firebird;
- PostgreSQL;
- MySQL;
- Microsoft SQL Server;
- Oracle Database.
FireMonkey і FireDAC
FireDAC — основна сучасна бібліотека доступу до баз даних у Delphi.
Приклад запиту:
FDQuery1.SQL.Text := 'SELECT * FROM customers WHERE city = :city';
FDQuery1.ParamByName('city').AsString := 'Київ';
FDQuery1.Open;
У FMX застосунках FireDAC часто використовують для:
- локальної SQLite-бази;
- мобільного offline storage;
- підключення до backend;
- синхронізації;
- кешування даних;
- бізнес-довідників;
- мобільних ERP/CRM-клієнтів.
FireMonkey і REST API
FMX-застосунки часто працюють із REST API.
Типовий обмін:
FMX mobile/desktop app → REST API → Backend → Database
Приклад JSON:
{
"customerId": 123, "name": "Anna", "status": "active"}
Для реальних проєктів важливо:
- обробляти помилки мережі;
- враховувати offline mode;
- зберігати токени безпечно;
- оновлювати дані фоново;
- показувати loading states;
- синхронізувати конфлікти.
FireMonkey і offline mode
Для mobile і польових застосунків важливий offline mode.
Типова схема:
локальна база SQLite; користувач працює без інтернету; дані зберігаються локально; при появі мережі запускається синхронізація; сервер приймає зміни; конфлікти обробляються за правилами бізнесу.
Offline mode корисний для:
- складу;
- польових менеджерів;
- інвентаризації;
- сервісних інженерів;
- мобільних продажів;
- доставки;
- виробництва.
FireMonkey у ERP
FMX може використовуватись як desktop або mobile-клієнт до ERP.
Типові сценарії:
- мобільний склад;
- інвентаризація;
- перегляд залишків;
- мобільні замовлення;
- кабінет менеджера;
- dashboard керівника;
- approval workflow;
- мобільний CRM;
- робоче місце оператора з нестандартним UI.
| ERP-сценарій | Як може допомогти FMX |
|---|---|
| Склад | Mobile app для сканування й рухів товарів |
| Продажі | Замовлення з планшета або телефону |
| Керівник | Dashboard із показниками |
| CRM | Мобільна картка клієнта |
| Сервіс | Польові заявки й статуси |
| Документообіг | Погодження документів |
FireMonkey у CRM
FMX може бути корисним для CRM-клієнтів:
- мобільна картка клієнта;
- список контактів;
- задачі;
- історія взаємодії;
- угоди;
- нотатки;
- нагадування;
- фото або файли;
- інтеграція з API;
- offline-доступ.
FireMonkey і custom UI
FireMonkey добре підходить там, де потрібен не стандартний Windows UI, а власний стиль.
Приклади:
- branded application;
- dashboard;
- touchscreen UI;
- kiosk mode;
- mobile-first інтерфейс;
- візуальні панелі;
- мультимедійні застосунки;
- красиві презентаційні форми;
- адаптивні інтерфейси.
FireMonkey і VCL
FireMonkey часто порівнюють із VCL.
| VCL | FireMonkey |
|---|---|
| Орієнтована на Windows desktop | Орієнтована на multi-device і cross-platform |
| Використовує Windows controls і Windows API | Має власну систему rendering і стилів |
| Дуже сильна для класичних бізнес-систем Windows | Сильна для custom UI, mobile і multi-platform |
| Має величезну legacy-екосистему | Більш сучасна для нових multi-device інтерфейсів |
| Краще для класичних Windows ERP/CRM desktop | Краще для застосунків, які мають працювати на кількох платформах |
VCL і FireMonkey не замінюють одне одного повністю. Вони вирішують різні задачі.
FireMonkey і LCL
LCL у Lazarus і FireMonkey обидві можуть використовуватись для desktop GUI, але мають різну природу.
| LCL | FireMonkey |
|---|---|
| Open source бібліотека Lazarus | Комерційна Delphi/RAD Studio екосистема |
| Працює через widgetsets | Має власну систему rendering |
| Орієнтована на Free Pascal | Орієнтована на Delphi/C++Builder |
| Добра для open source cross-platform desktop | Добра для multi-device, mobile, styled UI |
FireMonkey і FMX-файли
Форми FireMonkey зберігають візуальний опис у файлах:
.fmx
Код форми зазвичай у:
.pas
Приклад:
MainForm.pas MainForm.fmx
Файл .fmx містить опис компонентів, їхніх властивостей, позицій, стилів і структури форми.
Події у FireMonkey
FireMonkey, як і VCL, використовує події.
Типові події:
- OnClick;
- OnCreate;
- OnDestroy;
- OnChange;
- OnTap;
- OnResize;
- OnKeyDown;
- OnMouseDown;
- OnGesture.
Приклад:
procedure TForm1.Edit1Change(Sender: TObject); begin Label1.Text := Edit1.Text; end;
У FMX для тексту часто використовується властивість:
Text
а у VCL для написів часто використовується:
Caption
Відмінності Caption і Text
У VCL багато компонентів мають Caption. У FireMonkey частіше використовується Text.
Приклад FMX:
Label1.Text := 'Готово'; Button1.Text := 'Зберегти';
Приклад VCL:
Label1.Caption := 'Готово'; Button1.Caption := 'Зберегти';
Platform Services
FireMonkey має механізми для роботи з platform services.
Це потрібно, коли застосунок має використовувати можливості конкретної платформи:
- clipboard;
- dialogs;
- notifications;
- sensors;
- camera;
- location;
- sharing;
- permissions;
- device information;
- application services.
FireMonkey і permissions
На mobile-платформах застосункам потрібні дозволи.
Приклади:
- camera;
- location;
- storage;
- microphone;
- notifications;
- network;
- Bluetooth.
Потрібно враховувати:
- Android permissions;
- iOS Info.plist;
- runtime permission request;
- поведінку при відмові користувача;
- пояснення, навіщо потрібен дозвіл.
FireMonkey і deployment
Deployment у FMX залежить від цільової платформи.
| Платформа | Що потрібно врахувати |
|---|---|
| Windows | EXE, DLL, ресурси, installer |
| macOS | app bundle, signing, notarization |
| Android | APK/AAB, SDK, permissions, signing |
| iOS | Xcode, certificates, provisioning profiles |
| Linux | FMXLinux, залежності, графічне середовище |
FireMonkey і продуктивність
На продуктивність FMX впливають:
- кількість компонентів;
- складність стилів;
- анімації;
- графічні ефекти;
- робота з великими списками;
- завантаження зображень;
- використання GPU;
- платформа;
- device performance;
- робота в UI-потоці.
Рекомендації:
- не перевантажувати форму компонентами;
- оптимізувати списки;
- використовувати lazy loading;
- обережно застосовувати ефекти;
- тестувати на реальних пристроях;
- не виконувати довгі операції в UI-потоці.
FireMonkey і потоки
Як і в інших UI-framework, оновлювати інтерфейс потрібно з головного потоку.
Приклад ідеї:
TThread.Queue(nil,
procedure
begin
Label1.Text := 'Готово';
end
);
Довгі операції бажано виконувати у фоновому потоці:
- завантаження даних;
- запити до API;
- обробка файлів;
- синхронізація;
- імпорт/експорт;
- розрахунки.
FireMonkey і LiveBindings
LiveBindings — механізм звʼязування даних із UI-компонентами.
Його можна використовувати для:
- binding полів dataset до компонентів;
- звʼязування обʼєктів із UI;
- швидкого прототипування;
- форм редагування;
- списків і таблиць.
LiveBindings зручні, але у великих проєктах потрібно уважно контролювати архітектуру, щоб не отримати приховану складність.
FireMonkey і Multi-Device Preview
Multi-Device Preview дозволяє перевіряти, як інтерфейс виглядатиме на різних пристроях.
Це корисно для:
- телефонів;
- планшетів;
- desktop;
- різних орієнтацій;
- різних розмірів екрана;
- перевірки layout;
- адаптації UI.
Хороша архітектура FMX-проєкту
У великих FMX-проєктах не варто писати всю логіку у формах.
Рекомендована структура:
Project/ ├── Forms/ │ ├── MainForm.pas │ └── LoginForm.pas ├── Frames/ │ ├── CustomerCardFrame.pas │ └── DashboardFrame.pas ├── Services/ │ ├── AuthService.pas │ └── SyncService.pas ├── Repositories/ │ ├── CustomerRepository.pas │ └── OrderRepository.pas ├── Models/ │ ├── Customer.pas │ └── Order.pas ├── Api/ │ └── ApiClient.pas ├── Storage/ │ └── LocalDatabase.pas ├── Resources/ │ ├── styles/ │ └── images/ └── Project.dpr
Рекомендовані шари
| Шар | Призначення |
|---|---|
| Forms | Екрани застосунку |
| Frames | Повторно використовувані UI-блоки |
| Services | Бізнес-логіка |
| Repositories | Доступ до даних |
| Api | REST/HTTP-клієнт |
| Storage | Локальне збереження |
| Models | Структури даних |
| Resources | Стилі, зображення, іконки |
Frames у FireMonkey
Frame — це reusable UI-блок.
Frames корисні для:
- карток;
- повторюваних блоків;
- частин екрана;
- custom controls;
- форм редагування;
- dashboard widgets;
- mobile UI-компонентів.
Приклад ідеї:
CustomerCardFrame ├── LabelName ├── LabelEmail └── ButtonOpen
FireMonkey і тестування
FMX-застосунки потрібно тестувати на всіх цільових платформах.
Перевіряти потрібно:
- layout;
- DPI;
- шрифти;
- touch;
- keyboard;
- permissions;
- offline mode;
- performance;
- memory usage;
- API errors;
- lifecycle;
- orientation change;
- deployment.
Особливо важливо тестувати mobile-застосунки на реальних пристроях, а не тільки в designer preview.
FireMonkey і безпека
У FMX-застосунках важливо враховувати:
- безпечне збереження токенів;
- HTTPS;
- перевірку сертифікатів;
- захист локальної бази;
- шифрування конфігурації;
- обмеження доступу до файлів;
- безпечну авторизацію;
- logout;
- permission handling;
- обробку помилок API;
- захист персональних даних.
Для mobile особливо важливо не зберігати секрети відкритим текстом.
FireMonkey і сторонні компоненти
Для FMX існують сторонні компоненти.
Типові категорії:
- UI controls;
- grids;
- charts;
- maps;
- reports;
- REST helpers;
- mobile components;
- camera helpers;
- barcode scanning;
- PDF;
- styling;
- controls for dashboards.
Постачальники можуть включати:
- TMS Software;
- DevExpress;
- FastReport;
- Embarcadero GetIt packages;
- інші сторонні бібліотеки.
Перед використанням потрібно перевіряти підтримку потрібних платформ.
Переваги FireMonkey
| Перевага | Пояснення |
|---|---|
| Кросплатформеність | Можна створювати застосунки для кількох платформ |
| Єдина кодова база | Частину логіки й UI можна використовувати повторно |
| Mobile і desktop | Підходить не тільки для Windows desktop |
| Стилі | Можна створювати власний вигляд інтерфейсу |
| Анімації | Є вбудовані механізми анімації |
| Графіка | Підтримка 2D/3D, Canvas, effects |
| Інтеграція з Delphi | Використовує знайому Delphi/Object Pascal екосистему |
| Підходить для custom UI | Добре для нестандартних, branded і touch-friendly інтерфейсів |
Недоліки FireMonkey
| Недолік | Пояснення |
|---|---|
| Складніше за VCL для класичного Windows desktop | Якщо потрібен стандартний Windows UI, VCL часто простіша |
| Потрібне тестування на кожній платформі | Один код не гарантує ідеальну поведінку всюди |
| Відмінності platform services | Android, iOS, macOS і Windows мають різні правила |
| Можливі нюанси продуктивності | Складні стилі, ефекти й списки можуть потребувати оптимізації |
| Менша legacy-екосистема, ніж у VCL | Багато старих Delphi-компонентів були створені саме для VCL |
| Deployment складніший | Mobile і macOS потребують SDK, сертифікатів, підписів і platform setup |
| Linux залежить від додаткових можливостей | Для Linux GUI потрібно перевіряти FMXLinux, редакцію й підтримку |
Типові помилки новачків у FireMonkey
| Помилка | Чому це проблема |
|---|---|
| Думати, що FMX — це просто VCL для кількох платформ | У FMX інша модель rendering, стилів і layout |
| Не тестувати на реальних пристроях | Designer preview не замінює реальне mobile/desktop тестування |
| Писати всю логіку у формах | Проєкт стає важким для підтримки |
| Ігнорувати DPI і різні екрани | UI може погано виглядати на частині пристроїв |
| Перевантажувати форми компонентами | Можливі проблеми продуктивності |
| Не враховувати permissions | Mobile-функції можуть не працювати без правильних дозволів |
| Зберігати секрети відкритим текстом | Це небезпечно для mobile і desktop застосунків |
Коли FireMonkey — хороший вибір
| Задача | Чи підходить FireMonkey? |
|---|---|
| Cross-platform desktop | Добре |
| Android/iOS бізнес-застосунок | Добре |
| Mobile ERP/CRM клієнт | Добре |
| Custom UI з анімаціями | Добре |
| Touch-friendly desktop | Добре |
| Класичний Windows desktop ERP | Можливо, але VCL часто простіша |
| Підтримка старого VCL-проєкту | Краще VCL |
| Web frontend | Не основний вибір |
| AI/Data Science | Не основний вибір |
FireMonkey у порівнянні з іншими технологіями
| Технологія | Порівняння з FireMonkey |
|---|---|
| VCL | VCL краща для класичного Windows desktop, FMX — для multi-device і custom UI |
| LCL | LCL open source і cross-platform desktop, FMX — частина Delphi/RAD Studio |
| Flutter | Flutter популярний для mobile/cross-platform, FMX зручний для Delphi-екосистеми |
| React Native | React Native використовує JavaScript/TypeScript, FMX — Delphi/Object Pascal |
| Qt | Qt сильний у C++ cross-platform, FMX — у Delphi multi-device |
| Electron | Electron використовує web-технології, FMX створює нативні desktop/mobile застосунки |
Рекомендований шлях навчання FireMonkey
| Етап | Що вивчати |
|---|---|
| 1 | Основи Object Pascal / Delphi |
| 2 | Створення Multi-Device Application |
| 3 | TForm, TButton, TLabel, TEdit |
| 4 | Події OnClick, OnCreate, OnChange |
| 5 | Layout: TLayout, Align, Margins, Padding |
| 6 | Styles і FMX Style Designer |
| 7 | Lists: TListBox, TListView |
| 8 | Робота з images і resources |
| 9 | Анімації |
| 10 | REST API і JSON |
| 11 | SQLite / FireDAC для offline storage |
| 12 | Android/iOS permissions |
| 13 | Deployment під цільові платформи |
| 14 | Тестування на реальних пристроях |
Мінімальний набір для першого FMX-проєкту
| Компонент | Рекомендація |
|---|---|
| IDE | Delphi / RAD Studio |
| Тип проєкту | Multi-Device Application / FireMonkey Application |
| Перші компоненти | TButton, TEdit, TLabel, TLayout |
| Для layout | TLayout, Align, Margins, Padding |
| Для API | REST Client або HTTP client |
| Для локальних даних | SQLite + FireDAC |
| Для стилів | FMX Style Designer |
| Контроль версій | Git |
Приклад простої FMX-форми
Ідея:
Форма містить: - EditName - ButtonHello - LabelResult Користувач вводить імʼя. Натискає кнопку. Label показує привітання.
Код:
procedure TMainForm.ButtonHelloClick(Sender: TObject); begin
LabelResult.Text := 'Привіт, ' + EditName.Text;end;
Приклад сервісу для FMX-проєкту
unit GreetingService;
interface
type
TGreetingService = class
public
function BuildGreeting(const Name: string): string;
end;
implementation
function TGreetingService.BuildGreeting(const Name: string): string;
begin
Result := 'Привіт, ' + Name;
end;
end.
Використання у формі:
procedure TMainForm.ButtonHelloClick(Sender: TObject); var
Service: TGreetingService;begin
Service := TGreetingService.Create; try LabelResult.Text := Service.BuildGreeting(EditName.Text); finally Service.Free; end;end;
Простими словами
FireMonkey — це спосіб писати Delphi-застосунки не тільки для Windows.
Якщо VCL — це класична Windows-майстерня Delphi, то FireMonkey — це multi-device майстерня для Windows, macOS, Android, iOS і сучасних візуальних інтерфейсів.
Висновок
FireMonkey — важлива частина сучасної Delphi/RAD Studio екосистеми.
FMX сильний там, де потрібні:
- кросплатформені застосунки;
- desktop і mobile з однієї кодової бази;
- custom UI;
- стилі;
- анімації;
- touch-friendly інтерфейси;
- мобільні ERP/CRM-клієнти;
- offline-first бізнес-застосунки;
- інтеграція з REST API;
- застосунки для кількох платформ.
FireMonkey не замінює VCL у всіх випадках. Для класичного Windows desktop часто простіше й практичніше використовувати VCL. Але якщо потрібні mobile, macOS, Android, iOS, custom UI або multi-device підхід — FireMonkey є головним шляхом у Delphi-екосистемі.
FireMonkey — це Delphi для світу, де застосунок має жити не на одному Windows-компʼютері, а на різних пристроях і платформах.
Джерела
- Embarcadero FireMonkey Framework: https://www.embarcadero.com/products/rad-studio/fm-application-platform
- Embarcadero DocWiki — FireMonkey: https://docwiki.embarcadero.com/RADStudio/Athens/en/FireMonkey_Application_Platform
- Embarcadero DocWiki — FireMonkey Overview: https://docwiki.embarcadero.com/RADStudio/Sydney/en/FireMonkey
- FMX API Documentation: https://docwiki.embarcadero.com/Libraries/Athens/en/FMX
- FMX Style Designer: https://docwiki.embarcadero.com/RADStudio/Florence/en/FMX_Style_Designer
- FireMonkey for Linux: https://docwiki.embarcadero.com/RADStudio/Sydney/en/FireMonkey_for_Linux
- Embarcadero Delphi: https://www.embarcadero.com/products/delphi
- RAD Studio: https://www.embarcadero.com/products/rad-studio