VCL
Button := TButton.Create(Self);
LCL у Lazarus схожа за ідеєю на VCL, але це інша бібліотека.; Зазвичай є собою два повʼязані файли:
FDQuery1.ParamByName('city').AsString := 'Київ';
VCL і WebView
VCL і Windows API
TForm1 = class(TForm)
VCL надає можливість обробляти Windows-повідомлення.;== Головна ідея VCL ==
LabelResult.Caption := 'Привіт, ' + EditName.Text;
- використовувати фільтри;
- пагінацію;
- пошук;
- обмеження вибірки;
- індекси;
- background loading.; Можна створити сервіс.;
TMemo — багаторядкове поле введення.; У невеликих VCL-проєктах логіку часто пишуть прямо у формах.; VCL побудована поверх Windows API.; begin
implementation Його використовують для: PanelTop.Align := alTop; - EditName |- |Логіка у формах |Бізнес-правила змішані з UI |- |Великі форми |Один form unit має змогу містити тисячі рядків коду |- |Старі компоненти |Частина бібліотек має змогу не підтримуватися |- |Залежність від Windows API |Ускладнює міграцію |- |Старі бази даних |Можуть використовуватись застарілі драйвери або схеми |- |Відсутність тестів |Будь-яка зміна ризикована |- |Немає документації |Систему важко підтримувати новим розробникам |}
Service.Free;
FireDAC і VCL
Object Inspector — інструмент Delphi IDE для конфігурація компонентів.; !Що автоматизує
Коли VCL — хороший вибір
function BuildGreeting(const Name: string): string;
| складський облік | Залишки, рух товарів, партії, інвентаризація |
| продажі та реалізація | Замовлення, рахунки, накладні, акти |
| закупівельна діяльність | Постачальники, надходження, заявки |
| фінансовий блок | Оплати, каса, банк, взаєморозрахунки |
| CRM | Клієнти, контакти, історичний розвиток взаємодії |
| Виробництво | Специфікації, операції, плани |
| електронний документообіг | Договори, акти, внутрішні документи |
VCL у порівнянні з іншими UI-технологіями
!Задача
Button.Caption := 'OK';
- картка клієнта;
- список клієнтів;
- історичний розвиток контактів;
- угоди;
- задачі;
- дзвінки;
- документи;
- комерційні пропозиції;
- календар;
- звіти.; │ └── InvoiceRepository.pas
├── DataModules/
Типові події: );
Приклад сервісу для VCL-проєкту
- швидка розробка програмного забезпечення форм;
- зручна робота з таблицями;
- data-aware компоненти;
- нативний Windows UI;
- хороша робота з базами даних;
- просте розгортання в локальній мережі;
- стабільність;
- можливість інтеграції з обладнанням;
- довгий життєвий цикл застосунків.; Delphi запропонував інший підхід:
VCL і API
begin
- UI controls;
- grids;
- planners;
- charts;
- cloud integrations;
- web integrations;
- maps;
- reporting helpers.; FDQueryCustomers.Close;
|- |Standard |TButton, TLabel, TEdit, TMemo |Базові елементи інтерфейсу |- |Additional |TImage, TShape, TBevel |Додаткові елементи |- |Win32 / Common Controls |TTreeView, TListView, TProgressBar |Windows common controls |- |Dialogs |TOpenDialog, TSaveDialog, TColorDialog |Стандартні діалоги |- |Menus |TMainMenu, TPopupMenu |Меню застосунку |- |Data Access |TDataSource, queries, connections |Робота з даними |- |Data Controls |TDBGrid, TDBEdit, TDBNavigator |Візуальна робота з базами |- |System |TTimer, TActionList, TImageList |Невізуальні системні компоненти |}
→ Query / Dataset Memo1.Lines.Add('Новий рядок'); end; → Connection
try
| Візуальні | Видимі на формі під час виконання | TButton, TEdit, TLabel, TPanel |
| Невізуальні | Не показуються користувачу, але виконують логіку | TTimer, TDataSource, TOpenDialog, TActionList |
begin
!Поняття Типові ERP-модулі на VCL:
VCL і багатопоточність
- Name;
- Caption;
- Text;
- Width;
- Height;
- Left;
- Top;
- Align;
- Anchors;
- Font;
- Color;
- Enabled;
- Visible;
- TabOrder.; !Технологія
База даних
│ └── MainDataModule.pas
- фіскальні реєстратори;
- касові апарати;
- сканери штрихкодів;
- принтери етикеток;
- ваги;
- POS-термінали;
- COM-порти;
- USB-пристрої;
- DLL-драйвери;
- промислові контролери.; Рекомендована структура:
LabelResult.Caption := Service.BuildGreeting(EditName.Text); Типові задачі: begin '''TButton''' — стандартна кнопка.; Для звітів можуть використовуватись: Приклади властивостей: │ └── CustomerForm.pas !Поняття * міграції старого коду; * роботі з файлами; * роботі з базами даних; * інтеграції з API; * кирилиці; * імпорті/експорті; * старих компонентів.; "amount": 1500.00, |- |застосовується в Delphi |застосовується в Lazarus |- |Орієнтована на Windows |Орієнтована на cross-platform desktop |- |Комерційна Delphi/RAD Studio програмний пакет |Open source Free Pascal/Lazarus програмний пакет |- |Має багату історію сторонніх компонентів |Має відкриту екосистему, але меншу кількість компонентів |} Причини: !Призначення Приклад:<pre> * виносити бізнес-логіку у сервіси; * відокремлювати SQL у repositories; * не писати складну логіку в OnClick; * використовувати інтерфейси; * покривати сервіси unit-тестами; * мінімізувати залежність логіки від TForm.; |- |1 |Основи Object Pascal |- |2 |Delphi IDE і створення VCL Application |- |3 |TForm, властивості, події |- |4 |TButton, TEdit, TLabel, TMemo |- |5 |Layout: Align, Anchors, Panels |- |6 |Меню, діалоги, ActionList |- |7 |DataModule |- |8 |FireDAC і підключення до бази |- |9 |DataSource, DBGrid, DBEdit |- |10 |Звіти й друк |- |11 |технічна архітектура Forms/Services/Repositories |- |12 |Потоки й актуалізація UI |- |13 |DPI, Unicode, VCL Styles |- |14 |Модернізація legacy VCL-коду |} begin VCL підходить для desktop CRM-систем.; type * права доступу; * захист паролів; * шифрування конфігурацій; * безпечні SQL-запити; * журналювання дій; * резервні копії; * контроль ролей; * безпечну роботу з файлами; * перевірку даних користувача.;<blockquote>'''У старих VCL-системах найбільша цінність часто не у формах, а в бізнес-логіці, яка роками накопичувалась у коді.'''</blockquote>
VCL-застосунки часто використовувалися для інтеграції з обладнанням.; |}
Button.Top := 20;
Недоліки VCL
SaveDocument;
- візуальний дизайнер форм;
- компоненти;
- Object Inspector;
- події;
- швидку компіляцію;
- нативні Windows-застосунки;
- просту роботу з базами даних;
- зрозумілий Object Pascal.;
VCL перетворює складну Windows GUI-розробку на роботу з компонентами, властивостями й подіями.
Використання у формі:
Приклад доступу до handle:<pre> FDQuery1.ParamByName('name').AsString := EditName.Text; Приклад ідеї DFM:<pre>
Button1.Enabled := True;
FDQueryCustomers.SQL.Text := 'SELECT * FROM customers ORDER BY name';Головна ідея VCL — дозволити розробнику оперативно створювати Windows-застосунки з готових компонентів.; Memo1.Align := alClient; Властивості визначають стан і вигляд компонента.; ├── Repositories/ Тестування VCL-застосунків має змогу бути складнішим, якщо вся логіка знаходиться у формах.; Service: TGreetingService; {| class="wikitable" {| class="wikitable"
- Text;
- MaxLength;
- PasswordChar;
- ReadOnly;
- CharCase.;== VCL і Unicode ==
Форма має змогу містити:
Приклад ідеї:<pre>
- grids;
- reports;
- charts;
- ribbons;
- docking;
- editors;
- schedulers;
- PDF;
- Excel;
- printing;
- UI themes;
- database tools.;== Object Inspector ==
interface == Джерела == Через Object Inspector можна: !Пояснення VCL — це набір готових деталей для створення Windows-програм у Delphi.; ShowMessage('Введено: ' + Edit1.Text); Форма містить: Краще: |- |'''.pas''' |Код форми |- |'''.dfm''' |характеристика компонентів форми |} == DFM-файл == Можливі сценарії: └── Project.dpr Project/ {| class="wikitable" == Компоненти VCL == == VCL і актуалізація застосунків == VCL є собою класичним прикладом RAD-підходу.; {| class="wikitable"
procedure WMSize(var Message: TWMSize); message WM_SIZE;
end Приклад:<pre>
"status": "paid"
підключити події; begin користувач системи вводить імʼя.; Він має змогу включати: {| class="wikitable"
ShowMessage('Hello from VCL!');
│ └── Invoice.pas
!VCL
Service := TGreetingService.Create;
FastReport часто застосовується у Delphi/VCL для звітів.; Типова схема:<pre>
end;
== VCL і друк ==
Типові властивості:
Щоб спростити тестування, бажано:
TForm
!Коли спрацьовує
!Параметр
Візуальні та невізуальні компоненти
procedure TMainDataModule.OpenCustomers;
- нативні Windows desktop-застосунки;
- швидка розробка програмного забезпечення форм;
- бізнес-програми;
- ERP і CRM;
- робота з базами даних;
- таблиці й довідники;
- документи й звіти;
- інтеграційні функціональні можливості з обладнанням;
- супровід legacy Delphi-систем.;== Messages у VCL ==
begin
Приклад простої VCL-форми
!Пояснення !Для чого Приклади: |- |Object Pascal |Мова програмування, якою пишеться Delphi-код |- |Delphi |IDE, компілятор, платформа й програмний пакет |- |VCL |Бібліотека компонентів для Windows desktop |- |RAD Studio |Середовище Embarcadero, яке охоплює Delphi та C++Builder |- |C++Builder |Інструмент RAD Studio для C++-розробки, який додатково має змогу використовувати VCL |}
Важливі акценти
Старі Delphi/VCL-проєкти могли використовувати ANSI-рядки.; end.;
== TActionList ==
Кращий підхід:
!Пояснення Навколо VCL існує велика програмний пакет сторонніх компонентів.; |- | style="background:#fff3cd; color:#856404; font-weight:bold;" |істотно |'''VCL не є собою cross-platform бібліотекою''' |Для кросплатформеності в Delphi застосовують, коли потрібно FireMonkey / FMX.; Типові задачі:
Left = 20type
end{| class="wikitable" FDQueryCustomers Підходи: VCL-застосунки часто комфортно розгортати у Windows-середовищі.; procedure TForm1.FormCreate(Sender: TObject);
Button: TButton;|- |'''Form''' |Вікно застосунку |- |'''Component''' |Візуальний або невізуальний елемент |- |'''Control''' |Візуальний компонент, який має інтерфейс |- |'''Property''' |Властивість компонента |- |'''Event''' |Подія, як ілюстрація OnClick або OnCreate |- |'''Method''' |Метод класу або компонента |- |'''Owner''' |Обʼєкт, який володіє компонентом |- |'''Parent''' |Візуальний контейнер компонента |- |'''Message''' |Windows-повідомлення, яке має змогу обробляти компонент |}
Вона сильна там, де потрібні: Типові напрямки:
├── Reports/
- кнопки;
- поля введення;
- таблиці;
- меню;
- панелі;
- вкладки;
- діалоги;
- компоненти доступу до даних;
- невізуальні компоненти.; !Підхід
- FastReport;
- QuickReport;
- ReportBuilder;
- DevExpress VCL Reports;
- власна генерація HTML/PDF/Excel;
- друк через Canvas.;== VCL і legacy ==
Label1.Caption := 'Готово';
Типовий підхід:<pre> function TGreetingService.BuildGreeting(const Name: string): string; !Що вивчати
UI VCL потрібно оновлювати з головного потоку.
!характеристика → DataSource Приклади категорій:
TGreetingService = class
VCL дуже часто зустрічається в legacy-системах.; {| class="wikitable" !Група застосовується для:
Натискає кнопку.; Приклад SQL-запиту:
== Модернізація VCL-проєктів ==
VCL дуже часто використовувалася для ERP-систем.;== TButton ==
!Термін
!Що означає
* групування елементів;
* створення layout;
* панелей інструментів;
* зон форми;
* відокремлення блоків інтерфейсу.; begin
!Помилка
Події — основа VCL-програмування.; '''VCL Styles''' дозволяють змінювати зовнішній вигляд VCL-застосунку.; end
|-
|Windows desktop-застосунок
| style="background:#d4edda; color:#155724; font-weight:bold;" |Дуже добре
|-
|ERP desktop
| style="background:#d4edda; color:#155724; font-weight:bold;" |Дуже добре
|-
|CRM desktop
| style="background:#d4edda; color:#155724; font-weight:bold;" |Добре
|-
|Облікова програма з базою даних
| style="background:#d4edda; color:#155724; font-weight:bold;" |Дуже добре
|-
|супровід старого Delphi-проєкту
| style="background:#d4edda; color:#155724; font-weight:bold;" |Найкращий практичний вибір
|-
|інтеграційні функціональні можливості з Windows API або обладнанням
| style="background:#d4edda; color:#155724; font-weight:bold;" |Добре
|-
|Cross-platform desktop
| style="background:#fff3cd; color:#856404; font-weight:bold;" |Краще розглянути FMX або LCL
|-
|Web frontend
| style="background:#f8d7da; color:#721c24; font-weight:bold;" |Не підходить
|-
|Mobile app
| style="background:#f8d7da; color:#721c24; font-weight:bold;" |Не підходить
|}
begin
!Компонент
begin
- ButtonHello
|-
|'''FireMonkey / FMX'''
|FMX кросплатформений, VCL сильніший для класичного Windows desktop
|-
|'''LCL'''
|LCL open source і cross-platform, VCL комерційна Delphi Windows-бібліотека
|-
|'''WinForms'''
|Обидві технології орієнтовані на Windows desktop, але WinForms належить .NET
|-
|'''WPF'''
|WPF сучасніший у .NET UI, VCL сильна в Delphi legacy/business desktop
|-
|'''Qt'''
|Qt кросплатформений C++ framework, VCL простіша для Delphi Windows desktop
|-
|'''Electron'''
|Electron використовує web-технології, VCL створює нативні Windows-застосунки
|}
== Основні поняття VCL ==
Button := TButton.Create(Self);
{| class="wikitable"
У VCL форма складається не тільки з Pascal-коду, а й з опису інтерфейсу.; Button.Parent := Self;
finally
TThread.Queue(nil,
TMS Software пропонує багато компонентів для Delphi, включно з VCL.; Типові компоненти:
{| class="wikitable"
== TLabel ==
У VCL істотно розуміти різницю між Owner і Parent.; Ідея:<pre>
налаштувати властивості;
end;
* 125%;
* 150%;
* 200%;
* 4K-моніторах;
* кількох моніторах із різним DPI.; * темної теми;
* світлої теми;
* корпоративного стилю;
* сучаснішого вигляду старої програми;
* єдиного оформлення інтерфейсу.; end;
'''TLabel''' — текстовий напис.;<pre>
{| class="wikitable"
!Рекомендація
unit GreetingService;
<blockquote>'''Форма має керувати інтерфейсом, а не містити всю бізнес-логіку системи.'''</blockquote>
end;
Приклад:<pre>
FDQuery1.SQL.Text :=
procedure TForm1.Button1Click(Sender: TObject);
end;
* REST-запити;
* JSON;
* інтеграційні функціональні можливості з CRM;
* інтеграційні функціональні можливості з ERP;
* інтеграційні функціональні можливості з банком;
* інтеграційні функціональні можливості з касами;
* обмін із сайтом;
* синхронізація довідників;
* відправка документів.; end;
- LabelResult
'''TActionList''' надає можливість централізовано описувати дії.; Для великих систем краще розділяти шари.; !Перевага
Label1.Caption := 'Готово';
скомпілювати нативний Windows-застосунок.; procedure TForm1.ButtonSaveClick(Sender: TObject);
== VCL і сторонні компоненти ==
== Для чого застосовується VCL ==
|-
|'''актуалізація Delphi'''
|Перехід на сучасну версію RAD Studio
|-
|'''Рефакторинг форм'''
|Зменшення коду у формах
|-
|'''Винесення бізнес-логіки'''
|Перенесення правил у сервіси
|-
|'''актуалізація доступу до БД'''
|Перехід на FireDAC або сучасні драйвери
|-
|'''Додавання API'''
|Створення REST-шару для інтеграцій
|-
|'''актуалізація UI'''
|Стилі, DPI, сучасні компоненти
|-
|'''Поступова заміна модулів'''
|Модернізація по частинах
|-
|'''Документація'''
|характеристика форм, таблиць, бізнес-правил
|}
procedure TForm1.Edit1Change(Sender: TObject);
== Події ==
!Шар
== Мінімальний набір для першого VCL-проєкту ==
Типові значення Align:
{| class="wikitable sortable"
procedure TForm1.ButtonSaveClick(Sender: TObject);
procedure TForm1.MenuItemExitClick(Sender: TObject);
DFM зберігає те, що розробник розмістив на формі у дизайнері.
├── Models/ Такі компоненти часто використовують у складних бізнес-застосунках.; end;
TEdit
- створити форму в дизайнері;
- додати компоненти з палітри;
- налаштувати властивості через Object Inspector;
- двічі натиснути на кнопку;
- отримати готовий обробник події;
- написати кілька рядків коду;
- оперативно запустити програму.;
VCL і продуктивність
TEdit — однорядкове поле введення.; FDQuery1.SQL.Text := 'SELECT * FROM customers WHERE city = :city'; │ └── InvoiceService.pas VCL надає можливість працювати з друком через стандартні механізми Windows і компоненти.; {| class="wikitable"
VCL і DevExpress
│ ├── CustomerService.pas
Data-aware компоненти — одна з причин, чому Delphi/VCL був таким сильним для облікових і бізнес-систем.
procedure TForm1.ButtonSaveClick(Sender: TObject);
| Значення
├── Integrations/ Краще не писати всю логіку у формі.;== VCL, Delphi і Object Pascal == Типові властивості:Властивості компонентів |
Статус
Приклад:var
'SELECT * FROM users WHERE name = ''' + EditName.Text + '''';
{| class="wikitable"
!Властивість
!VCL
public
end
== RAD-підхід у VCL ==
'''TMainMenu''' створює головне меню програми.;== VCL і бази даних ==
// логіка при зміні розміру
== VCL Styles ==
!Для чого
private
|-
|Для Windows desktop
|Для cross-platform застосунків
|-
|Тісно повʼязана з Windows API
|Має власну cross-platform UI-модель
|-
|Дуже сильна для legacy і бізнес-систем
|Корисна для Windows, macOS, mobile і cross-platform сценаріїв
|-
|Класичний Delphi desktop
|Сучасніший multi-platform підхід
|}
Компоненти можна створювати не тільки через дизайнер, а й вручну.;
Простими словамиУ Delphi існують дві важливі UI-бібліотеки: TDBGrid | |
|---|---|---|
| Windows desktop | Створення нативних Windows-програм | Облікові програми, утиліти, адмінпанелі |
| ERP | Документи, складський облік, фінансовий блок, довідники, звіти | Desktop ERP, локальні бізнес-системи |
| CRM | Клієнти, угоди, задачі, історичний розвиток взаємодії | Desktop CRM, робоче місце менеджера |
| Бази даних | Форми, таблиці, data-aware компоненти | Firebird, InterBase, PostgreSQL, MSSQL, Oracle |
| Звіти | Друк документів, актів, накладних | Рахунки, накладні, касові звіти |
| складський облік | Робота із залишками, партіями, рухами товарів | Складська програма, інвентаризація |
| Торгівля | Робочі місця оператора, касира, адміністратора | POS, обліковий облік продажів, прайс-листи |
| Інженерні програми | Спеціалізовані Windows-застосунки | Розрахунки, обладнання, технічні програми |
| Legacy | супровід старих корпоративних систем | Delphi 5/7/XE/modern Delphi-проєкти |
begin Сучасні Windows-застосунки мають враховувати DPI scaling.; !Подія
VCL і розгортання
Можливі підходи:
VCL надає можливість не малювати інтерфейс вручну через Windows API, а працювати з вищим рівнем абстракції: формами, кнопками, меню, таблицями, панелями, діалогами, data-aware компонентами й подіями.; Типові задачі:
end;
OnClick Коли користувач системи натиснув компонент OnCreate Коли форма створюється OnDestroy Коли форма знищується OnChange Коли змінюється значення OnKeyDown Коли натиснута клавіша OnMouseMove Коли рухається миша OnClose Коли форма закривається
Object Inspector — це місце, де компонент налаштовується без ручного редагування всього коду.
TDBGrid — таблиця для відображення dataset.; Якщо потрібні кілька платформ — дивляться у бік FMX.
|- | style="background:#d4edda; color:#155724; font-weight:bold;" |Ключове |VCL орієнтована на Windows |Це головна бібліотека Delphi для класичних Windows desktop-застосунків.; ├── Forms/ Це істотно при: |- |IDE |Delphi / RAD Studio |- |Тип проєкту |VCL Forms Application |- |Перші компоненти |TButton, TEdit, TLabel, TMemo |- |Для layout |TPanel, Align, Anchors |- |Для бази даних |FireDAC + SQLite або Firebird для старту |- |Для таблиці |TDBGrid + TDataSource |- |Контроль версій |Git |- |технічна архітектура |Forms, DataModules, Services, Repositories |}
Типова помилка — завантажувати занадто багато даних одразу в DBGrid.;
* показ HTML-документа; * перегляд карти; * авторизація через web; * інтеграційні функціональні можливості з web-кабінетом; * hybrid desktop; * показ dashboard.; |- | style="background:#d4edda; color:#155724; font-weight:bold;" |Ключове |'''VCL є собою компонентною бібліотекою''' |Інтерфейс будується з компонентів: форм, кнопок, таблиць, меню, панелей.;<blockquote>'''Якщо Delphi — це майстерня, Object Pascal — мова майстра, то VCL — це набір інструментів, кнопок, форм, таблиць і компонентів, з яких оперативно збирається Windows-застосунок.'''</blockquote> !Пояснення == TMainMenu і TPopupMenu ==
VCL і FMX
Якщо потрібен найкращий класичний Windows desktop у Delphi — зазвичай обирають VCL.; end;
VCL не є собою універсальним рішенням для всіх платформ і не підходить для web frontend або mobile, але для класичного Windows desktop вона залишається дуже практичною, стабільною й сильною технологією.; Button.Left := 20;
Data-aware компоненти
Align Автоматичне вирівнювання компонента Anchors Привʼязка до країв форми begin
- alNone;
- alTop;
- alBottom;
- alLeft;
- alRight;
- alClient.; begin
Button.Parent := Panel1;
Якщо Owner заданий як
Self, форма автономно звільнить компонент при знищенні.;!Пояснення DBEditName.DataField := 'name';
Top = 20
Тут:
Caption = 'Main Form'
У VCL є собою два великі типи компонентів.; DevExpress VCL — це популярний набір комерційних компонентів для Delphi/C++Builder.; Окремо варто відзначити ERP/CRM-рішень, облікових програм, форм, таблиць, діалогів, звітів і застосунків для роботи з базами даних виступає ключовою рисою швидкої розробки Windows-застосунків у Delphi і C++Builder.;
TThread.Synchronize(nil, FDQuery1.SQL.Text :=
При модернізації старих Delphi-проєктів часто потрібно перевірити:
VCL тісно повʼязана з Delphi та Object Pascal.;
VCL — це серце класичного Delphi desktop: форми, кнопки, таблиці, меню, події, компоненти й швидка розробка програмного забезпечення Windows-програм.
Типові функціональні можливості: |- |Forms |Інтерфейс користувача |- |DataModules |Підключення, datasets, shared components |- |Services |Бізнес-логіка |- |Repositories |SQL і доступ до даних |- |Models |Структури даних |- |Reports |Друк і звіти |- |Integrations |API, обладнання, файли, зовнішні системи |}
VCL і обладнання
переважні аспекти VCL
Приклад:
У VCL-застосунках FireDAC часто застосовується для підключення до: * database connection; * queries; * transactions; * datasets; * image lists; * action lists; * REST clients; * shared services; * конфігурації; * бізнес-логіки без UI.; Приклад JSON-даних:<pre> {| class="wikitable"object MainForm: TMainForm
Рекомендований шлях навчання VCL
VCL містить багато компонентів.; ├── Services/ → DBGrid / DBEdit / DBNavigator додати компоненти;
// 300 рядків бізнес-логіки, SQL, перевірок і UI!Недолік type
DataModule — невізуальний контейнер для компонентів.;
Для бізнес-систем часто потрібне автоматичне актуалізація.; end; На той час створення Windows-застосунків часто вимагало значної роботи з Windows API, ресурсами, повідомленнями й ручним керуванням інтерфейсом.; VCL історично дуже сильна в роботі з базами даних.; Невізуальні компоненти в дизайнері видно на формі, але в запущеній програмі користувач системи їх не бачить.; !Приклади Розробник має змогу: Label1.Caption := 'Готово'; procedure TForm1.ActionSaveExecute(Sender: TObject);
- друк документа;
- попередній перегляд;
- вибір принтера;
- друк етикетки;
- друк чека;
- друк звіту;
- експорт у PDF через сторонні компоненти.; "customerId": 123,
Типові помилки новачків у VCL
Для доступу до даних у сучасному Delphi часто застосовується FireDAC.;== Хороша технічна архітектура VCL-проєкту ==
} RAD означає Rapid Application Development — швидка розробка програмного забезпечення застосунків.; {| class="wikitable"
end;
Align і Anchors
FireMonkey / FMX TForm — базовий клас для вікон VCL-застосунку.; * SQLite;
- Firebird;
- InterBase;
- PostgreSQL;
- MySQL;
- MariaDB;
- Microsoft SQL Server;
- Oracle Database;
- ODBC-джерел.; * використовує Windows controls;
- функціонує з Windows messages;
- підтримує роботу Win32/Win64;
- має доступ до handles;
- надає можливість обробляти системні повідомлення;
- має змогу взаємодіяти з DLL, COM, ActiveX.; !Порівняння з VCL
VCL і LCL
У VCL DataModule часто використовують для:
LCL Якщо фоновий потік має оновити інтерфейс, потрібно використовувати синхронізацію.;
- змінювати властивості;
- призначати події;
- редагувати Caption;
- змінювати Align;
- налаштовувати Font;
- створювати обробники OnClick;
- змінювати DataSource;
- працювати з Action.; │ ├── MainForm.pas
VCL — це технологія, яка зробила Delphi легендарним інструментом для Windows desktop і досі тримає багато реальних бізнес-систем.
VCL має властивості для розміщення компонентів.;== TMemo ==
Кращий підхід:!компонент
- великі форми;
- багато бізнес-логіки у подіях;
- старі компоненти;
- старі бази даних;
- складні SQL-запити;
- інтеграції з обладнанням;
- звіти;
- локальні конфігурація;
- залежність від Windows API.;== TPanel ==
InvoiceService.SaveInvoice(CurrentInvoice);procedure TForm1.WMSize(var Message: TWMSize);
- рахунки;
- накладні;
- акти;
- звіти;
- друк;
- експорт у PDF;
- експорт в Excel;
- шаблони документів.; procedure Button1Click(Sender: TObject);
!Файл
!Тип
VCL не є собою потокобезпечною для прямого доступу з фонових потоків до UI.; Вони можуть використовуватись для: |- |'''Назва''' |VCL |- |'''Повна назва''' |Visual Component Library |- |'''Тип''' |Бібліотека компонентів для розробки Windows-застосунків |- |'''Основна мова''' |Object Pascal / Delphi |- |'''додатково застосовується''' |C++Builder |- |'''Платформа''' |Windows |- |'''Середовище''' |Delphi IDE / RAD Studio |- |'''Основне призначення''' |Швидка розробка програмного забезпечення desktop-застосунків із графічним інтерфейсом |- |'''Ключові елементи''' |TForm, TButton, TEdit, TLabel, TPanel, TMainMenu, TDBGrid, TDataSource |- |'''Альтернатива в Delphi для cross-platform''' |FireMonkey / FMX |- |'''Схожа open source-ідея''' |LCL у Lazarus |}
'''FireDAC''' — сучасна бібліотека доступу до даних у Delphi.;Пояснення end;
Owner Хто відповідає за життєвий цикл компонента Parent У якому візуальному контейнері компонент відображається Приклад класу форми:
== Коротко == varend;
Selfє собою Owner;Panel1є собою Parent.; |-| style="background:#d4edda; color:#155724; font-weight:bold;" |Ключове |VCL дуже сильна для бізнес-систем
|обліковий облік, ERP, CRM, складський облік, документи, звіти й бази даних — класичні сценарії VCL.; VCL — бібліотека компонентів для Windows desktop.
Button1: TButton;
VCL зʼявилася разом із Delphi у 1995 році як одна з головних переваг середовища.; Button.Caption := 'Натисни мене';
- один EXE-файл;
- EXE + DLL;
- EXE + конфігураційні файли;
- інсталятор;
- portable-версія;
- мережеве розгортання;
- auto-update;
- terminal server;
- RemoteApp.;
Сучасні VCL-застосунки можуть використовувати WebView-компоненти для показу web-контенту всередині desktop-програми.; VCL є собою однією з ключових частин екосистеми Delphi й історично стала головним інструментом для створення desktop-програм забезпечується через '''VCL''' або '''Visual Component Library'''.; ShowWindow(Form1.Handle, SW_SHOW); │ ├── Customer.pas Для якісного VCL-застосунку потрібно тестувати масштабування інтерфейсу.; |- | style="background:#f8d7da; color:#721c24; font-weight:bold;" |Увага |'''VCL-проєкти часто містять багато логіки у формах''' |Якщо не розділяти UI, бізнес-логіку й доступ до даних, проєкт оперативно стає важким для підтримки.;== Проблеми старих VCL-проєктів == ); == VCL і безпека == !Чому це проблема Data-aware компоненти автономно повʼязуються з джерелом даних.; !Напрям |- |'''Швидка розробка програмного забезпечення Windows desktop''' |Форми й компоненти дозволяють оперативно створювати UI |- |'''Нативність''' |VCL-застосунки добре інтегруються з Windows |- |'''Стабільність''' |Багато VCL-систем працюють десятиліттями |- |'''Сильна робота з базами даних''' |Data-aware компоненти й FireDAC дуже зручні для бізнес-систем |- |'''Велика історичний розвиток''' |Багато готових рішень, компонентів і практик |- |'''Сторонні компоненти''' |DevExpress, TMS, FastReport та інші |- |'''Добре для ERP/CRM desktop''' |Форми, таблиці, документи, звіти — природний сценарій VCL |} begin Legacy VCL-проєкти можуть містити: == VCL і тестування == FDQuery1.Open; |- |'''Тільки Windows''' |VCL не є собою cross-platform UI-бібліотекою |- |'''Legacy-репутація''' |Часто асоціюється зі старими Delphi-системами |- |'''Ризик великих форм''' |Без архітектури форми стають занадто складними |- |'''Залежність від Delphi/RAD Studio''' |Повноцінна робота повʼязана з комерційною екосистемою Embarcadero |- |'''Менше нових розробників''' |Молодші розробники частіше обирають web, Python, JavaScript, C# |- |'''Не підходить для web frontend''' |Для web frontend потрібні JavaScript/TypeScript |- |'''Не ключовий вибір для mobile''' |Для mobile у Delphi застосовується FMX або інші технології |} !Проблема │ ├── CustomerRepository.pas Label1: TLabel; ShowMessage('інформаційні дані збережено'); |- |'''Писати всю логіку у формі''' |Код стає важким для підтримки |- |'''Зловживати глобальними змінними''' |Важко контролювати стан програми |- |'''Склеювати SQL рядками''' |Ризик SQL Injection і помилок |- |'''Не використовувати DataModule''' |Підключення й datasets розкидані по формах |- |'''Не враховувати DPI''' |Інтерфейс погано виглядає на сучасних моніторах |- |'''Оновлювати UI з фонового потоку''' |Можливі помилки й нестабільність |- |'''Не розділяти Owner і Parent''' |Можливі проблеми з життєвим циклом компонентів |} Caption = 'OK' inherited; У VCL-застосунках часто потрібні звіти.;Код:
→ DataSourceCustomers
- списків клієнтів;
- товарів;
- документів;
- замовлень;
- залишків;
- платежів;
- довідників.; procedure TMainForm.ButtonHelloClick(Sender: TObject);
{| class="wikitable" Відомі постачальники:
Це корисно для глибшої інтеграції з Windows.; * advanced grid;
- ribbon;
- scheduler;
- pivot grid;
- reports;
- charts;
- layout controls;
- editors;
- themes;
- printing.; Result := 'Привіт, ' + Name;
Можливі варіанти: begin
ProgressBar1.Position := 50;
Приклад:
begin !Значення → DBGridCustomers
== VCL і Unicode-міграція == VCL тісно повʼязана з Windows API і орієнтована насамперед на створення нативних Windows desktop-застосунків.; Сучасні версії Delphi використовують Unicode-рядки.; !Приклади <blockquote>'''Object Pascal — це мова.; !Приклади
'''VCL''' — одна з найважливіших частин Delphi-екосистеми.;
Рекомендовані шари
- string / AnsiString / UnicodeString;
- кодування файлів;
- SQL-запити;
- драйвери баз даних;
- сторонні компоненти;
- API-виклики;
- роботу з кирилицею.;
VCL часто зустрічається там, де Windows-програма керує реальним робочим місцем: касою, складом, оператором, обладнанням або локальною базою.
- сторонні компоненти;
- custom drawing;
- діалоги;
- старі форми;
- нестандартні controls;
- продуктивність.; TMainForm = class(TForm)
{| class="wikitable"
Модернізація VCL не обовʼязково означає повне переписування.;<pre>
'SELECT * FROM users WHERE name = :name';
procedure
end;
procedure
Close;
Label1.Caption := Edit1.Text;
Особливо істотно не склеювати SQL із введенням користувача.;== Висновок ==
== Owner і Parent ==
end;
* рахунок;
* накладна;
* акт;
* касовий звіт;
* залишки товарів;
* продажі та реалізація за період;
* звіт по клієнтах;
* фінансовий звіт;
* друк етикеток.; * TDataSource;
* TDBGrid;
* TDBEdit;
* TDBNavigator;
* TDBComboBox;
* TDBLookupComboBox;
* TDBMemo;
* TDBText.; Це комфортно, коли одна дія доступна в кількох місцях інтерфейсу.; end;
* кнопкою;
* пунктом меню;
* toolbar-кнопкою;
* shortcut;
* popup menu.; Приклад у коді:<pre>
* DevExpress;
* TMS Software;
* FastReport;
* Steema TeeChart;
* Raize / Konopka components;
* ReportBuilder.; !Теза
== DataModule у VCL ==
Небезпечний підхід:<pre>
Приклад обробника пункту меню:<pre>
== VCL і звіти ==
Приклади:
procedure TMainForm.ButtonHelloClick(Sender: TObject);
* SQL-запити;
* індекси в базі;
* кількість рядків у grids;
* завантаження даних;
* робота в UI-потоці;
* сторонні компоненти;
* rendering;
* робота з файлами;
* мережеві затримки;
* кешування.; Memo1.Lines.SaveToFile('log.txt');
!Чи підходить VCL?; '''TPanel''' — контейнер для інших компонентів.; |-
| style="background:#d4edda; color:#155724; font-weight:bold;" |Ключове
|'''VCL підтримує роботу RAD-підхід'''
|Форми можна створювати візуально через дизайнер Delphi.; Приклад поганого підходу:<pre>
== Історичний розвиток ==
На продуктивність VCL-застосунку впливають:
Приклад обробника кнопки:<pre>
== VCL і FastReport ==
написати бізнес-логіку;
Але при використанні стилів потрібно перевіряти:
Типова схема:<pre>
== VCL і DPI ==
VCL у ERP
FDQueryCustomers.Open;
Створення компонентів у коді
DBEditName.DataSource := DataSource1; Проблеми можуть виникати на: Button1.Caption := 'Зберегти'; == VCL і TMS Software == == VCL у CRM == * Caption; * Enabled; * Default; * Cancel; * ModalResult; * OnClick.; * перевірка версії при старті; * завантаження нового EXE; * launcher; * окремий updater; * мережевий каталог; * MSI/installer; * централізоване актуалізація через адміністратора.;Або:
створити форму;
- Embarcadero DocWiki — VCL: https://docwiki.embarcadero.com/RADStudio/Athens/en/VCL
- Embarcadero DocWiki — VCL Overview: https://docwiki.embarcadero.com/RADStudio/Athens/en/VCL_Overview
- Introducing the Visual Component Library: https://docwiki.embarcadero.com/RADStudio/Athens/en/Introducing_the_Visual_Component_Library_%28VCL%29
- RAD Studio Libraries Documentation — Vcl: https://docwiki.embarcadero.com/Libraries/Athens/en/Vcl
- Embarcadero Delphi: https://www.embarcadero.com/products/delphi
- RAD Studio: https://www.embarcadero.com/products/rad-studio
- DevExpress VCL Components: https://www.devexpress.com/products/vcl/
- FastReport VCL: https://www.fast-report.com/
- TMS Software VCL Components: https://www.tmssoftware.com/