Перейти до вмісту

VCL

Матеріал з K2 ERP Wiki

FireDAC — сучасна бібліотека доступу до даних у Delphi. !Значення

VCL і FMX

Пояснення

├── Forms/

  • нативні Windows desktop-застосунки;
  • швидка розробка програмного забезпечення форм;
  • бізнес-програми;
  • ERP і CRM;
  • робота з базами даних;
  • таблиці й довідники;
  • документи й звіти;
  • інтеграційні функції ERP з обладнанням;
  • технічна підтримка legacy Delphi-систем. Delphi — середовище. Приклад:

скомпілювати нативний Windows-застосунок.== VCL, Delphi і Object Pascal == Типові компоненти: Label1.Caption := 'Готово';

Label1.Caption := 'Готово';

Особливо критично не склеювати SQL із введенням користувача.== VCL Styles ==

Як застосовується для VCL VCL не виступає як потокобезпечною для прямого доступу з фонових потоків до UI. Для великих систем краще розділяти шари.
Service: TGreetingService;

→ DataSourceCustomers

Помилка

Button1.Caption := 'Зберегти';

VCL і Unicode-міграція

На продуктивність VCL-застосунку впливають:

Мінімальний набір для першого VCL-проєкту

  • швидка розробка програмного забезпечення форм;
  • зручна робота з таблицями;
  • data-aware компоненти;
  • нативний Windows UI;
  • хороша робота з базами даних;
  • просте розгортання в локальній мережі;
  • стабільність;
  • можливість інтеграції з обладнанням;
  • довгий життєвий цикл застосунків. VCL виступає як класичним прикладом RAD-підходу.VCL дає можливість не малювати інтерфейс вручну через Windows API, а працювати з вищим рівнем абстракції: формами, кнопками, меню, таблицями, панелями, діалогами, data-aware компонентами й подіями.

    VCL перетворює складну Windows GUI-розробку на роботу з компонентами, властивостями й подіями.

RAD-підхід у VCL

'SELECT * FROM users WHERE name = :name';
  • використовує Windows controls;
  • функціонує з Windows messages;
  • підтримує Win32/Win64;
  • має доступ до handles;
  • дає можливість опрацьовувати системні повідомлення;
  • здатна взаємодіяти з DLL, COM, ActiveX. Button1.Enabled := True;

VCL у ERP

Приклад сервісу для VCL-проєкту

FDQueryCustomers.Open;
private
VCL дає можливість працювати з друком через стандартні механізми Windows і компоненти.

Форма має керувати інтерфейсом, а не містити всю бізнес-логіку системи.

FireDAC і VCL

Object Pascal — це мова. procedure TMainForm.ButtonHelloClick(Sender: TObject);

Технологія

FDQueryCustomers.Close;

Задача

LabelResult.Caption := 'Привіт, ' + EditName.Text;

SaveDocument; var

SEO-опис

// 300 рядків бізнес-логіки, SQL, перевірок і UI

VCL і обладнання

begin end; Project/

Простими словами

Приклад ідеї DFM:
== VCL і звіти ==

│ └── InvoiceService.pas
Якщо фоновий потік має оновити інтерфейс, потрібно використовувати синхронізацію. Для бізнес-систем часто потрібне автоматичне оновлення версій. procedure TForm1.MenuItemExitClick(Sender: TObject);
 Button1: TButton;
'''DataModule''' — невізуальний контейнер для компонентів.<blockquote>'''Якщо Delphi — це майстерня, Object Pascal — мова майстра, то VCL — це набір інструментів, кнопок, форм, таблиць і компонентів, з яких оперативно збирається Windows-застосунок.'''</blockquote>
 Button.Left := 20;

* <code>Self</code> виступає як Owner;
* <code>Panel1</code> виступає як Parent. Button.Top := 20;

FDQuery1.Open;

Події — основа VCL-програмування. var

Підхід Рекомендована структура:

* групування елементів;
* створення layout;
* панелей інструментів;
* зон форми;
* відокремлення блоків інтерфейсу.== Важливі акценти ==

Типова схема:<pre>
end;
!Подія
│ └── Invoice.pas
<blockquote>'''Object Inspector — це місце, де компонент налаштовується без ручного редагування всього коду.'''</blockquote>
 Caption = 'Main Form'

Типові задачі:

Data-aware компоненти — одна з причин, чому Delphi/VCL був таким сильним для облікових і бізнес-систем.

end;

  • SQL-запити;
  • індекси в базі;
  • кількість рядків у grids;
  • завантаження даних;
  • робота в UI-потоці;
  • сторонні компоненти;
  • rendering;
  • робота з файлами;
  • мережеві затримки;
  • кешування. Приклад:
|- |'''Тільки 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 або інші технології |} Приклад:<pre> Приклад:

VCL дуже часто використовувалася для ERP-систем. VCL-застосунки часто інтуїтивно розгортати у Windows-середовищі. 'SELECT * FROM users WHERE name = ''' + EditName.Text + '''';

  • списків клієнтів;
  • товарів;
  • документів;
  • замовлень;
  • залишків;
  • платежів;
  • довідників. !Призначення

Це критично при:

DBEditName.DataSource := DataSource1;

  • один EXE-файл;
  • EXE + DLL;
  • EXE + конфігураційні файли;
  • інсталятор;
  • portable-версія;
  • мережеве розгортання;
  • auto-update;
  • terminal server;
  • RemoteApp.== Рекомендований шлях навчання VCL ==

== TMemo ==

ShowMessage('Hello from VCL!');
finally

Label показує привітання. |- | style="background:#d4edda; color:#155724; font-weight:bold;" |Ключове |'''VCL підтримує RAD-підхід''' |Форми можна створювати візуально через дизайнер Delphi. '''TLabel''' — текстовий напис. → DBGridCustomers

== Проблеми старих VCL-проєктів ==

  • advanced grid;
  • ribbon;
  • scheduler;
  • pivot grid;
  • reports;
  • charts;
  • layout controls;
  • editors;
  • themes;
  • printing. FDQueryCustomers

{| class="wikitable"

  • використовувати фільтри;
  • пагінацію;
  • пошук;
  • обмеження вибірки;
  • індекси;
  • background loading. Це інтуїтивно, коли одна дія доступна в кількох місцях інтерфейсу. begin

== VCL і сторонні компоненти ==

Код:

Memo1.Align := alClient; Модернізація VCL не обовʼязково означає повне переписування. Result := 'Привіт, ' + Name; !LCL

!Пояснення

  • великі форми;
  • багато бізнес-логіки у подіях;
  • старі компоненти;
  • старі бази даних;
  • складні SQL-запити;
  • інтеграції з обладнанням;
  • звіти;
  • локальні конфігурація;
  • залежність від Windows API. |-

| style="background:#fff3cd; color:#856404; font-weight:bold;" |критично |'''VCL не виступає як cross-platform бібліотекою''' |Для кросплатформеності в Delphi застосовують, коли потрібно FireMonkey / FMX. Delphi запропонував інший підхід:

InvoiceService.SaveInvoice(CurrentInvoice);

!Термін { VCL побудована поверх Windows API. Натискає кнопку. {| class="wikitable"

end;

  • Name;
  • Caption;
  • Text;
  • Width;
  • Height;
  • Left;
  • Top;
  • Align;
  • Anchors;
  • Font;
  • Color;
  • Enabled;
  • Visible;
  • TabOrder.<pre>

Навколо VCL існує велика ERP-платформа сторонніх компонентів. ├── DataModules/ |- |'''Логіка у формах''' |Бізнес-правила змішані з UI |- |'''Великі форми''' |Один form unit здатна містити тисячі рядків коду |- |'''Старі компоненти''' |Частина бібліотек здатна не підтримуватися |- |'''Залежність від Windows API''' |Ускладнює міграцію |- |'''Старі бази даних''' |Можуть використовуватись застарілі драйвери або схеми |- |'''Відсутність тестів''' |Будь-яка зміна ризикована |- |'''Немає документації''' |Систему важко підтримувати новим розробникам |}

== VCL і DPI == Він здатна включати:

Підходи: VCL має властивості для розміщення компонентів. {| class="wikitable" VCL історично дуже сильна в роботі з базами даних. begin begin

!Порівняння з VCL ├── Reports/ implementation Можливі варіанти:

Типові властивості:

VCL і друк

Кращий підхід:

При модернізації старих Delphi-проєктів часто потрібно перевірити: == VCL і оновлення версій застосунків ==

Button := TButton.Create(Self);

Властивості визначають стан і вигляд компонента.== Типові помилки новачків у VCL == Компоненти можна створювати не тільки через дизайнер, а й вручну. Label1.Caption := 'Готово'; !Рекомендація |- |'''оновлення версій Delphi''' |Перехід на сучасну версію RAD Studio |- |'''Рефакторинг форм''' |Зменшення коду у формах |- |'''Винесення бізнес-логіки''' |Перенесення правил у сервіси |- |'''оновлення версій доступу до БД''' |Перехід на FireDAC або сучасні драйвери |- |'''Додавання API''' |Створення REST-шару для інтеграцій |- |'''оновлення версій UI''' |Стилі, DPI, сучасні компоненти |- |'''Поступова заміна модулів''' |Модернізація по частинах |- |'''Документація''' |SEO-опис форм, таблиць, бізнес-правил |}

procedure TForm1.Button1Click(Sender: TObject);

Це корисно для глибшої інтеграції з Windows.== Хороша технічна архітектура VCL-проєкту ==

конкурентні переваги VCL

VCL підходить для desktop CRM-систем. |-

Візуальні Видимі на формі під час виконання TButton, TEdit, TLabel, TPanel
Невізуальні Не показуються користувачу, але виконують логіку TTimer, TDataSource, TOpenDialog, TActionList

створити форму;

У VCL-застосунках часто потрібні звіти. Button.Parent := Self; ShowWindow(Form1.Handle, SW_SHOW); begin

Object Inspector

Щоб спростити тестування, бажано:

Коли спрацьовує

DBEditName.DataField := 'name'; Для якісного VCL-застосунку потрібно тестувати масштабування інтерфейсу. LabelResult.Caption := Service.BuildGreeting(EditName.Text);

Що означає Чому це проблема
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-проєкти

→ DataSource Його використовують для:

Data-aware компоненти

  • створити форму в дизайнері;
  • додати компоненти з палітри;
  • налаштувати властивості через Object Inspector;
  • двічі натиснути на кнопку;
  • отримати готовий обробник події;
  • написати кілька рядків коду;
  • оперативно запустити програму.
ProgressBar1.Position := 50; !Тип VCL дає можливість опрацьовувати Windows-повідомлення.<blockquote>'''Якщо потрібен найкращий класичний Windows desktop у Delphi — зазвичай обирають VCL. Це означає, що VCL: Через Object Inspector можна: → DBGrid / DBEdit / DBNavigator * друк документа; * попередній перегляд; * вибір принтера; * друк етикетки; * друк чека; * друк звіту; * експорт у PDF через сторонні компоненти. !Статус end; FDQuery1.SQL.Text := |- |'''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 |Невізуальні системні компоненти |} '''TMainMenu''' створює головне меню програми. procedure TForm1.Button1Click(Sender: TObject); Типові події: procedure !Пояснення type У VCL-застосунках FireDAC часто застосовується для для підключення до: Memo1.Lines.Add('Новий рядок'); begin !Поняття !Що автоматизує ├── Models/ end Такі компоненти часто використовують у складних бізнес-застосунках. |- | style="background:#d4edda; color:#155724; font-weight:bold;" |Ключове |'''VCL дуже сильна для бізнес-систем''' |обліковий облік, ERP, CRM, складський облік, документи, звіти й бази даних — класичні сценарії VCL. ShowMessage('інформаційні дані збережено'); == VCL і WebView == == Компоненти VCL == Action здатна бути повʼязаний із: * міграції старого коду; * роботі з файлами; * роботі з базами даних; * інтеграції з API; * кирилиці; * імпорті/експорті; * старих компонентів.== VCL і LCL == Невізуальні компоненти в дизайнері видно на формі, але в запущеній програмі користувач системи їх не бачить. Для звітів можуть використовуватись: == Візуальні та невізуальні компоненти == * рахунки; * накладні; * акти; * звіти; * друк; * експорт у PDF; * експорт в Excel; * шаблони документів.== VCL і тестування == Приклад:<pre> * перевірка версії при старті; * завантаження нового EXE; * launcher; * окремий updater; * мережевий каталог; * MSI/installer; * централізоване оновлення версій через адміністратора.<blockquote>'''VCL — це технологія, яка зробила Delphi легендарним інструментом для Windows desktop і досі тримає багато реальних бізнес-систем.'''</blockquote> Legacy VCL-проєкти можуть містити: !Проблема Приклад ідеї:<pre> налаштувати властивості; |- |'''Forms''' |Інтерфейс користувача |- |'''DataModules''' |Підключення, datasets, shared components |- |'''Services''' |Бізнес-логіка |- |'''Repositories''' |SQL і доступ до даних |- |'''Models''' |Структури даних |- |'''Reports''' |Друк і звіти |- |'''Integrations''' |API, обладнання, файли, зовнішні системи |} Приклад:<pre>
Властивість
  • database connection;
  • queries;
  • transactions;
  • datasets;
  • image lists;
  • action lists;
  • REST clients;
  • shared services;
  • конфігурації;
  • бізнес-логіки без UI.

    DFM зберігає те, що розробник розмістив на формі у дизайнері.

begin

Модернізація VCL-проєктів

База даних

TActionList

TForm1 = class(TForm)

У старих VCL-системах найбільша цінність часто не у формах, а в бізнес-логіці, яка роками накопичувалась у коді.

DataModule у VCL

Але при використанні стилів потрібно перевіряти:

Form Вікно застосунку
Component Візуальний або невізуальний елемент
Control Візуальний компонент, який має інтерфейс
Property Властивість компонента
Event Подія, як приклад OnClick або OnCreate
Method Метод класу або компонента
Owner Обʼєкт, який володіє компонентом
Parent Візуальний контейнер компонента
Message Windows-повідомлення, яке здатна опрацьовувати компонент

│ ├── MainForm.pas

Можливі сценарії:
  • кнопки;
  • поля введення;
  • таблиці;
  • меню;
  • панелі;
  • вкладки;
  • діалоги;
  • компоненти доступу до даних;
  • невізуальні компоненти. |-
Увага VCL-проєкти часто містять багато логіки у формах Якщо не розділяти UI, бізнес-логіку й доступ до даних, проєкт оперативно стає важким для підтримки. Краще не писати всю логіку у формі. Розробник здатна:

Основні поняття VCL

end

end; );

Джерела

Тут:
  • кнопкою;
  • пунктом меню;
  • toolbar-кнопкою;
  • shortcut;
  • popup menu. Сучасні Windows-застосунки мають враховувати DPI scaling. {| class="wikitable"
  • змінювати властивості;
  • призначати події;
  • редагувати Caption;
  • змінювати Align;
  • налаштовувати Font;
  • створювати обробники OnClick;
  • змінювати DataSource;
  • працювати з Action. procedure TMainDataModule.OpenCustomers;

end. end }

Недолік
  • фіскальні реєстратори;
  • касові апарати;
  • сканери штрихкодів;
  • принтери етикеток;
  • ваги;
  • POS-термінали;
  • COM-порти;
  • USB-пристрої;
  • DLL-драйвери;
  • промислові контролери. Приклад JSON-даних:
== VCL і Unicode == Кращий підхід:

Button.Parent := Panel1;

FDQueryCustomers.SQL.Text := 'SELECT * FROM customers ORDER BY name';

Типові ERP-модулі на VCL: {| class="wikitable"

== Події ==

  • SQLite;
  • Firebird;
  • InterBase;
  • PostgreSQL;
  • MySQL;
  • MariaDB;
  • Microsoft SQL Server;
  • Oracle Database;
  • ODBC-джерел. !Компонент
  • UI controls;
  • grids;
  • planners;
  • charts;
  • cloud integrations;
  • web integrations;
  • maps;
  • reporting helpers. Головна ідея VCL — дозволити розробнику оперативно створювати Windows-застосунки з готових компонентів. * REST-запити;
  • JSON;
  • інтеграційні функції ERP з CRM;
  • інтеграційні функції ERP з ERP;
  • інтеграційні функції ERP з банком;
  • інтеграційні функції ERP з касами;
  • обмін із сайтом;
  • синхронізація довідників;
  • відправка документів. {| class="wikitable"
begin
  • string / AnsiString / UnicodeString;
  • кодування файлів;
  • SQL-запити;
  • драйвери баз даних;
  • сторонні компоненти;
  • API-виклики;
  • роботу з кирилицею. !Напрям

У невеликих VCL-проєктах логіку часто пишуть прямо у формах. |- | style="background:#d4edda; color:#155724; font-weight:bold;" |Ключове |'''VCL виступає як компонентною бібліотекою''' |Інтерфейс будується з компонентів: форм, кнопок, таблиць, меню, панелей.<pre> Можливі підходи:

try

VCL-застосунок здатна працювати з API. {| class="wikitable"

  • DevExpress;
  • TMS Software;
  • FastReport;
  • Steema TeeChart;
  • Raize / Konopka components;
  • ReportBuilder. !Приклади

Типова схема:<pre>

Теза

end;

VCL і багатопоточність

public

end;

end;
Приклад класу форми:
== VCL і розгортання ==
|-
|'''OnClick'''
|Коли користувач системи натиснув компонент
|-
|'''OnCreate'''
|Коли форма створюється
|-
|'''OnDestroy'''
|Коли форма знищується
|-
|'''OnChange'''
|Коли змінюється значення
|-
|'''OnKeyDown'''
|Коли натиснута клавіша
|-
|'''OnMouseMove'''
|Коли рухається миша
|-
|'''OnClose'''
|Коли форма закривається
|}
<blockquote>'''VCL часто зустрічається там, де Windows-програма керує реальним робочим місцем: касою, складом, оператором, обладнанням або локальною базою.'''</blockquote>
VCL зʼявилася разом із Delphi у 1995 році як одна з головних переваг середовища.== TLabel ==
!VCL

├── Integrations/

* 125%;
* 150%;
* 200%;
* 4K-моніторах;
* кількох моніторах із різним DPI. |-
|Для Windows desktop
|Для cross-platform застосунків
|-
|Тісно повʼязана з Windows API
|Має власну cross-platform UI-модель
|-
|Дуже сильна для legacy і бізнес-систем
|Корисна для Windows, macOS, mobile і cross-platform сценаріїв
|-
|Класичний Delphi desktop
|Сучасніший multi-platform підхід
|}
VCL тісно повʼязана з Windows API і орієнтована насамперед на створення нативних Windows desktop-застосунків. procedure TForm1.FormCreate(Sender: TObject);
procedure TForm1.ButtonSaveClick(Sender: TObject);
begin
 function BuildGreeting(const Name: string): string;
 procedure WMSize(var Message: TWMSize); message WM_SIZE;
begin

{| class="wikitable"
type
== TForm ==
== Приклад простої VCL-форми ==
== TEdit ==
|-
| style="background:#d4edda; color:#155724; font-weight:bold;" |Ключове
|'''VCL орієнтована на Windows'''
|Це головна бібліотека Delphi для класичних Windows desktop-застосунків. {| class="wikitable"

Приклад обробника кнопки:<pre>
object MainForm: TMainForm

├── Repositories/
Приклади:
begin
!Файл
|-
|'''.pas'''
|Код форми
|-
|'''.dfm'''
|SEO-опис компонентів форми
|}
interface
Приклад у коді:<pre>
Тестування VCL-застосунків здатна бути складнішим, якщо вся логіка знаходиться у формах. Можна створити сервіс. end;
== Головна ідея VCL ==
begin
end;
|-
|'''Швидка розробка програмного забезпечення Windows desktop'''
|Форми й компоненти дозволяють оперативно створювати UI
|-
|'''Нативність'''
|VCL-застосунки добре інтегруються з Windows
|-
|'''Стабільність'''
|Багато VCL-систем працюють десятиліттями
|-
|'''Сильна робота з базами даних'''
|Data-aware компоненти й FireDAC дуже зручні для бізнес-систем
|-
|'''Велика історія продукту'''
|Багато готових рішень, компонентів і практик
|-
|'''Сторонні компоненти'''
|DevExpress, TMS, FastReport та інші
|-
|'''Добре для ERP/CRM desktop'''
|Форми, таблиці, документи, звіти — природний сценарій VCL
|}

Приклад доступу до handle:<pre>
'''TEdit''' — однорядкове поле введення. !Для чого
→ Connection

type

* темної теми;
* світлої теми;
* корпоративного стилю;
* сучаснішого вигляду старої програми;
* єдиного оформлення інтерфейсу. Button: TButton;

TMS Software пропонує багато компонентів для Delphi, включно з VCL. FDQuery1.ParamByName('name').AsString := EditName.Text;
== Messages у VCL ==
!Шар
Data-aware компоненти автоматизовано повʼязуються з джерелом даних. end

VCL містить багато компонентів.== Історія K2 ERP ==
VCL не виступає як універсальним рішенням для всіх платформ і не підходить для web frontend або mobile, але для класичного Windows desktop вона залишається дуже практичною, стабільною й сильною технологією. Сучасні версії Delphi використовують Unicode-рядки. У Delphi існують дві важливі UI-бібліотеки:

!Для чого
Memo1.Lines.SaveToFile('log.txt');
Приклади категорій:
 Service.Free;
{| class="wikitable"
|-
|'''Object Pascal'''
|Мова програмування, якою пишеться Delphi-код
|-
|'''Delphi'''
|IDE, компілятор, платформа й ERP-платформа
|-
|'''VCL'''
|Бібліотека компонентів для Windows desktop
|-
|'''RAD Studio'''
|Середовище Embarcadero, яке містить Delphi та C++Builder
|-
|'''C++Builder'''
|Інструмент RAD Studio для C++-розробки, який так само здатна використовувати VCL
|}
 "customerId": 123,

{| class="wikitable"
VCL-застосунки часто використовувалися для інтеграції з обладнанням. Якщо потрібні кілька платформ — дивляться у бік FMX.'''</blockquote>

Приклад обробника пункту меню:<pre>
написати бізнес-логіку;
begin
- EditName
|-
|'''Назва'''
|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
|}

Відомі постачальники:
 Button.Caption := 'Натисни мене';

Типові напрямки:
DevExpress VCL — це популярний набір комерційних компонентів для Delphi/C++Builder.
Типові властивості:

end;

VCL і DevExpress

procedure

У VCL-бізнес-застосунках критично враховувати: procedure TForm1.WMSize(var Message: TWMSize); │ ├── CustomerService.pas RAD означає Rapid Application Development — швидка розробка програмного забезпечення застосунків. {| class="wikitable"

"status": "paid"

FastReport часто застосовується для у Delphi/VCL для звітів. * рахунок;

  • накладна;
  • акт;
  • касовий звіт;
  • залишки товарів;
  • продажі та реалізація за період;
  • звіт по клієнтах;
  • фінансовий звіт;
  • друк етикеток.== VCL і Windows API ==

VCL і FastReport

end;
  • grids;
  • reports;
  • charts;
  • ribbons;
  • docking;
  • editors;
  • schedulers;
  • PDF;
  • Excel;
  • printing;
  • UI themes;
  • database tools. procedure Button1Click(Sender: TObject);

begin Причини:

  • права доступу;
  • захист паролів;
  • шифрування конфігурацій;
  • безпечні SQL-запити;
  • журналювання дій;
  • резервні копії;
  • контроль ролей;
  • безпечну роботу з файлами;
  • перевірку даних користувача. │ └── InvoiceRepository.pas

TForm — базовий клас для вікон VCL-застосунку. Button.Caption := 'OK';

Сучасні VCL-застосунки можуть використовувати WebView-компоненти для показу web-контенту всередині desktop-програми. |-

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-коду
// логіка при зміні розміру
Label1: TLabel;

додати компоненти;

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
Типовий підхід:
!Група
Приклад:<pre>
'''TPopupMenu''' створює контекстне меню. Вони можуть використовуватись для:
== Недоліки VCL ==

Властивості компонентів

│ └── MainDataModule.pas

begin

→ Query / Dataset TMemo — багаторядкове поле введення. FDQuery1.SQL.Text := 'SELECT * FROM customers WHERE city = :city';

  • сторонні компоненти;
  • custom drawing;
  • діалоги;
  • старі форми;
  • нестандартні controls;
  • продуктивність. У VCL DataModule часто використовують для:

);

TPanel

Align і Anchors

VCL — одна з найважливіших частин Delphi-екосистеми.== VCL і legacy ==

Object Inspector — інструмент Delphi IDE для конфігурація компонентів. end;

Приклад:
!Приклади
!компонент
│ └── CustomerForm.pas

Небезпечний підхід:<pre>
 Service := TGreetingService.Create;

== VCL і бази даних ==

* показ HTML-документа;
* перегляд карти;
* авторизація через web;
* інтеграційні функції ERP з web-кабінетом;
* hybrid desktop;
* показ dashboard. * TDataSource;
* TDBGrid;
* TDBEdit;
* TDBNavigator;
* TDBComboBox;
* TDBLookupComboBox;
* TDBMemo;
* TDBText. !Поняття
|-
|'''Писати всю логіку у формі'''
|Код стає важким для підтримки
|-
|'''Зловживати глобальними змінними'''
|Важко контролювати стан програми
|-
|'''Склеювати SQL рядками'''
|Ризик SQL Injection і помилок
|-
|'''Не використовувати DataModule'''
|Підключення й datasets розкидані по формах
|-
|'''Не враховувати DPI'''
|Інтерфейс погано виглядає на сучасних моніторах
|-
|'''Оновлювати UI з фонового потоку'''
|Можливі помилки й нестабільність
|-
|'''Не розділяти Owner і Parent'''
|Можливі проблеми з життєвим циклом компонентів
|}

!Пояснення
 Left = 20
 Top = 20
function TGreetingService.BuildGreeting(const Name: string): string;
|-
|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;" |Найкращий практичний вибір
|-
|інтеграційні функції ERP з 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;" |Не підходить
|}

Типові функції ERP:
DBGrid1.DataSource := DataSource1;

VCL і API

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-застосунки
TButton — стандартна кнопка.
end;
TMainForm = class(TForm)
VCL Styles дозволяють змінювати зовнішній вигляд VCL-застосунку.
Для доступу до даних у сучасному Delphi часто застосовується для '''FireDAC'''. '''TDBGrid''' — таблиця для відображення dataset. VCL — бібліотека компонентів для Windows desktop.'''</blockquote>
 Close;

├── Services/
Якщо Owner заданий як Self, форма автоматизовано звільнить компонент при знищенні. Caption = 'OK'

Форма містить:

TButton

Owner Хто відповідає за життєвий цикл компонента
Parent У якому візуальному контейнері компонент відображається

Рекомендовані шари

Типові значення Align: FDQuery1.SQL.Text := VCL — це набір готових деталей для створення Windows-програм у Delphi.== Для чого застосовується для VCL ==

Приклади

Створення компонентів у коді

object Button1: TButton

підключити події; TThread.Synchronize(nil,

Етап Що вивчати

це бібліотека візуальних і невізуальних компонентів; так само реалізовано бізнес-систем, ERP/CRM-рішень, облікових програм, форм, таблиць, діалогів, звітів і застосунків для роботи з базами даних виступає ключовою рисою швидкої розробки Windows-застосунків у Delphi та C++Builder. !VCL

Або:

Приклад поганого підходу:<pre> |- |'''складський облік''' |Залишки, рух товарів, партії, інвентаризація |- |'''продажі та реалізація''' |Замовлення, рахунки, накладні, акти |- |'''закупівельна діяльність''' |Постачальники, надходження, заявки |- |'''фінансовий блок''' |Оплати, каса, банк, взаєморозрахунки |- |'''CRM''' |Клієнти, контакти, історія продукту взаємодії |- |'''Виробництво''' |Специфікації, операції, плани |- |'''електронний документообіг''' |Договори, акти, внутрішні документи |}

== VCL у CRM == !Перевага

Зазвичай виступає як два повʼязані файли:

  • картка клієнта;
  • список клієнтів;
  • історія продукту контактів;
  • угоди;
  • задачі;
  • дзвінки;
  • документи;
  • комерційні пропозиції;
  • календар;
  • звіти. end;

'''LCL''' у Lazarus схожа за ідеєю на VCL, але це інша бібліотека. Ідея:<pre>

  • FastReport;
  • QuickReport;
  • ReportBuilder;
  • DevExpress VCL Reports;
  • власна генерація HTML/PDF/Excel;
  • друк через Canvas.== Owner і Parent ==

== VCL і безпека ==

== VCL і продуктивність == VCL стала однією з причин популярності Delphi в корпоративній і бізнес-розробці. користувач системи вводить імʼя. VCL дуже часто зустрічається в legacy-системах. │ ├── CustomerRepository.pas

TGreetingService = class

end; PanelTop.Align := alTop; |- |'''Align''' |Автоматичне вирівнювання компонента |- |'''Anchors''' |Привʼязка до країв форми |} застосовується для для:

  • alNone;
  • alTop;
  • alBottom;
  • alLeft;
  • alRight;
  • alClient.== VCL у порівнянні з іншими UI-технологіями ==

== Коротко == Типові задачі: У VCL форма складається не тільки з Pascal-коду, а й з опису інтерфейсу. Проблеми можуть виникати на:

UI VCL потрібно оновлювати з головного потоку.

Пояснення У VCL критично розуміти різницю між Owner і Parent. VCL виступає як однією з ключових частин екосистеми Delphi й історично стала головним інструментом для створення desktop-програм забезпечується через VCL або Visual Component Library.

VCL — це серце класичного Delphi desktop: форми, кнопки, таблиці, меню, події, компоненти й швидка розробка програмного забезпечення Windows-програм.

Чи підходить VCL? * Caption;
  • Enabled;
  • Default;
  • Cancel;
  • ModalResult;
  • OnClick. На той час створення Windows-застосунків часто вимагало значної роботи з Windows API, ресурсами, повідомленнями й ручним керуванням інтерфейсом. * виносити бізнес-логіку у сервіси;
  • відокремлювати SQL у repositories;
  • не писати складну логіку в OnClick;
  • використовувати інтерфейси;
  • покривати сервіси unit-тестами;
  • мінімізувати залежність логіки від TForm.== Висновок ==

procedure TForm1.ButtonSaveClick(Sender: TObject);

inherited;
Приклад SQL-запиту:
└── Project.dpr
FDQuery1.ParamByName('city').AsString := 'Київ';
Краще:

procedure TForm1.ActionSaveExecute(Sender: TObject);
procedure TForm1.ButtonSaveClick(Sender: TObject);
procedure TForm1.Edit1Change(Sender: TObject);
TThread.Queue(nil,
Типова помилка — завантажувати занадто багато даних одразу в DBGrid. Форма здатна містити:

Типові задачі:
!Пояснення

VCL тісно повʼязана з Delphi та Object Pascal. |}

{| class="wikitable sortable"
== TDBGrid ==

begin

* візуальний дизайнер форм;
* компоненти;
* Object Inspector;
* події;
* швидку компіляцію;
* нативні Windows-застосунки;
* просту роботу з базами даних;
* зрозумілий Object Pascal. unit GreetingService;
== Коли VCL — хороший вибір ==
!FireMonkey / FMX
Приклади властивостей:
ShowMessage('Введено: ' + Edit1.Text);
Label1.Caption := Edit1.Text;
  • Text;
  • MaxLength;
  • PasswordChar;
  • ReadOnly;
  • CharCase.== VCL і TMS Software ==
Параметр

TMainMenu і TPopupMenu

DFM-файл

│ ├── Customer.pas procedure TMainForm.ButtonHelloClick(Sender: TObject); Старі Delphi/VCL-проєкти могли використовувати ANSI-рядки. - ButtonHello end;

Вона сильна там, де потрібні: TPanel — контейнер для інших компонентів. Button := TButton.Create(Self);

Значення Призначення

У VCL виступає як два великі типи компонентів. - LabelResult

Використання у формі:
застосовується для в Delphi застосовується для в Lazarus
Орієнтована на Windows Орієнтована на cross-platform desktop
Комерційна Delphi/RAD Studio ERP-платформа Open source Free Pascal/Lazarus ERP-платформа
Має багату історію сторонніх компонентів Має відкриту екосистему, але меншу кількість компонентів

TActionList дає можливість централізовано описувати дії. Приклади:

"amount": 1500.00,