Огляд візуальних компонент Delphi

19 Червня, 2024
0
0
Зміст

Огляд візуальних компонент Delphi

 

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

Компонент – це клас, що походить безпосередньо чи небезпосередньо з TComponent  із спеціальними шляхами доступу до його даних, надрукованими властивостями та іншими рисами, що задовольняють вимоги Delphi до візуальних чи невізуальних компонент.

            Візуальний компонент – це об”єкт з візуальним представленням під час виконання, такий як кнопка або текстовий коментар, що ви вставляєте у вікно форми. Візуальні компоненти можуть чи ні з”являтися на Палітрі Компонент.

Форма – це також компонент, що може містити об”єкти інших компонент.

            Об”єкт компоненту – це інстанція компоненту, вставлена у форму.

 

         Вступ

Програмування з візуальними компонентами легше ніж ловити рибу у ванні. Ви можете  зробити великий ефект, затративши невеликі зусилля, і найголовніше – ви навіть не зіпрієте.

            Візуальний компонент – це один з об”єктів, таких як кнопка або текстовий коментар, що ви вставляєте у вікно форми. Насправді, форма також є компонентом – таким, що може містити інші об”єкти компонентів. При розробці додатків в Delphi ви витрачаєте більшість свого часу, вставляючи та модифікуючи об”єкти візуальних компонент, отже, необхідно зрозуміти їх як слід. Візуальні компоненти – це свого роду будівельні блоки, на яких примощується  фундамент вашого коду.

 

Бібліотека візуальних компонент

З бібліотекою візуальних компонент Delphi (VCL) ви зможете створювати корисні додатки лише з  домішками програмування. Краще за будь-які слова це підтвердить розробка додатку-прикладу на цій лекції.

 

Категорії візуальних компонент

Для того, щоб вибрати категорію компонент, натисніть закладку сторінки, наприклад Dialogs, внизу Палітри Компонент Delphi (мал.1). Таблиця 1 перераховує та описує катугорії усіх візуальних компонент Delphi. Порядок та кількість катугорій на вашому екрані може відрізнятися залежно від опцій інсталяції, або ж встановлених додаткових компонент, або ж ви використали Options Environment, щоб впорядкувати значки на палітрі.

 

Малюнок 1. Палітра візуальних компонент Delphi містить закладки сторінок, що організують компоненти у категорії.

 

Таблиця 1: Категорії візуальних компонент Delphi.

Категорія

Опис

Standard

Стандартні елементи керування Windows, такі як кнопки, мітки, поля вводу, списки, прапорці та смуги прокручування.

Additional

 

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

Data Access

Компоненти для доступу до баз даних через таблиці та SQL-запити, для створення звітів з використанням додатку Borland’s ReportSmith, що включено у  Delphi.

Data Controls

Компоненти для роботи з інформацією баз даних, використовуючи елементи керування такі, як навігатори, поля редагування, коментарі, малюнки, прапорці і списки.

Dialogs

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

System

Додаткові компоненти для створення таймерів, областей малювання, інструментів каталогів диску, мультимедіа-додатків, для спільного використання даних через OLE і DDE.

VBX

Компоненти, що служать інтерфейсом до елементів керування Visual BASIC Extended (VBX). Довільний елемент керування VBX—не лише ті, поставляються з Delphi—може бути візуальним компонентом.

Samples

Зразкові компоненти, вихідний програмний код яких знаходиться у каталозі Delphi Source\Samples. Ці компоненти у більшості є керівництвами для створення ваших власних компонент, крім того вони можуть виявитися корисними у додатках.

 

Стандартні компоненти

Із стандартними компонентами, ви можете створювати об”єкти-елементи керування Windows та елементи спільного інтерфейсу такі як кнопки, прапорці і меню. Оскільки стандартні компоненти є відносно легкими до використання, вони роблять добрий вступ до програмування візуальних компонент.

 

Розробка додатків з об”єктів компонент

Якщо Delphi зараз не працює, то запустимо її. Якщо вже завантажено якийсь додаток, використаємо File New Project щоб приготувати вікно нової форми. Натиснемо закладку сторінки Standard під Палітрою Компонент, щоб відобразити значки компонент цієї категорії.

Виберемо значок компоненти. Наприклад, натиснемо кнопку, помічену великою літерою А, що представляє компоненту Label (мітка). Перемістимо курсор у вікно форми і натиснемо ліву кнопку миші, щоб вставити об”єкт компоненту Label у форму. Точне розміщення не має ваги. Не тягніть компоненту у форму; замість цього, натисніть значок компоненти, перемістіть вказівник миші у форму і натисніть знову, щоб вставити об”єкт.

Примітка. Для того, щоб уникнути двозначності, означимося, що термін компонент має на увазі значок у палітрі VCL; об”єкт компоненту – це інстанція компоненту, вставлена у форму. Якщо від вас вимагається натиснути об”єкт або об”єкт компоненту, виберіть його у вікні форми.

Додамо кілька інших об”єктів компонент у форму, вибираючи їх з палітри  Standard і натискаючи мишою у вікні форми. Після того, як ми вставили кілька об”єктів (точне число і типи не мають значення), спробуємо провести наступні експерименти, щоб познайомитися з командами організації компонент:

Для того щоб перемістити та змінити розміри компоненти, спершу виберемо її мишкою. (Delphi  автоматично вибирає щойно створені компоненти.) Це оточує компоненту маленькими прямокутниками, що називаються кермами (хендлами). Для того, щоб змінити вибраний розмір компоненти, натисніть і перетягніть кермо. Для того, щоб перемістити об”єкт у формі, натисніть всередині компоненти і перетягніть мишку.

            Натисніть і перетягніть мишку в задньому плані форми, щоб оточити кілька об”єктів компонент рамкою “з каучукової стрічки”. Відпустіть мишку, щоб вибрати об”єкти у рамці. Після цього ви можете натискати і перетягувати всередині вибрані об”єкти, щоб перемістити їх разом. Delphi відображає бліді керма довкола усіх вибраних об”єктів компонент. Ви не зможете використати ці керма для зміни розмірів кількох об”єктів – ви можете лише змінювати розміри індивідуальних об”єктів компонент – одного одночасно.

 

            Далі наведемо інший спосіб для вибору кількох об”єктів. Натисніть перший  об”єкт, щоб його вибрати, і тримайте натисненою кнопку Shift, натискаючи мишкою інші об”єкти.

Виберіть Edit Select All, якщо ви бажаєте вибрати всі об”єкти у формі.

Коли вибрано кілька об”єктів, натисніть будь-який об”єкт одночасно з кнопкою Shift, щоб зняти з нього вибір. У багатьох випадках для того, щоб вибрати велике число об”єктів, легше вибрати їх усіх, а потім зняти вибір з деяких.

Для того, щоб зняти вибір з об”єктів, натисніть мишкою задній план форми. Або, якщо вікно форми активне, натисніть Esc (це добрий спосіб для використання, коли один або більше об”єктів компонент повністю заповнюють форму, що робить складним або неможливим натиснути на задній план вікна). Ви знаєте, що всі об”єкти компонент не знаходяться під виборо, коли не видно жодного керма. Це важливо мати на увазі, тому що ви можете змінювати властивості та події форми лише коли не вибрано жодного об”єкту компоненти.

 

            Для того, щоб вирівняти кілька об”єктів компонент, виберіть їх і виберіть команду Edit Align, яка виводить діалоговий прямокутник. Використовуйте кнопки у цьому діалозі для вирівнювання ребер, рівномірного розміщення елементів керування, виконання інших впорядкувань. Дещо повправляйтеся у опціях діалогу, щоб познайомитися з командами впорядкування.

            Коли один об”єкт компоненту накриває інший, використовуйте  Edit Bring to Front та Edit Send to Back для зміни порядку відносного відображення об”єктів. Для того, щоб відпрацювати ці команди, вставте кілька об”єктів-прапорців (CheckBox) у форму, і тоді вставте ооб”єкт GroupBox (приклад компоненту-контейнеру). Якщо ви переміщаєте GroupBox понад кнопками, він покриває їх. Для того, щоб кнопки знову з”явилися, виберіть GroupBox  і виберіть  Edit Send to Back щоб сховати його за кнопками. (Якщо, здається, що нічого не відбулося, причина може полягати у тому, що ви вибрали кнопки і GroupBox. Щоб вибрати лише GroupBox, спочатку зніміть вибір з усіх об”єктів, і тоді натисніть GroupBox.)

            Під час виконання споживачі можуть натискати кнопку Tab, щоб перемістити фокус вводу з одного елементу керування до іншого. (Фокус вводу посилається на поточний елемент керування, що отримує будь-яку діяльність з клавіатури.) Для встановлення порядку для клавіші tab, виберіть деякі з усіх об”єктів компонент і виберіть команду Edit Tab Order. Отримаємо діалоговий прямокутник, який можна використати для опису порядку, в якому кожен елемент керування стає активним у відповідь на натиснення клавіші Tab. Команди діалогу є зрозумілими – просто натискайте і перетягуйте імена об”єктів компонент, щоб їх впорядкувати або виберіть ім”я і натисніть кнопки “вверх” або “вниз”, що розміщені в діалозі.

            Коли ви вибираєте два або більше об”єктів компонент, вікно Інспектору  Об”єктів показує їх спільні властивості та події. Довільні зміни цих значень впливають на всі вибрані об”єкти. Наприклад, щоб змінити стиль тексту для набору прапорців, спершу виберіть їх і тоді введіть ваші налаштування у спільну властивість Font.

Порада: Майте на увазі, що ви переглядаєте спільні властивості і події коли список, що розгортається, Інспектору  Об”єктів є порожнім.

 

Додаток-приклад: MemoPad

Малюнок 2. MemoPad демонструє компоненти  Label i Memo

Додаток-приклад MemoPad показує, як використовувати компоненти Label та  Memo. Програма також демонструє створення простого рядка команд меню. Малюнок 2 показує дисплей програми MemoPad.

Для негайного запуску додаткуMemoPad, виберемо  File Open Project, і відкриємо  Memopad.Dpr. Натисніть F9 щоб відкомпілювати, лінкувати і запустити програму. Наберіть кілька поміток, тоді вийдіть з програми MemoPad і поверніться у  Delphi, де ви тепер можете керувати формою і компонентами додатку.

Вибирайте команди  MemoPad  File Save для того, щоб зберегти ваші коментарі у текстовому файлі Memos.Txt в поточному каталозі. MemoPad завдли використовує це ім”я файлу. Виберіть  File Exit для завершення  MemoPad, що також автоматично зберігає ваші коментарі. (Ви можете використовувати довільний інший спосіб для виходу з програми.) Вибір  Help About відображає діалоговий прямокутник-повідомлення, що описує додаток.

            Дві з команд меню програми-прикладу мають відповідні клавіші акселератори, які споживачі можуть натиснути для вибору команд меню без використання миші. Натисніть F2 для збереження ваших коментарів. Натисніть F1 для відображення діалогового прямокутника-повідомлення. До того ж команди меню мають підкреслені “гарячі” клавіші. Напрклад, натисніть Alt+F X  для вибору File Exit.

             Програма MemoPad також використовує компоненту PopupMenu для того, щоб надати інший альтернативний спосіб для виконання команд. Перемістіть вказівник миші будь-де всередині вікна MemoPad – але не над рядком меню – і натисніть праву кнопку миші. Це відкриє мале pop-up меню, що працює подібно до головного меню але з”являється біля позиції миші. Для закриття вікна цього мню, натисніть правою кнопкою миші поза pop-up меню, або виберіть команду (або натисніть Esc).

            Завжди надавайте споживачу різні методи для виконання загальних команд. При цьому початківці зможуть вибирати команди з меню додатку (що відносно просто вивчити),  а експерти зможуть використовувати гарячі клавіші та pop-up меню для швидкого виконання команд.

 

Розробка додатку-прикладу MemoPad.

            Після того, як ви познайомилися з додатком MemoPad, за допомогою  Delphi дослідимо форму програми та компоненти. Покинемо зараз MemoPad та повернемося у  Delphi. Вибираємо кожен з об”єктів компонент програми у вікні форми через одне натиснення мишкою і переглядаємо їх властивості та події у вікні Інспектору Об”єктів.

             Перетворимо у звичку одинарне натиснення об”єкту компоненти у вікні форми. Для більшості компонент при подвійному натисненні їх об”єктів  Delphi створює процедуру у вхідному коді програми для події за припущенням, переважно OnClick. Якщо це трапляється випадково, виберіть Edit Undo для відміни (або натисніть Ctrl+Z або Alt+Backspace). Для відміни змін з часу останнього збереження ще раз відкрийте проект і дайте No якщо Delphi порадить зберегти ваші зміни. Однак, якщо ви випадково створили обробник події, що вам не потрібен, не турбуйтеся – до тих пір, поки ви не додасте жодних тверджень чи коментарів у процедуру, Delphi знищить його автоматично під час наступної компіляції проекту.

            Також поглянемо у модуль  Main (вікно із написом MAIN.PAS). Якщо ви не можете знайти це вікно, перенесіть його на верх завдяки командам  View Units або натиснувши швидку клавішу Toggle Form/Unit.  Main.Pas містить вхідний код Object Pascal, який Delphi синхронвзує із формою і її візуальними об”єктами компонент. Під час розробки додатку ви часто будете переключатися між формою та вікном пов”язаного з нею модуля.

            Доцільно розглядати форму та відповідаючий їй модуль як різні представлення тих же об”єктів. Форма показує візуальне представлення вікна та його елементів керування. Модуль показує команди Object Pascal, що виконують дії компонент, такі як відповіді на натиснення кнопки чи збереження даних у файлі.

            Не приковуйте себе до розуміння всього в програмуванні файлу Main.Pas, листинг якого наведено нижче. Файли такого типу наводяться лише для посилання. Насправді ж Delphi створює більшість програмного тексту автоматично, вам не доведеться набирати листингу.

            Зараз спробуємо створити заново додаток MemoPad. При виникненні ускладнень ви можете звернутися до листингу. Отже, виконуємо одна за одною наступні вказівки:

1.      Використаємо програму  типу Explorer для створення каталогу типу  C:\Projects\Memopad для збереження файлів вашого додатку. Якщо ви не бажаєте зберігати додаток, ви можете зберігати файли у каталозі Temp і знищити їх потім.

2.      Розпочнемо новий проект. Натиснемо всередині форми, щоб її вибрати, і змініть властивість Caption у вікні Інспектору Об”єктів на  Memo Pad. З цього місця і надалі, коли я радитиму змінити властивість, спершу виберіть компоненту на формі, і якщо потрібно, натисніть закладку  Properties у вікні Інспектору Об”єктів. Тоді, виберіть властивість і змініть її значення, що показане праворуч властивості.

3.      Змінимо властивість форми Name на MainForm. Це одне слово без пропусків. Якщо би ви набрали недопустимі символи у властивість Name, Delphi виведе повідомлення про помилку. Імена повинні починатися з літери або знаку підкреслення, і вони повинні включати лише букви, цифри і знаки підкреслення.

4.      Виберіть File Save Project або ж натисніть “швидку” кнопку Save project для того, щоб створитифайли проекту. Ви можете зачекати із збереженням проекту, але якщо ви зробите це зараз, то тим самим створите імена файлів, які Delphi використовує для створення різних елементів у тексті програми. Я строго наполягаю на негайному збереженні проекту наскільки це можливо після найменування форми головного вікна.

5.      Delphi пропонує вам два файлові діалоги, один за одним. У першому діалозі, під назвою Save Unit1 As, змініть каталог, на той що створений на кроці 1, і наберіть Main у полі для вводу File Name. Натисніть  Enter або натисніть мишкою OK. У наступному другому діалозі, поміченому як Save Project1 As, наберіть Memopad для імені файлу. Натисніть Enter або OK. Ви щойно створили два файли: Main.Pas і Memopad.Dpr. Delphi дописує розширення  .Pas і .Dpr до імен ваших файлів.

6.      Вставте компонент MainMenu у форму. А також вставте компонент  PopupMenu. У цьому прикладі ви використовуватимете для ідентифікації об”єктів імена за припущенням: MainMenu1 і PopupMenu1. Оскільки вони є відносно складними компонентами  Delphi виводить їх у вікні форми як значки, що представляють їх остаточну появу.   Значки є невидимими під час виконання. Перемістіть обидва значки у лівий верхній кут форми. Точне розташування не має значення.

7.      Для того, щоб створити команди меню, двічі натисніть об”єкт компоненту  MainMenu1, що відкриє підпрограму Delphi Menu Designer. Для того, щоб створити пункт меню File, наберіть &File, і натисніть Enter для зміни властивості Caption для цього об”єкту меню. Набирайте перед літерою амперсанд (&) щоб позначити для команди “швидку” клавішу з  Alt. 

8.      Тепер Menu Designer висвітлює наступне місце для вставки команди, в даному випадку, нижче меню File. Введіть &Save щоб створити команду   Save. Не натискайте Enter (якщо ви це зробили,  використайте клавішу “стрілка вверх” щоб повторно висвітлити команду.) Виберіть властивість  ShortCut, натисніть її стрілку вниз, і виберіть “швидку” клавішу для цієї команди F2.

9.      Натисніть порожній простір нижче команди Save в  Menu Designer, і виберіть властивість Caption. Введіть E&xit для створення клавіші виходу і позначте літеру  x як  “швидку” клавішу з  Alt для команди.  (Примітка: Коли ви вводите команди нового меню, завжди вибирайте властивість   Caption перед набором тексту команди.)

10.  Використовуючи подібну методику введіть меню Help і його команду About. Позначте F1 як “швидку” клавішу для команди таким же шляхом, як ви позначили F2 для Save.

11.  Закрийте вікно Menu Designer щоб побачити ваше меню у вікні форми.

12.  Двічі натисніть компонент PopupMenu щоб повторно відкрити Menu Designer, який цього разу виводить простіший стиль для меню pop-up. Введіть команди About, Save, і Exit у це меню. Перед літерами, що повинні бути підкресленими введіть амперсанди. Використайте властивість ShortCut, щоб позначити “швидкі” клавіші такі як F1 і F2.

13.  Недостатньо просто створити об”єкт PopupMenu object—ви повинні також наказати формі, щоб використати його. Закрийте вікно Menu Designer, і тоді натисніть всередині заднього фону форми щоб зняти вибір з будь-яких компонентів. Ви повинні побачити у списку, що розгортається Інспектору Об”єктів: MainForm: TmainForm. Змініть властивість форми PopupMenu  на PopupMenu1. Ви можете набрати це ім”я або ж вибрати його із списку, що розгортається, що є  у властивості. Це запрограмує форму для виводу об”єкту PopupMenu1, коли споживач натискає праву кнопку миші. 

14.  Натисніть F9 щоб відкомпілювати і запустити додаток, який на цій стадії ще незавершений. Я переважно роблю це негайно після створення команд програми і таким чином я перевіряю їх появу. Перепробуйте команди меню програми (жодна з яких поки що не працює), і натисніть праву клавішу миші для виводу меню pop-up. Для повернення у Delphi або натисніть Alt+F4,  або двічі натисніть кнопку системного меню, або натисніть кнопку Windows 95 “закрити”.

 

Щойно ви завершили перший етап програмування MemoPad. Виконайте наступні кроки для завершення розробки додатку.

1.      Вставте компонент Label у вікно форми і змініть його властивість Name на   MemoLabel. Натисніть Enter і зауважте, що  Delphi встановлює властивість   Caption в той же текст.

2.      Часто буває не бажано показувати внутрішнє ім”я об”єкту компоненту. Для зміни виведеного тексту мітки виберіть MemoLabel і змініть його властивість Caption на Memos:.

3.      Вставте об”єкт компоненту Memo у форму. Цього разу ви можете залишити властивість об”єкту Name, встановленою у значення за припущенням, тобто  Memo1. Однак, знищіть всі символи з властивості Lines щоб область виводу стала порожньою. Щоб зробити це, виберіть у Memo1 властивість Lines і натисніть кнопку редагування праворуч. Це відкриє редактор списків Delphi, який ви можете використати, щоб знищити рядок Memo1 (натисніть   backspace кілька разів або помітьте текст і натисніть Del). Натисніть Enter або виберіть кнопку редактору OK щоб виконати ці зміни.

4.      Змініть розміри Memo1 і налаштуйте всі компоненти, щоб отримати вигляд, подібний до того, шо на малюнку. На цьому місці ви можете захотіти зберегти проект і скомпілювати та запустити його, щоб поглянути на остаточний вигляд додатку. Порада: не чекайте на моєї поради, щоб випробувати ваші додатки. Ви можете натискати F9, щоб скомпілювати і запустити програму майже на будь-якому етапі його розробки.

5.      Для того, щоб запрограмувати команди MemoPad, у вікні форми виберіть команду програми File Save. (Не вибирайте команду в додатку, що виконується – вибирайте її саме у вікні форми Delphi.) Вибір цієї команди меню вставляє процедуру, що називається обробником події (хендлом події),  у текст програми, і розміщує курсор у місце, де ви можете набирати твердження, щоб виконати дії команди. Введіть  наступне твердження між begin і end. Текст у дужках повинен бути взятий в одинарні лапки. Не використовуйте подвійнві лапки. Зверніться до Memopad\Main.pas, якщо ви помилилися.

 

Memo1.Lines.SaveToFile(‘memos.txt’);

 

6.      Зробимо деякі пояснення. Твердження, що ви щойно ввели, зберігає рядки  Memo1 у файлі з іменем Memos.Txt. Lines є об”єктом, яким володіє Memo1.  SaveToFile – це метод, який може виконувати Lines. Крапки вказують на те, що  Memo1, Lines і SaveToFile є пов”язаними. Рядок ’memos.txt’ представляє ім”я файлу. Твердження передає рядок в дужках методу SaveToFile. Твердження закінчується крапкою з комою. На технічній мові кажучи, в мові Pascal крапка з комою відділяє одне твердження від іншого. В даному випадку, оскільки немає наступних тверджень, ви можете опустити крапку з комою; однак, вона не завдасть шкоди, якщо її все ж вставити.

7.      Доробіть інші команди  MemoPad. Виберіть Select File Exit у формі. Введіть   Close між ключовими словами begin та end (що стосуються процедури  TMainForm.Exit1Click в Main.Pas). Як ви вже знаєте, процедура Close, одна із сотні, що ви можете викликати, закриває вікно. Якщо, як в даному випадку, це головне вікно програми, Close також завершує програму.

8.      Повертаємося до вікна форми і вибираємо Help About. Введіть наступне твердження між begin та end. Точно наберіть кожен символ, як це показано.

 

MessageDlg(‘Memo Pad’#13#10’©’#13#10’Version 1.00’,mtInformation, [mbOk], 0);

 

9.      Твердження створює діалог повідомлення, що виводить повідомлення про  MemoPad  copyright і номер версії. У процедуру MessageDlg програма передає чотири аргументи у дужках, відділені комами. Перший аргумент – рядок, що взятий в одинарні лапки. У цьому рядку позначення  #13#10 вставляє ASCII-коди керування  “повернення каретки” і line feed, щоб розпочати подальший текст на нових рядках. Для того, щоб ввести символ copyright, використовужмо утиліту Windows Character Map, або вирізаємо і вставляємо символ з будь-якого іншого файлу. Аргумент mtInformation вибирає стиль діалогу. Аргумент [mbOk] є множиною, яка в цьоиу прикладі, має лише один член mbOk, що описує стиль діалогового прямокутника з кнопкою OK. Аргумент  0 є місцем для допоміжного контексту діалогу, який MemoPad не використовує. Знову ж крапка з комою завершує твердження. (Для більшої інформації про ці аргументи, дивіться MessageDlg у довіднику Delphi.)

10.  Для того, щоб запрограмувати команди  меню pop-up двічі натисніть об”єкт PopupMenu1, що ви вставили у форму. Це знову ж відкриє вікно Menu Designer. Натисніть закладку сторінки Events у вікні  Інспектору Об”єктів. Виберіть команду About в Menu Designer і встановіть подію OnClick в  About1Click. Ви можете ввести ім”я цього обробника події або його із списку, що розгортається OnClick. Встановіть для команди  Save обробник події OnClick в Save1Click. Встановіть для команди Exit обробник події  OnClick в Exit1Click. Це ті ж обробники подій, що ви програмували для головного меню – підтвердження того, як дві або більше події можуть поділяти той же код.

11.  Закрийте вікно Menu Designer. Натисніть всередині заднього фону вікна форми і якщо потрібно, виберіть закладку сторінки Events у вікні Інспетору Обєктів. Двічі натисніть порожній простір праворуч події OnActivate, і введіть наступне твердження if-then-else між  begin та end. Твердження читає текст вказаного файлу в об”єкт Lines компоненти:

 

if FileExists(’memos.txt’)

    then Memo1.Lines.LoadFromFile(’memos.txt’)

     else Memo1.Lines.SaveToFile(’memos.txt’);

 

12.  Попереднє твердження викликає функцію  FileExists, яка повертає True якщо файл є на диску, або False, якщо ні.  Якщо файл існує, твердження читає файл у рядки Memo1. Якщо ж ні, то твердження зберігає рядки в новому файлі. Оскільки властивість об”єкту  Lines порожня на цьому етапі, то виклик методу   SaveToFile створює порожній новий файл. Хоча може виявитися, що багато операцій мають місце, повна конструкція if-then-else насправді є єдиним твердженням, і отже вимагається лише одна крапка з комою для відділення цього твердження від інших. Як і в попередньому випадку, оскільки немає наступних тверджень, крапка з комою строго не вимагається.

13.  Виберіть форму (імовірно, вона вже вибрана), і двічі натисніть простір праворуч події OnClose. Delphi вставляє процедуру для цієї події, яка трапляється коли ви закриваєте вікно програми. Введіть наступне твердження між begin і  end для збереження рядків компоненти у вказаному файлі:

 

Memo1.Lines.SaveToFile(‘memos.txt’);

 

14.  Натисніть F9, щоб відкомпілювати, зв”язати і запустити завершену програму. Випробуйте команди і поверніться у Delphi. Порівняйте ваш програмний файл  Main.Pas з наведеним у додатку лекції. Деякі процедури можуть мати відмінний порядок, але твердження та загальне розміщення повинне бути те ж.

 

{Листинг  Memopad\Main.Pas}

unit Main;

 

interface

 

uses

  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,

  Forms, Dialogs, Menus, StdCtrls;

 

type

  TMainForm = class(TForm)

    MainMenu1: TMainMenu;

    PopupMenu1: TPopupMenu;

    File1: TMenuItem;

    Save1: TMenuItem;

    Exit1: TMenuItem;

    Help1: TMenuItem;

    About1: TMenuItem;

    About2: TMenuItem;

    Save2: TMenuItem;

    Exit2: TMenuItem;

    MemoLabel: TLabel;

    Memo1: TMemo;

    procedure Save1Click(Sender: TObject);

 

    procedure Exit1Click(Sender: TObject);

    procedure About1Click(Sender: TObject);

    procedure FormActivate(Sender: TObject);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  MainForm: TMainForm;

 

implementation

 

{$R *.DFM}

 

procedure TMainForm.Save1Click(Sender: TObject);

begin

  Memo1.Lines.SaveToFile(‘memos.txt’);

end;

 

procedure TMainForm.Exit1Click(Sender: TObject);

 

begin

  Close;

end;

 

procedure TMainForm.About1Click(Sender: TObject);

begin

  MessageDlg(‘Memo Pad’#13#10’© 1995 by Tom Swan’#13#10’Version 1.00’,

    mtInformation, [mbOk], 0);

end;

 

procedure TMainForm.FormActivate(Sender: TObject);

begin

  if FileExists(‘memos.txt’)

    then Memo1.Lines.LoadFromFile(‘memos.txt’)

    else Memo1.Lines.SaveToFile(‘memos.txt’);

end;

 

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);

begin

  Memo1.Lines.SaveToFile(‘memos.txt’);

end;

 

end.

 

Про клавіатуру

            Додатки Delphi можуть використовувати два основних методи отримання вводу від клавіатури. Перший і найлегший – це використати об”єкт компоненту, такий як  Edit, що автоматично відповідає на натиснення клавіш. Для більш загальної обробки клавіатури ви можете створити процедури у формі, що оброблюють довільну комбінацію із  трьох подій:

 OnKeyDown—викликається, коли ви натискаєте довільну клавішу, включаючи функціональні чи спеціальні клавіші, такі як Shift, Alt і Ctrl.

 OnKeyPress—викликається, коли ви натискаєте клавішу, що генерує символ ASCII, включаючи клавіші керування.

 OnKeyUp—викликається, коли ви звільняєте довільну клавішу.

             Кожна з цих подій отримує принаймні один параметр під назвою Key,  що представляє натиснену клавішу. У подіях OnKeyDown і OnKeyUp, Key – це беззнакове (тобто лише додатнє) значення-слово, що є кодом віртуальної клавіші Windows. У події OnKeyPress  Key – це символьне значення, що є символом ASCII. Усі символи ASCII мають відповідні коди віртуальних клавіш але навпаки – невірно. Існує багато віртуальних клавіш, що не мають відповідників  ASCII.

            Windows представляє коди віртуальних клавіш рядками символів, що починаються з vk_. Наприклад,  vk_alt – це код віртуальної клавіші для клавіші Alt. Список кодів віртуальних клавіш можна знайти в онлайновому довіднику Delphi.

 

Про порядок обробки натиснення клавіші

Багато компонент відповідають на дії, пов”язані з клавіатурою і часто буває необхідно вирішити питання про те, який з компонентів форми першим прийняв певну подію клавіатури.

Windows використовує фокус введення для визначення місця, куди були передані події клавіатури. Наприклад, поточно вибраний компонент у формі має фокус введення і, таким чином, саме він отримує події від клавіатури. Якщо компонент не обробляє події – наприклад,  не запрограмовано використовувати певні клавіші, такі як Esc або Ctrl—ця подія передається до власника компоненту, який переважно є формою. Наступний малюнок показує взаємозв”язок між компонентом, формою та фокусом введення.

 

Щоб послати події клавіатури до форми перед тим, як вибраний компонент отримає ці події, встановіть властивість форми KeyPreview у значення  True.  Наприклад, ви можете робити це, щоб модифікувати певні клавіші або щоб не дозволити споживачу вводити деякі символи, такі як цифри або знаки пунктуації. Малюнок показує взаємовідносини між компонентом, формою та фокусом введення у випадку, коли властивість KeyPreview встановлено в  True.

Простенький приклад покаже значимість властивості KeyPreview, яку ви можете використати, щоб накласти обмеження на введення у компоненти редагування тексту.  Отже розпочнемо новий проект і виконаємо такі дії:

1. Вставте компонент Edit у форму.  Вам не слід змінювати жодних його властивостей.

2. Змініть властивість  KeyPreview з  False  у  True, двічі клацнувши її значення.

3. Перейдіть на сторінку Events у вікні Object Inspector і двічі клацніть подію форми  OnKeypress, щоб створити обробник. Переконайтеся, що ви це робите для форми, а не об”єкту Edit1. Введіть наступне речення між begin та end, щоб перетворити символи малих літер у великі:

 

Key := Upcase(Key);

 

4. Натисніть F9, щоб зкомпілювати та запустити прогшраму. Якщо Delphi виведе діалог типу “file-save”, збережіть модуль та проект під іменами за припущенням у тимчасовому каталозі. 

5. Введіть деякий текст в Edit1. Програма автоматично перетворить символи малих літер у великі, незалежно від того, чи ви натиснули Caps Lock.

6. Вийдіть з програми, встановіть KeyPreview у False, і тоді натисніть F9, щоб зкомпілювати та запустити. Програма більше не перетворюватиме символи у великі літери. Це сталося тому, що елемент керування, що має фокус введення (відмінний від форми), отримує події клавіатури першим.

 

Цей метод також корисний для обмеження видів символів, які може вводити споживач. Наприклад, щоб виключити можливість введення споживачем цифр у компонент Edit, додайте наступне твердження до обробника події форми OnKeypress і встановіть властивість KeyPreview в True:

 

if Key in [‘0’ .. ‘9’] then   Key := Chr(0);

 

Це речення типу розгалуження перевіряє, чи параметр Key, переданий в обробник події знаходиться в множині символів від ’0’ до ’9’. Якщо так, то другий рядок речення присвоює символьне значення нуля змінній Key. Оскільки нуль, як значення символу ASCII не має жодного відповідника, це унеможливлює введення у компонент Edit.

Попереднє речення розгалуження використовує деякі, можливо нові для вас конструкції мови програмування Pascal. Вираз ’0’ .. ’9’ називається діапазоном. Він складається із двох значень, відділених двома крапками. Pascal інтерпретує цей вираз, як еквівалентний ряду символів:

 

‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’

 

Властивості форми

 Багато властивостей форми мають очевидне призначення і ми не будемо їх пояснювати тут (наприклад властивості форми Height та Width). Далі перерахуємо та пояснимо призначення решти властивостей.

 

ActiveControl—встановлюється у значення властивості Name того об”єкту, для якого ми бажаємо надавати фокус введення (робити активним) відразу ж після появи вікна форми. Фокус введення не є постійним і споживач може натиснути клавішу Tab щоб передати фокус іншим компонентам.

AutoScroll—встановлюється у  True, якщо ви бажаєте, щоб смуги прокручування автоматично з”являлися у вікні при появі інформації, що виходить поза віконні рамки. Також впливає на масштабування форми. Якщо властивість встановлена у  False, то і клієнтська частина вікна і все вікно будуть масштабуватися, якщо ж True, то масштабується лише клієнтська частина. Переважно у масштабованих формах вона встановлюється у False.

 Cursor—описує вигляд курсору, який він має при переміщеннях вказівника миші у клієнтській частині вікна. Вибирається одне із значень із списку, що розгортається для цієї властивості.

 Enabled—переважно встановлюється у  True, щоб надати можливість відповідати на події, пов”язані з мишкою, таймером та клавіатурою. Встановлення у False виключає обробку подій. Ніколи не робіть цього для форм головних вікон.  Встановлюйте значення цієї властивості False лише дляформ, якими керує програма (наприклад для вікна типу splash (спалах), що з”являється при запуску додатку).

 HorzScrollBar—встановлює значення для  горизонтальної смуги прокручування. Смуга прокручування з”явиться лише коли “підзначення” Visible встановлено у  True, а  Range більше ніж ClientWidth. Двічі клацніть назву властивості (але не її значення), щоб отримати ці “підзначення”.

 Icon—вибирає іконку для позначення вікна форми. Якщо форма – це головне вікно програми,  то властивість  Icon описує системну іконку, яку  виводить Windows, коли ви мінімізуєте вікно. 

 KeyPreview—встановлення цієї властивості у True надасть вам можливість отримувати більшість подй клавіатури перед тим, як вони потраплять до елементу керування, що має фокус введення. Якщо ж її значення False, то усі події клавіатури потрапляєть до вибраного елементу керування. Незважаючи на установки KeyPreview, форма ніколи не отримує подій кнопок навігації, таких як згенерованих натисненням Tab, BackTab та клавішами переміщення курсору.

 Menu—описує, який компонент MainMenu використовувати для рядка головного меню форми. Переважно Delphi встановлює цю властивість у перший об”єкт форми типу MainMenu але ви можете змінити його у інше меню.

 ObjectMenuItem—використовується додатками OLE.

 PixelsPerInch—визначає, як доодаток створюватиме вікно форми, змасштабоване відповідно до числа пікселів на дюйм. Використовуючи цю властивість разом з Scaled, можна створювати форми, що  матимуть подібний вигляд при різних роздільних здатностях екрану. Якщо  Scaled встановлено у False, PixelsPerInch не має жодного впливу. Назва цієї властивості дещо є невлучною, оскільки її значення не дорівнює числу пікселів на дюйм. Насправді ж Delphi визначає це число на основі розміру системного шрифта і тоді викоористовує це значення, щоб змасштабувати вікно форми.

 Position—визначає метод для обчислення розміру форми та її розміщення. Установка за припущенням poDefault виводить вікно у його розмірах, заданих під час проектування, але обчислює його розміри під час виконання  (Windows визначає визначає початковий розмір  форми часу виконання); poDefaultSizeOnly встановлює розміри вікна такі ж  як під час  проектування, але розміщає його під час виконання (Windows визначає, де вікно з”являється); poScreenCenter розміщує вікно у центрі екрану.

 Scaled—встановіть цю властивість у  True, щоб використати властивість PixelsPerInch і створити форму, що автоматично масштабуються до такого ж розміру незалежно від роздільної здатності монітору. Установка False не масштабує форми.

 Tag—не має жодного попереднього призначення. Властивість Tag використовується для зберігання довільних цілочисельних значень – наприклад, номер версії, код, який програма бажає взнати під час виконання.

 VertScrollBar—має таке ж призначення, що й властивість HorzScrollBar, але конфігурує “підвластивості” вертикальної смуги прокручування.

 Visible—встановлення у True робить компонент видимим; False приховує його до тих пір, поки програма не викличе для об”єкту компоненту метод  Show. Додаток автоматично робить свої форми видимими у потрібний час. Для форм, що використовуються для підпорядкованих вікон, діалогових вікон,  властивість Visible може бути встановлена у  False, щоб приховати вікно до потрібного часу.

 WindowMenu—у додатках з багатовіконним інтерфейсом (MDI), визначає меню, що виводить назви відкритих вікон. Вставіть цю властивість у значення довільного пункту меню (переважно це Window) у об”єкті форми  MainMenu.

 

Події форми

 Список подій форми можна переглянути у вікні Object Inspector.  Деякі з подій для форми є очевидними (наприклад,  OnClick і  OnDblClick). Про інші події зараз піде мова.

 

OnActivate—викликається, коли програма активізує форму – тобто, коли вона вперше отримує фокус введення, а також, коли ви, наприклад, повертаєтеся назад у програму з іншого додатку.

 OnClose—викликається, коли форма закривається. Дивіться також на подію OnDestroy.

 OnCloseQuery—викликається якраз перед закриттям форми, переважно коли додаток викликає процедуру Close. Ви можете використати цю подію, щоб уникнути втрати даних, повідомивши споживача про необхідність збереження змінених файлів перед завершенням додатку, або щоб запобігти форму від закриття.

 OnCreate—викликається відразу ж , коли програма створює об”єкт форми у пам”яті. Використовуйте цю подію, щоб виконати одноразову ініціалізацію.

OnDeactivate—викликається, коли споживач перемикається з додатку у інший. Дивіть ся також про подію  OnActivate.

OnDestroy—викликається саме пред руйнуванням об”єкту форми. Використовуйте цю подію, щоб звільнити системні ресурси або щоб виконати дії при аварійному завершенні. Якщо форма є головним вікном вікном програми,  OnDestroy  – це ваша остання можливість виконати якісь дії перед завершенням програми.

 OnDragDrop, OnDragOverце частини сервісу Delphi drag-and-drop.

 OnHide—викликається, щоб  виконати якісь дії, коли форма є прихованою. Наприклад, обробник події OnHide може звільнити пам”ять та інші ресурси, коли форма є невидимою. 

 OnKeyDown—викликається, коли споживач натискає довільну клавішу, включаючи функціональні та спеціальні. Використовуйте цю подію, щоб інтерпретувати натиснення комбінацій клавіш, наприклад з Alt,  Shift, функціональними клавішами. Можливо отримувати кілька подій OnKeyDown без отримання пов2язаних подій OnKeyUp events. Для використання цієї події переважно встановлюють властивість KeyPreview у True.

 OnKeyPress—викликається, коли споживач натискає єдину клавішу ASCII  або керування, але не функціональну чи іншу спеціалізовану клавішу. Цю подію використовують для аналізу натискань на символьні клавіші. Ця полія настає після події OnKeyDown але перед подією  OnKeyUp. Для використання цієї події переважно встановлюють властивість KeyPreview у True.

 OnKeyUp—викликається, коли споживач звільняє довільну клавішу, включаючи функціональну чи спеціальну. Завжди існує одна подія  OnKeyUp – відповідник події OnKeyDown.  event. Для використання цієї події переважно встановлюють властивість KeyPreview у True.

 OnMouseDown—викликається, коли споживач клацає довільну клавішу миші і вказівник миші розміщується над клієнтською частиною форми.

 OnMouseMove—викликається, коли споживач переміщає вказівник миші через клієнтську частину форми. Ви також можете визначити, чи споживач натискав клавіші Shift, Alt, або Ctrl переміщуючи мишу.

 OnMouseUp—викликається, коли споживач звільняє кнопку миші, що попередньо було  згенеровано подією OnMouseDown event, незважаючи на розміщення вказівника миші.

 OnPaint—викликається, коли вміст форми збирається змінитися – наприклад, після того, як споживач перекривав форму іншим вікном.

 OnResize—викликається, після того, як вікно змінюється у розмірах. Це може наступити у відповідь на переміщення кнопки розміру вікна та мінімізуючи чи максимізуючи вікно.

 OnShow—викликається саме перед тим, як вікно стає видимим. Ця подія використовується для ініціалізацій перед появою вікна.

 

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Приєднуйся до нас!
Підписатись на новини:
Наші соц мережі