Лекція 5. Використання візуальних компонент у Delphi. Форма
Загальна характеристика візуальних компонент
Як було сказано раніше, компоненти є візуальні та невізуальні. Невізуальні компоненти характеризуються тим, що при роботі програми їх не видно. Візуальні компоненти називаються елементами керування. Усі компоненти Delphi є нащадками класу TComponent.
Велику кількість класів містить бібліотека візуальних компонент (Visual Component Library, VCL). Для усіх компонент в бібліотеці візуальних компонент VCL базовим є клас TControl. В цілому візуальні компоненти можна розділити на дві великих групи: віконні та невіконні елементи керування.
Для віконних елементів керування базовим класом є TWinControl – прямий нащадок класу TControl. Віконний елемент керування представляє собою спеціалізовані засоби Windows, які призначені для створення вікон та обробки повідомлень Windows. Віконні елементи керування містять дескриптор (визначник) вікна (window handle). Дескриптором вікна в операційній системі Windows називається 32-бітна величина, яка однозначно визначає дане вікно. Програма використовує цей дескриптор для звернення до вікна. До таких елементів відносяться, наприклад, кнопки, перемикачі, текстові поля, однорядкові та багаторядкові редактори, прокрутка і т.п., а також різні панелі та елементи групування, в яких розміщуються інші компоненти. Тобто віконні елементи керування можуть містити інші елементи керування, виступаючи у ролі класу-контейнера, що є первинним по відношенню до об’єктів, які в ньому знаходяться. Причому контейнер разом з елементами керування, які в ньому знаходяться, розглядається у Windows як єдине ціле.
Для невіконних елементів керування базовим є клас TGraphicControl, який є похідним від класу TControl. Невіконні елементи керування не можуть бути контейнерами інших елементів користувацького інтерфейсу. Перевагами невіконних елементів керування по відношенню з віконними є менший розхід ресурсів, оскільки для них не потрібен дескриптор вікна. Невіконними елементами керування є елементи графічного типу, наприклад, мітки, геометричні фігури, рамки, зображення, панелі для малювання.
Загальні властивості візуальних компонент
Керування положенням компоненти на екрані і її розмірами виконується за допомогою властивостей: Left – горизонтальна координата лівого верхнього кута; Top – вертикальна координата лівого верхнього кута; Width – ширина; Height – висота. Для усіх компонент дані властивості задаються в пікселях відносно координат клієнтської частини батьківської компоненти (клієнтською частиною компоненти називається її внутрішня область, за виключенням заголовка, рамки і меню). Зміна значень даних властивостей є можливою як на етапі конструювання, так і на етапі виконання програми.
Спосіб вирівнювання елемента керування всередині своєї батьківської компоненти задає властивість Align. Можливі різні варіанти вирівнювання.
Колір і стиль заливки елемента керування задається властивістю Brush, яка є доступною лише під час роботи програми і лише для читання.
Колір фону більшості елементів керування задається властивістю Color, яка є доступною як на етапі конструювання. так і на етапі роботи програми.
Ефект тривимірного зображення елементів керування віконного типу забезпечує властивість Ctl3D.
Текст короткої підказки, яка спливає при наведенні миші встановлюється властивістю Hint, а властивість ShowHint визначає чи буде дана підказка відображатися на екрані в момент виконання програми.
Текст, який розміщується на елементі керування задається властивістю Text або Caption.
Властивість Visible дозволяє керувати відображенням елемента на екрані (якщо значення True, то компоненту видно).
Усі елементи керування мають властивість Enabled, яка керує доступністю компоненти в певний момент часу. Іншими словами, дана властивість визначає, чи повинен цей елемент реагувати на події клавіатури, таймера чи миші. При значенні даної властивості False елемент керування вважається відключеним і зображається сірим кольором.
У властивості Parent міститься посилання на батьківський елемент керування, який вміщає даний елемент. Властивості ParentColor, ParentFont, ParentShowHint, ParentCtl3D використовуються для сумісності з батьківськими елементами.
Фокус
З усіх елементів керування, які розміщені на формі, у процесі роботи програми одна компонента завжди відрізняється від інших. Цей елемент називається активним і може бути лише елементом віконного типу. Якщо елемент активний, то він має фокус.
На отримання фокусу введення віконні елементи керування можуть реагувати двома способами: за допомогою курсору редагування або за допомогою прямокутника фокусу. Такі компоненти, як редактори Edit, DBEdit, Memo або DBMemo при отриманні фокусу введення відображають у своїй області курсор редагування (текстовий курсор). Компоненти, не пов’язані з редагуванням тексту, отримання фокусу введення відображають, як правило, за допомогою пунктирного чорного прямокутника.
За допомогою клавіші Tab фокус почергово переходить до кожного об’єкта форми. Для того, щоб елемент керування став активним, необхідно, щоб виконувались наступні умови:
усі його батьківські компоненти, а також він сам були видимі на екрані (в усіх них властивість Visible повинна мати значення True);
властивість Enabled всіх цих компонент повинна бути True;
він повинен знаходитись в активній формі.
даний елемент повинен бути активізований або мишкою, або програмно (метод SetFocus), або клавішею Tab.
Зауважимо, що фокус можуть мати лише елементи віконного типу.
Методи візуальних компонент
Наступні методи є загальними для віконних елементів керування.
Процедура SetFocus встановлює фокус введення на віконний елемент керування. Якщо елемент керування в даний момент часу не може отримати фокус введення (він знаходиться у виключеному стані), то виникає помилка. Перевірити можливість активації компоненти дозволяє функція CanFocus:Boolean, яка повертає значення True, якщо елемент може отримати фокус введення, і False – у протилежному випадку.
Метод Clear служить для очищення вмістимого компоненти, яка може містити текстову інформацію. Наприклад, ListBox1.Clear; Memo1.Clear;
Метод Refresh використовується для оновлення елементу керування і виконує стирання зображення на елементі керування та його перемалювання. Як правило, метод викликається автоматично при необхідності перемалювання зображення. Виклик методу Refresh програмним способом використовується, коли програміст сам керує малюванням області візуальної компоненти, наприклад, списку ListBox.
Метод Refresh автоматично викликає методи Invalidate та UpDate. Метод Invalidate повідомляє Windows, що зображення треба перемалювати. При першій можливості система виконає цю операцію. Метод UpDate забезпечує негайне перемалювання вказаного об’єкта. При необхідності ці методи можна викликати безпосередньо у програмі.
Метод Perform призначений для посилання повідомлень віконним елементам керування.
Форма як головна компонента програми
Форма в Delphi являє собою видиме вікно Windows і є основною частиною практично будь-якої програми. Терміни ”форма” і ”вікно” є синонімами.
У формі розміщуються візуальні компоненти, які утворюють інтерфейсну частину програми, і системні (невізуальні) компоненти. Таким чином, форма є контейнером для усіх інших компонент.
Для роботи з формою призначена компонента Form класу TForm. Зі створення форми починається конструювання програми. Будь-яка форма може створюватись автоматично або програмно. Головна форма завжди створюється автоматично. Система Delphi при утворенні нової форми автоматично, з використанням методу Create, створює екземпляр класу (FormN), вносячи відповідні зміни у файл проекту (.dpr). Тобто у файлі проекту з’являється оператор:
Application.CreateForm(TFormN,FormN);
де TFormN – клас N–ї форми, FormN – N-а форма.
Програма може мати декілька форм, одна з яких є головною і при запуску програми відображається першою. При конструюванні програми зручно вказувати головну форму у вікні параметрів проекту, яке відкривається командою Project\Option. Головна форма вибирається у списку Main Form на сторінці Form, після чого Delphi автоматично вносить відповідні зміни у файл проекту.
З усіх створених форм Delphi при виконанні програми автоматично робить видимою головну форму, встановивши значення True властивості Visible цієї форми. Для решти форм значення даної властивості за замовчуванням рівне False, і після запуску програми вони на екрані не відображаються. Щоб зробити форму видимою, необхідно через Інспектор об’єктів властивості Visible надати значення True, або зробити це при виконанні програми за допомогою оператора: FormN.Visible:=True, де FormN – ім’я форми.
Не створену автоматично форму можна створити за допомогою конструктора:
FormN:=TFormN.Create(Application);
де FormN – ім’я форми. При цьому форма сторюється, але на екрані відображатися не буде. Ще один спосіб створення форми такий:
Application.CreateForm(TFormN, FormN)
Форма може бути модальною і немодальною. Немодальна форма дозволяє без її закриття переключитись на іншу форму програми. Модальна форма вимагає обов’язкового закриття перед звертанням до будь-якої іншої форми програми.
Форми, які відображають різні повідомлення і вимагають від користувача введення інформації, називають діалоговими вікнами. У свою чергу, діалогове вікно також може бути немодальним або модальним. У Delphi 7 є 11 компонент, які знаходяться на сторінці Палітри компонент і реалізують діалогові вікна загального призначення для виконання таких операцій як відкриття, збереження, друк файлів і т.п., тому їх часто називають стандартними.
Як і будь-яка інша візуальна компонента, форма має властивості, методи і події, загальні для усіх візуальних компонент. Поряд з ними у форми є специфічні властивості, методи та події. Деякі з них характеризують форму як головний об’єкт програми.
Особливості модальних форм
Модальною називається форма, яка повинна бути закрита перед зверненням до будь-якої іншої форми програми. Якщо користувач хоче перейти в іншу форму, не закривши поточну модальну форму, Windows блокує цю спробу і видає попереджувальний сигнал. Така заборона стосується лише поточної програми. Так що користувач може активізувати будь-яку іншу програму Windows. Однак програмний доступ до компонент будь-якої створеної форми є можливим, незважаючи на наявність в даний момент відкритої модальної форми.
Модальні форми часто називають інформаційними формами, діалоговими формами (або діалоговими панелями), хоча й існують немодальні діалогові та інформаційні вікна .
Для відображення форми в модальному режимі служить метод ShowModal. Після виведення форми метод не завершує роботу, а чекає її закриття. Як правило, закінчення роботи з модальною формою відбувається при натисненні на розміщену на ній кнопку. Обробник події натиснення цієї кнопки повинен містити оператор, який присвоює властивості ModalResult ненульове значення. Існують стандартні константи, які необхідно використовувати як значення властивості ModalResult. Значення цієї властивості можна використовувати програмно для організації галуження. Однак, як правило, керування кодом результату діалогу виконується не програмно (через властивість ModalResult форми), а за допомогою кнопок підтвердження або відміни виконаних операцій.
Шаблони форм
Деколи краще вибрати шаблон форми до конкретної ситуації, чим використовувати порожню форму. Зберігати форми та інші об’єкти у якості шаблонів дозволяє Сховище об’єктів (Repository). Це вікно New Items, яке викликається командою File\ New\ Other. Різні сторінки Сховища об’єктів містять шаблони таких форм:
сторінка New:
порожня форма Form;
сторінка Forms:
довідкове вікно About Box;
форма Dual List Box з двома списками;
форма Tabbed Pages з блокнотом;
сторінка Dialogs:
діалогове вікно Dialog with Help з кнопкою Help (два варіанта форми з різним положенням кнопок);
діалогове вікно Password Dialog для введення пароля;
звичайне діалогове вікно Standard Dialog (два варіанта форми з різним положенням кнопок);
панель Reconcile Error Dialog виводу інформації про помилки;
сторінка IntraWeb (з’явилась в Delphi 7):
форма програми Application Form;
форма сторінки Page Form.
Крім шаблонів форм, Сховище об’єктів має шаблони програм, звітів, а також декілька Майстрів (Wizard) – спеціальних програм-утиліт, які полегшують створення форм для роботи з базами даних, з веб-оглядачем та для побудови діаграм.