Смекни!
smekni.com

Розробка засобами Delphi дидактичного ілюстративного матеріалу для розвязання задачі з аналітичної Логарифмічна спіраль (стр. 4 из 8)

Компонент Image набагато багатший за своїми можливостями, ніж PaintBox. Навіть при малюванні на канві компонент Image має істотне переваження: в ньому не доводиться думати про перемальовку зображення, зіпсованого через перекриття даного вікна іншими. Все, пов'язане з обробкою подій OnPaint, в Image здійснюється автоматично. Крім того, за допомогою Image простіше, ніж при безпосередньому малювання на канві форми, розташувати у вікні програми кілька зображень і керувати ними. При цьому відпадає необхідність складних і нудних розрахунків координат канви форми, що забезпечують потрібне взаємне розташування зображень, тобто повною мірою проявляються переваги візуального програмування. Так що, імовірно, у всіх випадках краще працювати з канвою Image, ніж з канвою форми.

Але окрім цих можливостей компонент Image має властивості, що дозволяють працювати з різними типами графічних файлів.

Delphi підтримує три типи файлів: бітові матриці, піктограми та метафайли. Всі три типи файлів зберігають зображення; відмінність полягає лише в способі їх зберігання всередині файлів та у засобах доступу до них. Бітова матриця (файл з розширенням .bmp) відображає колір кожного пікселя у зображенні. При цьому інформація зберігається таким чином, що будь-який комп’ютер може відобразити зображення з роздільною здатністю та кількістю кольорів, що відповідають його конфігурації.

Піктограми (файли з розширенням .ico) — це маленькі бітові матриці. Вони повсюдно використовуються для позначення значків додатків, у швидких кнопках, в пунктах меню, в різних списках. Спосіб зберігання зображень в піктограмі схожий зі зберіганням інформації в бітових матрицях, але є і відмінності. Зокрема, піктограму неможливо масштабувати, вона зберігає той розмір, в якому була створена.

Метафайли зберігають не послідовність бітів, з яких складається зображення, а інформацію про спосіб створення картинки. Вони зберігають послідовності команд малювання, які й можуть бути повторені при відтворенні зображення. Це робить такі файли, як правило, більш компактними, ніж бітові матриці [5].

Компонент Image дозволяє відображати інформацію, що міститься в графічних файлах всіх зазначених типів. Для цього служить його властивість Picture — об'єкт типу TPicture.

Коли ви в процесі проектування завантажили зображення з файлу в компонент Image, він не просто відображає його, але і зберігає в додатку. Це дає вам можливість поставляти ваш додаток без окремого графічного файлу. Втім, у Image можна завантажувати і зовнішні графічні файли в процесі виконання додатку.

Повернемося до розгляду властивостей компоненту Image.

Якщо встановити властивість AutoSize в true, то розмір компоненту Image буде автоматично підганятись під розмір поміщеної в нього картинки. Якщо ж властивість AutoSize встановлена в false, то зображення може не поміститися в компонент або, навпаки, площа компоненту може виявитися набагато більше площі зображення.

Інше властивість — Stretch, дозволяє підганяти не компонент під розмір малюнка, а малюнок під розмір компонента. Встановлювати Stretch в true може мати сенс тільки для якихось візерунків, але не для картинок. Властивість Stretch не діє на зображення піктограм, які не можуть змінювати свої розміри.

Властивість Center, встановлена в true, центрує зображення на площі Image, якщо розмір компоненту більше розміру малюнка.

Ще одна властивість — Transparent (прозорість). Якщо Transparent дорівнює true, то зображення в Image стає прозорим.

Властивість Picture дозволяє також легко організувати обмін з графічними файлами будь-яких типів в процесі виконання додатку.

Ця властивість є об'єктом, який має у свою чергу підвластивості, що вказують на зберігається графічних об'єктів. Якщо в Picture зберігається бітова матриця, на неї вказує властивість Picture.Bitmap. Якщо зберігається піктограма, на неї вказує властивість Picture.Icon. На зберігається метафайлу вказує властивість Picture.Metafile. Нарешті, на графічний об'єкт довільного типу вказує властивість Picture.Graphic.

Об'єкт Picture та його властивості — Bitmap, Icon, Metafile і Graphic— мають методи файлового читання і запису LoadFromFile та SaveToFile [2]:

procedure LoadFromFile(const FileName: string);procedure SaveToFile(const FileName: string);

Для властивостей Picture.Bitmap, Picture.Icon і Picture.Metafile формат файлу повинен відповідати класу об'єкту: бітовій матриці, піктограмі, ме-тафайлу. При читанні файлу до властивості Picture.Graphiс файл повинен мати формат метафайлу. А для самого об'єкту Picture методи читання і запису автоматично підлаштовуються під тип файлу.

Але якщо формат файлу не співпаде з передбачуваним, виникне помилка. Аналогічно працює і метод SaveToFile з тією відмінністю, що застосований до Picture або до Picture.Graphic він зберігає у файлі зображення будь-якого фор-мату.

4.1.5 GroupBox

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

Панель GroupBox не має таких широких можливостей завдання різноманітних стилів оформлення, як Panel. Але вона має вбудовану рамку з написом, яка зазвичай використовується для виділення на формі групи функціонально об'єднаних компонентів. Напис цей визначається властивістю Caption. Ніяких особливих властивостей панель GroupBox не має.

4.1.6 CheckBox

Індикатори з прапорцем CheckBox використовуються в додатках в основному для того, щоб користувач міг вмикати та вимикати якісь параметри, або для індикації стану. При кожному натисканні користувача на індикатор його стан змінюється, проходячи в загальному випадку послідовно через три значення: виділення (поява чорної галочки), проміжне (сіре вікно індикатора та сіра пташка) і не виділене (порожнє вікно індикатора). Цим трьом станам відповідають три значення властивості компоненту State: cbChecked, cbGrayed, cbUnchecked. Втім, ці три стану допускаються тільки при значенні іншогї властивості, AllowGrayed, що дорівнює true. Якщо ж AllowGrayed = false (значення за замовчуванням), то допускається тільки два стану: виділений і не виділений. І State, і AllowGrayed можна встановлювати під час проектування або програмно під час виконання.

Проміжний стан зазвичай використовується, якщо індикатор викорисовується для відображення якоїсь характеристики об'єкту. Наприклад, якщо індикатор має показати, який регістр використовувався при написанні якогось фрагменту тексту, то у випадку, якщо весь текст написаний у верхньому регістрі, індикатор може приймати виділений стан, якщо в нижньому — не виділений, а якщо використовувались обидва регістра — проміжне.

Перевіряти стан індикатора можна не тільки за значенням State, але й за значенням властивості Checked. Якщо Checked дорівнює true, то індикатор ви-бран, тобто State = cbChecked. Якщо Checked дорівнює false, то State дорівнює cbUnchecked або cbGrayed. Установка Checked в true під час проектування або виконання автоматично перемикає State в cbChecked [10].

В індикаторі CheckBox напис задається властивістю Caption, а його розташування по відношенню до індикатору — властивістю Alignment.

4.1.7 MainMenu

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

Зазвичай на форму поміщується один компонент MainMenu. У цьому випадку його ім'я автоматично заноситься у властивість форми Menu. Але можна розмістити на формі і декілька компонентів MainMenu з різними наборами розділів, що відповідають різним режимам роботи програми. У цьому разі під час проектування властивості Menu форми надається посилання на один з цих компонентів. А в процесі виконання в потрібні моменти цю властивість можна змінювати, змінюючи відповідно склад головного меню додатку.

Основна властивість компоненту — Items. Його заповнення здійснюється за допомогою Конструктора Меню, що викликається подвійним клацанням на компоненті MainMenu або натисканням кнопки з трикрапками поруч з властивістю Items у вікні Інспектора Об'єктів. В результаті відкриється вікно, вигляд якого представлений на Рисунку 8. В цьому вікні ви можете спроектувати все меню.

Рисунок 8 – MainMenu

При роботі в конструкторі меню нові розділи можна вводити, розташовуючи курсор в рамку з точок, що позначають місце розташування нового розділу. Якщо при цьому розділ був введений не на потрібному вам місці, ви можете відбуксувати його мишею туди, куди вам треба. Інший шлях введення нового розділу — використання контекстного меню, спливаючого при натисканні правою кнопкою миші. Якщо ви попередньо виділите якийсь розділ меню та виберете із контекстного меню команду Insert, то рамка нового розділу вставиться перед раніш виділеним. З контекстного меню ви можете також виконати команду Create Submenu, що дозволяє ввести підменю в виділений розділ.

Властивість Caption означає напис розділу. Заповнення цієї властивості підкорюється тим же правилами, що і заповнення аналогічної властивості у кнопках, включаючи використання символу амперсанту («&») для позначення клавіш швидкого доступу. Якщо ви як значення Caption чергового розділу введете символ мінус «-», то замість розділу в меню з'явиться розділювач.

Властивість Name задає ім'я об'єкту, відповідного розділу меню. Дуже корисно давати цим об'єктам осмислені імена, бо інакше ви скоро заплутаєтесь у нічого іменах, що нічого не говорять, типу N21. Куди зрозуміліші імена типу MFile, MOpen, MSave і т. і.

Властивість Shortcut визначає клавіші швидкого доступу до меню — «гарячі» клавіші, за допомогою яких користувач, навіть не заходячи в меню, може в будь-який момент викликати виконання процедури, пов'язаної з даним розділом. Щоб визначити клавіші швидкого доступу, треба відкрити випадаючий список властивості Shortcut у вікні Інспектора Об'єктів та вибрати у ньому потрібну комбінацію клавіш. Ця комбінація з'явиться в рядку розділу меню.