Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP Lab 1.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.43 Mб
Скачать

Завдання для лабораторної роботи

  1. Ознайомитись із палітрою компонент Borland C++ Builder 6.

  2. Створити віконний проект, додати розглянуті візуальні компоненти.

3. Реалізувати калькулятор.

Контрольні питання

  1. Пояснити призначення компоненти Label.

  2. Пояснити призначення компоненти Edit.

  3. Чим відрізняюються кнопки Button та BitBtn?

  4. Пояснити призначення компонент CheckBox і CheckBoxList.

  5. Які три стани може мати компонента CheckBox?

  6. Пояснити призначення компоненти CspinEdit.

  7. Як можна задати мінімальне та максимальне значення для компоненти CspinEdit?

  8. Що таке подія у візуальному програмуванні?

  9. Яка основна подія кнопки?

  10. Як здійснюється доступ в коді до властивостей і методів?

  11. Пояснити призначення функцій FloatToStr і IntToStr.

  12. Пояснити призначення властивості Name.

  13. Яка властивість компоненти задає їй колір та шрифт?

  14. Як програмно задати розташування компоненти на формі?

  15. Як програмно приховати/показати компоненту на формі?

  16. Описати процес написання коду для обробника події.

  17. Яким чином можна забезпечити для декількох різних компонент виконання одного обробника події?

Лабораторна робота № 3

Тема. Огляд невізуальних компонент Borland C++ Builder 6. Створення проекту із невізуальними компонентами та їх використання.

Мета. Створити віконний проект та продемонструвати використання невізуальних компонент C++ Builder.

Теоретичні відомості.

Невізуальні компоненти – це компоненти які є невидимі при виконанні застосування, а у режимі конструювання зображаються іконкою. Такі компоненти можна розміщати в будь-якому місці форми. Розглянемо роботу з базовими невізуальними компонентами C++ Builder.

3.1. Системні діалоги. До невізуальних компонент належать 10 діалогів із закладки Dialogs: OpenDialog, SaveDialog, OpenPictureDialog, SavePictureDialog, FontDialog, ColorDialog, PrintDialog, PrinterSetupDialog, FindDialog, ReplaceDialog (рис. 26). При звертанні до цих компонент викликаються стандартні діалоги, вигляд яких залежить від версії Windows і налаштувань системи.

Рис. 26. Закладка Dialogs: 1 – OpenDialog, 2 – SaveDialog,

3 – OpenPictureDialog, 4 – SavePictureDialog, 5 – FontDialog, 6 – ColorDialog,

7 – PrintDialog, 8 – PrinterSetupDialog, 9 – FindDialog, 10 – ReplaceDialog

Виклик діалогу здійснюється за допомогою методу Execute, який повертає значення true якщо користувач здійснив певний вибір. При цьому у властивостях компоненти зберігається вибір користувача, який можна в подальшому використовувати. Якщо користувач натиснув кнопку «Відміна» або клавішу Esc, то функція Execute поверне false. В загальному вигляді звертання до метода Execute має вигляд:

if (<ім’я компоненти-діалога> -> Execute())

{ . . . }

OpenDialog. Цей діалог призначений для створення вікна діалогу «відкрити файл». Клас TOpenDialog показує модальне Windows вікно для вибору та відкриття файлів (рис. 27). Діалог не показується доки він не буде викликаний методом Execute. Коли користувач натисне кнопку «Відкрити» («Open»), діалог закривається, і вибраний файл або множина файлів зберігається у властивості Files. Типи файлів, які з’являються у випадаючому списку діалога задаються властивістю Filter. В процесі проектування зручно задати типи файлів з допомогою редактора фільтрів, який викликається кліком мишки по кнопці з трьома крапками навпроти властивості Filter (рис. 28).

Рис. 27. Діалогове вікно OpenDialog

Рис. 28. Редактор фільтрів

У ньому в колонці Filter Name задається ім’я фільтра, що буде показуватися у випадаючому списку діалога, а у Filter – розділені символом «;» шаблони, за якими відбиратимуться файли. Наприклад:

Текстові файли (*.txt, *.doc, *.rtf) *.txt; *.doc; *.rtf

Після задання шаблону з рис. 28 у властивості Filter з’явиться стрічка вигляду:

All Files|*.*|Cpp Files|*.cpp|Text Files|*.txt

В даній стрічці тексти і шаблони розділені вертикальними лініями. Аналогічним чином можна задавати властивість Filter програмно.

Властивість Filterlndex визначає номер фільтра, який буде за замовчуванням показаний користувачу при відкритті діалогу. Властивість InitialDir визначає початковий каталог, який буде відкритий в момент початку роботи із діалогом. Якщо значення цієї властивості не задане, то відкривається поточний каталог, або той, що був відкритий при останньому звертанні користувача до відповідного діалогу в процесі виконання застосування. Властивість DefaultExt визначає значення розширення файла за замовчуванням. Якщо значення не вказано, користувач має вибрати в діалозі ім’я файлу із розширенням. Властивість Title дозволяє задати заголовок вікна діалогу. Властивість Options задає додаткові умови вибору файла.

SaveDialog. Цей діалог призначений для створення вікна діалогу «зберегти файл» (рис. 29). Властивості даного діалогу аналогічні до властивостей OpenDialog.

Рис. 29. Діалогове вікно SaveDialog

Наведемо приклад використання даних діалогів. Помістимо на форму компоненту для відображення багатострічкового тексту RichEdit із закладки Win32, дві кнопки Button (у властивостях Caption задамо відповідно «Відкрити» та «Зберегти»), діалоги OpenDialog та SaveDialog.

В компоненті RichEdit текст зберігається у властивості Lines. Очистимо текст в компоненті, натиснувши на кнопку «...» і видаливши текст «RichEdit1» таким чином щоб зверху був напис «0 lines» (рис. 30).

Рис. 30. Вікно редактору тексту компоненти RichEdit

Після цього форма буде мати вигляд як на рис. 31.

Рис. 31. Приклад вигляду форми із компонентами

При натисканні на кнопку «Відкрити» добавимо наступний код в обробник події OnClick:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

if (OpenDialog1->Execute())

{

RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);

}

}

При натисканні кнопки «Відкрити» і виборі файлу, його вміст відображається у компоненті RichEdit (рис. 32).

Рис. 32. Форма із відкритим текстовим файлом

При натисканні на кнопку «Зберегти» добавимо наступний код в обробник події OnClick:

void __fastcall TForm1::Button2Click(TObject *Sender)

{

if (SaveDialog1->Execute())

{

RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);

}

}

На відміну від розглянутих компонент OpenDialog і SaveDialog, компоненти OpenPictureDialog та SavePictureDialog мають додаткові можливості попереднього перегляду графічних файлів (рис. 33).

Рис. 33. Діалогове вікно OpenPictureDialog

В цих діалогах за замовчуванням вказано фільтри, в яких перелічені всі графічні файли, з якими може працювати діалог (рис. 34).

Рис. 34. Фільтри за замовчуванням компоненти OpenPictureDialog

Компонента FontDialog викликає діалогове вікно вибору атрибутів шрифта (рис. 35). В ньому користувач може вибрати ім’я шрифта, його стиль, розмір та інші атрибути. Основна властивість компоненти – Font типу TFont, в якому можна задати початкові налаштування атрибутів шрифта, і зчитати значення атрибутів, задані користувачем в процесі діалога.

Рис. 35. Діалогове вікно FontDialog

Властивості MaxFontSize і MinFontSize встановлюють обмеження на максимальний і мінімальний розміри шрифта. Якщо значення цих властивостей рівне 0 (значення за замовчуванням), то обмежень немає. Дані властивості працюють лише при увімкненій опції fdLimitSize.

Властивість Device визначає, з якого списку можливих шрифтів буде запропоновано вибір в діалоговому вікні: fdScreen – із списка екрану (за замовчуванням), fdPrinter – із списка принтера, fdBoth – з обох.

Приклад використання діалового вікна FontDialog:

if (FontDialog1->Execute())

{

Button1->Font->Assign(FontDialog1->Font);

}

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

if (FontDialog1->Execute())

{

Font->Assign(FontDialog1->Font);

}

Компонента ColorDialog викликає діалогове вікно вибору кольору (рис. 36, а). В ньому користувач може вибрати колір із базової палітри або натиснувши кнопку «Визначити колір» («Determine color») визначити власний (рис. 36, б).

а б

Рис. 36. Діалогове вікно ColorDialog

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

if (ColorDialog1->Execute())

{

RichEdit1->Color = ColorDialog1->Color;

}

Діалоги друку та встановлення принтера – компоненти PrintDialog і PrinterSetupDialog. Компонента PrintDialog викликає діалогове вікно друку (рис. 37), в якому користувач може вибрати принтер і встановити його властивості, вказати кількість копій і чергування їх друку, друк у файл чи безпосередньо на принтер, вибрати сторінки для друку тощо. Компонента PrintDialog не здійснює друк. Вона лише дозволяє користувачу задати атрибути друку. Сам друк повинен реалізовуватись програмно за допомогою об’єкта Printer або іншим чином. На відміну від розглянутих діалогів, PrintDialog повертає низку властивостей, що характеризують вибрані користувачем налаштування (табл. 2).

Перед викликом діалога бажано визначити кількість сторінок у друкованому тексті, і задати властивості MaxPage і MinPage. У протилежному випадку користувачу буде недоступна опція Сторінки з ... по ... (Pages fromto)(рис. 37).

Рис. 37. Діалогове вікно PrintDialog

Таблиця 2. Властивості що повертає PrintDialog

PrintRange

Вказує вибрану користувачем радіокнопку з групи Друкувати: prAllPages – вибрана кнопка Всі сторінки, prSelection – вибрана кнопка Сторінки з ... по ... , prPageNums – вибрана кнопка Сторінки.

FromPage

Вказує встановлену користувачем початкову

сторінку у вікні Сторінки з ... по ...

ToPage

Вказує встановлену користувачем кінцеву

сторінку у вікні Сторінки з ... по ...

PrintToFile

Вказує чи вибраний користувачем індикатор Друк у файл.

Copies

Вказує встановлену кількість копій.

Collate

Вказує чи вибраний користувачем індикатор Розібрати.

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

Рис. 38. Діалогове вікно PrinterSetupDialog

Виклик даного діалогу відбувається наступним чином:

PrinterSetupDialog1->Execute();

Компоненти FindDialog (рис. 39) і ReplaceDialog (рис. 40) викликають діалогові вікна пошуку та заміни фрагмента текста. Компонента ReplaceDialogпохідний клас від FindDialog, тому ці діалоги дуже подібні і мають однакові властивості крім однієї, що задає текст в компоненті ReplaceDialog.

Рис. 39. Діалогове вікно FindDialog

Рис. 40. Діалогове вікно ReplaceDialog

Компоненти мають наступні основні властивості: FindText текст, заданий користувачем для пошуку чи заміни, ReplaceText (тільки в компоненті ReplaceDialog) – текст, який повинен заміняти FindText, Options – додаткові властивості.

Самі по собі компоненти FindDialog і ReplaceDialog не здійснюють ні пошуку ні заміни. Вони лише забезпечують інтерфейс з користувачем. Пошук і заміну потрібно здійснювати програмно. Для цього можна використати подію OnFind, яка відбувається коли користувач натиснув в діалозі кнопку Найти далее і подією OnReplace, що виникає коли користувач натиснув кнопку Заменить або Заменить все. В події OnReplace визначити яку саме кпонку натиснув користувач можна за значеннями прапорців frReplace та frReplaceAll.

3.2. Компонента Timer. Дана компонента розміщена на закладці System і дозволяє задавати у застосуваннях інтервали часу (рис. 41). Компонента має дві властивості: Interval – інтервал часу в мілісекундах і Enabled – доступність.

Рис. 41. Розташування на палітрі піктограми компоненти Timer

Властивість Interval задає період спрацьовування таймера. Через заданий інтервал часу після попереднього спрацьовування, або після програмного встановлення властивості Interval, або після запуску застосування, якщо значення Interval встановлене під час проектування, таймер спрацьовує, викликаючи подію OnTimer. В коді обробника цієї події записують необхідні оператори. Якщо задати Interval = 0 або Enabled = false, то таймер перестане працювати. Щоб запустити відлік часу потрібно задати Enabled = true, якщо встановлено додатнє значення Interval, або задати додатнє значення Interval, якщо встановлено значення властивості Enabled = false.

Наприклад, якщо необхідно, щоб через 5 секунд після запуску застосування закрилась форма-заставка, що відображає логотип застосування, потрібно на ній розмістити таймер, задати в ньому інтервал Interval = 5000, а в обробнику події OnTimer вставити оператор Close, що закриває форму.

Якщо необхідно в деякій процедурі запустити таймер, який відрахує заданий інтервал, наприклад 5 секунд, після чого потрібно виконати деякі операції і відключити таймер, то можна це зробити наступним чином. При проектуванні таймер зробити доступним (Enabled = true), але властивість Interval задати рівною 0. Таймер не буде працювати, доки в момент, коли потрібно запустити таймер не виконається оператор

Timer1->Interval = 5000;

Через 5 секунд після цього наступить подія OnTimer. В коді її обробника потрібно задати оператор

Timer1->Interval = 0;

який відключить таймер, після чого можна виконувати потрібні операції.

Другий еквівалентний спосіб вирішення цієї задачі це використання властивості Enabled. Під час проектування задається значення Interval = 5000 і значення Enabled = false. В момент, коли потрібно запустити таймер виконується оператор

Timer1->Enabled = true;

В коді обробника події OnTimer, яка наступить через 5 секунд після запуску таймера, можна вставити оператор

Timer1->Enabled = false;

який відключить таймер.

Таймер точно витримує задані інтервали Interval, якщо вони достатньо великі – соті і тисячні мілісекунд. Якщо ж задавати менші інтервали, то реальні інтервали часу будуть помітно більшими внаслідок різних накладних витрат, пов’язаних із викликами функцій та іншими обчислювальними аспектами.

3.3. Компоненти MainMenu і PopupMenu. У C++ Builder є дві компоненти, що представляють меню: MainMenu – головне меню, і PopupMenu – контекстне меню (рис. 42). Компоненти розміщені на закладці Standard і мають багато спільного.

Рис. 42. Розташування на палітрі піктограм компонент MainMenu та PopupMenu

Дані компоненти є невізуальними, тобто їх розміщення на формі під час проектування немає значення (рис. 43).

Рис. 43. Розташування компонент MainMenu та PopupMenu на формі

Зазвичай на форму розміщають одну компоненту MainMenu. В цьому випадку її ім’я автоматично заноситься у властивість форми Menu. Але можна помістити на форму декілька компонент MainMenu із різними наборами розділів, що відповідатимуть різним режимам роботи. В такому випадку, якщо потрібно переключитись на меню MainMenu2, потрібно написати оператори:

Form1->Menu = MainMenu2;

Основна властивість компоненти – Items. Її заповнення відбувається з допомогою конструктора меню, яке викликається подвійним кліком мишкою по компоненті або вибором кнопки «...» поруч із властивістю Items у вікні інспектора об’єктів. В результаті відкриється вікно, зображене на рис. 44. За допомогою цього конструктора можна спроектувати все меню.

Рис. 44. Конструктор меню для MainMenu

Назву розділа меню вказують у властивості Caption. Після цього вона автоматично з’являється на формі та у конструкторі. Тут є можливість задати іконки для підменю (при цьому має бути в наявності контейнер для піктограм – ImageList), створити багаторівневі підменю, розділювачі меню (слід вказати символ «-» у властивості Caption) тощо. Властивість Name задає ім’я об’єкта. Рекомендується вибирати змістовні імена для об’єктів. Основна подія розділу меню – OnClick, в коді обробника якої записують необхідні оператори.

Для будь-якого меню під час проектування, або програмно під час виконання може бути встановлена властивість Enabled (доступність) і Visible (видимість). Якщо встановити Enabled = false, то розділ буде зображатися сірим надписом і не буде реагувати на дії користувача. Якщо задати Visible = false, то розділ взагалі буде відсутній, а інші розділи займують його місце. Дані властивості використовують для того, щоб програмно змінювати доступні користувачу розділи меню в залежності від режиму роботи застосування.

Аналогічним чином можна спроектувати контекстне меню, викликавши конструктор меню для PopupMenu (рис. 45). Контексне меню прив’язане до конкретних компонент. Воно вспливає, коли даний компонент є у фокусі і користувач клікне правою кнопкою миші. Оскільки в застосуванні може бути декілька контекстних меню, то і компонент PopupMenu може бути декілька.

Прив’язати контексне меню можна під час проектування і програмно, задавши компоненті властивість PopupMenu (рис. 46).

Рис. 45. Конструктор меню для PopupMenu

Рис. 46. Приєднання компонент до форми та їх вигляд при роботі застосування

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]