
Лабораторна робота №15 Тема:Створення програм з використанням діалогових компонентів
Мета:Ознайомитись з поняттям діалогових компонентів. Навчитись використовувати їх при складанні програмних продуктів.
ОБЛАДНАННЯ: технічне забезпечення: ПЕОМ, програмне забезпечення: система програмування Borland Delphi 7.
Завдання до роботи:
Вивчити необхідний теоретичний матеріал.
Відповісти на контрольні запитання.
Виконати відповідні практичні завдання відповідно до ходу роботи.
Оформити звіт (завдання до роботи, тексти програм, контрольні приклади та результати їх виконання).
Зміст звіту:
номер лабораторної роботи;
тема;
завдання до роботи;
текст програми;
контрольні приклади;
результати їх виконання;
висновок.
Теоретичні відомості
У додатках часто доводиться виконувати стандартні дії: відкривати і зберігати файли, задавати атрибути шрифтів, вибирати кольори палітри, здійснювати контекстний пошук і заміну і тому подібне
Розробники Delphi потурбувалися про те, щоб включити в бібліотеку прості для використання компоненти, що реалізовують відповідні діалогові вікна. Вони розміщені на сторінці Dialogs.
OpenDialog" Відкрити файл" |
Призначений для створення вікна діалогу "Відкрити файл". |
SaveDialog "Зберегти файл" |
Призначений для створення вікна діалогу "Зберегти файл як". |
OpenPictureDialog "Відкрити малюнок" |
Призначений для створення вікна діалогу "Відкрити малюнок", що відкриває графічний файл. Починаючи з Delphi 3. |
SavePictureDialog "Зберегти малюнок" |
Призначений для створення вікна діалогу "Зберегти малюнок" - збереження зображення в графічному файлі. Починаючи з Delphi 3. |
FontDialog "Шрифти" |
Призначений для створення вікна діалогу "Шрифти" - вибір атрибутів шрифту. |
ColorDialog "Колір" |
Призначений для створення вікна діалогу "Колір" - вибір кольору. |
PrintDialog "Друк" |
Призначений для створення вікна діалогу "Друк". |
PrinterSetupDialog "Установка принтера" |
Призначений для створення вікна діалогу "Установка принтера". |
FindDialog "Знайти" |
Призначений для створення вікна діалогу "Знайти" - контекстний пошук в тексті. |
ReplaceDialog "Замінити" |
Призначений для створення вікна діалогу "Замінити" - контекстна заміна фрагментів тексту. |
FileListBox (список файлів) |
Відображує список усіх файлів каталогу. |
DirectoryListBox (структура каталогів) |
Відображує структуру каталогів диска. |
DriveComboBox (список дисків) |
Випадний список доступних дисків. |
FilterComboBox (список фільтрів) |
Випадний список фільтрів для пошуку файлів. |
DirectoryOutline (дерево каталогів) |
Приклад компонента, використовуваного для відображення структури каталогів вибраного диска. |
Останні чотири компоненти в таблиці є не закінченими діалогами, а їх фрагментами, що дозволяють будувати свої власні діалогові вікна.
Усі діалоги є невізуальними компонентами, так що місце їх розміщення на формі не має значення. При зверненні до цих компонентів викликаються стандартні діалоги, вид яких залежить від версії Windows і налаштування системи. Отже при запуску одного і того ж додатка на комп'ютерах з різними системами діалоги виглядатимуть по-різному. Наприклад, при русифікованій версії Windows усі їх написи будуть російськими, а при англомовній версії напису будуть англійською мовою.
Основний метод, яким проводиться звернення до будь-якого діалогу, - Execute. Ця функція відкриває діалогове вікно і, якщо користувач зробив в нім якийсь вибір, то функція повертає true. При цьому у властивостях компонента-діалогу запам'ятовується вибір користувача, якого можна прочитати і використовувати в подальших операціях. Якщо ж користувач в діалозі натиснув кнопку Відміна або клавішу Esc, то функція Execute повертає false. Тому стандартне звернення до діалогу має вигляд:
if <ім'я компонента-діалогу>.Execute then
<оператори, що використовують вибір користувача>;
Компоненти OpenDialog - діалог "Відкрити файл" і SaveDialog - діалог "Зберегти файл як."., мабуть, використовуються найчастіше, в більшості додатків.
Усі властивості цих компонентів однакові, тільки їх сенс дещо різний для відкриття і закриття файлів. Основна властивість, в якій повертається у вигляді рядка вибраний користувачем файл, - FileName. Значення цієї властивості можна задати і перед зверненням до діалогу. Тоді воно з'явиться в діалозі як значення за умовчанням у вікні Ім'я файлу.
Типи шуканих файлів, що з'являються в діалозі у випадному списку Тип файлу, задаються властивістю Filter. В процесі проектування цю властивість найпростіше задати за допомогою редактора фільтрів, який викликається натисненням кнопки з багатокрапкою біля імені цієї властивості в Інспекторові Об'єктів. При цьому відкривається вікно редактора. У його лівій панелі Filter Name ви записуєте той текст, який побачить користувач у випадному списку Тип файлу діалогу. А в правій панелі Filter записуються розділені крапками з комою шаблони фільтру.
Після виходу з вікна редагування фільтрів задані вами шаблони з'являться у властивості Filter у вигляді рядка виду:
текстові (*.txt, *.doc)|*.txt; *.doc|усіх файлів|*.*
У цьому рядку тексти і шаблони розділяються вертикальними лініями. У аналогічному виді, якщо вимагається, можна задавати властивість Filter програмно під час виконання додатка.
Властивість FilterIndex визначає номер фільтру, який буде за умовчанням показаний користувачеві у момент відкриття діалогу. Наприклад, значення FilterIndex = 1 задає за умовчанням перший фільтр.
Властивість InitialDir визначає початковий каталог, який буде відкритий у момент початку роботи користувача з діалогом. Якщо значення цієї властивості не задане, то відкривається поточний каталог або той, який був відкритий при останньому зверненні користувача до відповідного діалогу в процесі виконання цього додатка.
Властивість DefaultExt визначає значення розширення файлу за умовчанням. Якщо значення цієї властивості не задане, користувач повинен вказати в діалозі повне ім'я файлу з розширенням. Якщо ж задати значення DefaultExt, то користувач може писати в діалозі ім'я без розширення. В цьому випадку буде прийнято задане розширення.
Властивість Title дозволяє вам задати заголовок діалогового вікна. Якщо ця властивість не задана, вікно відкривається із заголовком, визначеним в системі. Але ви можете задати і свій заголовок, що підказує користувачеві очікувані дії. Наприклад, "Вкажіть ім'я файлу", що відкривається.
Властивість Options визначає умови вибору файлу (має безліч опцій) :
ofAllowMultiSelect |
Дозволяє користувачеві вибирати декілька файлів |
ofCreatePrompt |
У разі, якщо користувач написав ім'я неіснуючого файлу, з'являється зауваження і запит, чи потрібно створити файл із заданим ім'ям |
ofEnableIncludeNotify |
Дозволяє посилати в діалог повідомлення |
ofEnableSizing |
Дозволяє користувачеві змінювати розмір діалогового вікна |
ofExtensionDifferent |
Цей прапор, який можна прочитати після виконання діалогу, показує, що розширення файлу, вибраного користувачем, відрізняється від DefaultExt |
ofFileMustExist |
У разі, якщо користувач написав ім'я неіснуючого файлу, з'являється повідомлення про помилку |
ofHideReadOnly |
Видаляє з діалогу індикатор Відкрити тільки для читання |
ofNoChangeDir |
Після клацання користувача на кнопці OK відновлює поточний каталог, незалежно від того, який каталог був відкритий при пошуку файлу |
ofNoDereferenceLinks |
Забороняє перепризначувати клавіші швидкого доступу в діалоговому вікні |
ofNoLongNames |
Відображуються тільки не більше 8 символів імені і трьох символів розширення |
ofNoNetworkButton |
Прибирає з діалогового вікна кнопку пошуку в мережі. Діє тільки якщо прапор ofOldStyleDialog включений |
ofNoReadOnlyReturn |
Якщо користувач вибрав файл тільки для читання, то генерується повідомлення про помилку |
ofNoTestFileCreate |
Забороняє вибір в мережі захищених файлів і не доступних дисків при збереженні файлу |
ofNoValidate |
Не дозволяє писати в іменах файлів недозволені символи, але не заважає вибирати файли з недозволеними символами |
ofOldStyleDialog |
Створює діалог вибору файлу в старому стилі (см. рис. 8.4) |
ofOverwritePrompt |
У разі, якщо при збереженні файлу користувач написав ім'я існуючого файлу, з'являється зауваження, що файл з таким ім'ям існує, і запрошується бажання користувача переписати існуючий файл |
ofPathMustExist |
Генерує повідомлення про помилку, якщо користувач вказав в імені файлу неіснуючий каталог |
ofReadOnly |
За умовчанням встановлює індикатор Відкрити тільки для читання при відкритті діалогу |
ofShareAware |
Ігнорує помилки порушення умов колективного доступу і дозволяє, незважаючи на них, робити вибір файлу |
ofShowHelp |
Відображує в діалоговому вікні кнопку Довідка |
За умовчанням усі перераховані опції, окрім ofHideReadOnly, вимкнені. Але, як видно з їх опису, багато з них корисно включити перед викликом діалогів.
Якщо ви дозволяєте за допомогою опції ofAllowMultiSelect множинний вибір файлів, то список вибраних файлів можна прочитати у властивості Files типу TStrings.
У компонентах діалогів відкриття і збереження файлів передбачена можливість обробки ряду подій. Така обробка може потрібно, якщо розглянутих опцій, незважаючи на їх кількість, не вистачає, щоб встановити усі диктовані конкретним додатком обмеження на вибір файлів. Подія OnCanClose виникає при нормальному закритті користувачем діалогового вікна після вибору файлу. При відмові користувача від діалогу - натисненні кнопки Відміна, клавіші Esc і так далі подія OnCanClose не настає. У обробці події OnCanClose ви можете провести додаткові перевірки вибраного користувачем файлу і, якщо за умовами вашого завдання цей вибір недопустимий, ви можете сповістити про це користувача і задати значення false передаваному в обробник параметру CanClose. Це не дозволить користувачеві закрити діалогове вікно.
Можна також написати обробники подій OnFolderChange - зміна каталогу, OnSelectionChange - зміна імені файлу, OnTypeChange - зміна типу файлу. У цих обробниках ви можете передбачити якісь повідомлення користувачеві.
Тепер наведемо приклади використання діалогів OpenDialog і SaveDialog. Нехай ваш додаток включає вікно редагування Memo1, в яке по команді меню Відкрити ви хочете завантажувати текстовий файл, а після якихось змін, зроблених користувачем, - зберігати по команді Зберегти текст в тому ж файлі, а по команді Зберегти як.. - у файлі з іншим ім'ям.
Введіть на форму компоненти - діалоги OpenDialog і SaveDialog. Припустимо, що ви залишили їх імена за умовчанням - OpenDialog1 і SaveDialog1. Оскільки після читання файлу вам потрібно запам'ятати його ім'я, щоб знати під яким ім'ям потім його зберігати, ви можете визначити для цього імені змінну, назвавши її, наприклад, FName:
var FName: string;
Тоді обробка команди Відкрити може зводитися до наступного оператора:
if OpenDialog1.Execute then
begin
FName:= OpenDialog1.FileName;
Memo1.Lines.LoadFromFile(FName);
end;
Цей оператор викликає діалог, перевіряє, чи вибрав користувач файл (якщо вибрав, то функція Execute повертає true), після чого ім'я вибраного файлу (OpenDialog1.FileName) зберігається в змінній FName і файл завантажується в текст Memo1 методом LoadFromFile.
Обробка команди Зберегти виконується оператором
Memo1.Lines.SaveToFile(FName);
В даному випадку немає необхідності звертатися до якогось діалогу, оскільки ім'я файлу відоме: воно зберігається в змінній FName.
Обробка команди Зберегти як.. виконується операторами:
SaveDialog1.FileName:= FName;
if SaveDialog1.Execute then
begin
FName:= SaveDialog1.FileName;
Memo1.Lines.SaveToFile(FName);
end;
Перший з цих операторів привласнює властивості FileName компонента SaveDialog1 ім'я файлу, що запам'ятало. Це ім'я за умовчанням буде запропоновано користувачеві при відкритті діалогу Зберегти як... Наступний оператор відкриває діалог і, якщо користувач вибрав в нім файл, запам'ятовує нове ім'я файлу і зберігає у файлі з цим ім'ям текст компонента Memo1.
Список зображень - компонент ImageList
Компонент ImageList є набором зображень однакових розмірів, на які можна посилатися по індексах, що починаються з 0. В багатьох розглянутих раніше компонентах (меню, списках та ін.) зустрічалися властивості, що є посиланнями на компонент ImageList. Цей компонент дозволяє організувати ефективне і економне управління безліччю піктограм і бітових матриць. Він може включати монохромні бітові матриці, що містять маски для відображення прозорості мальованих зображень.
Зображення в компонент TImageList можуть бути завантажені в процесі проектування за допомогою редактора списків зображень (Мал. 1). Вікно редактора, представлене на малюнку викликається подвійним клацанням на компоненті TImageList або клацанням правої кнопки миші і вибором команди контекстного меню ImageList Editor.
Мал. 1 – Редактор списків зображень.
У вікні редактора списків зображень ви можете додати в списки зображення, користуючись кнопкою Add, видалити зображення із списку кнопкою Delete, очистити увесь список кнопкою Clear. При додаванні зображення в список відкривається звичайне вікно відкриття файлів зображень, в якому ви можете вибрати файл, що цікавить вас. Тільки врахуйте, що розмір усіх зображень в списку має бути однаковим. Як правило, це розмір, використовуваний для піктограм в меню, списках, кнопках. При додаванні в список зображень для кнопок потрібно мати на увазі, що вони часто містять не одне, а два і більше зображень.
Як видно з малюнку, кожне завантажене в список зображення отримує індекс. Саме на ці індекси згодом ви можете посилатися у відповідних властивостях розділів меню, списків, кнопок і так далі, коли вам потрібно завантажити в них те або інше зображення. Змінити послідовність зображень в списку ви можете просто перетягнувши зображення мишею на нове місце.
У редакторові списків зображень ви можете, виділивши те або інше зображення, встановити його властивості: Transparent Color і Fill Color. Але це можна робити тільки в тому сеансі роботи з редактором списків зображень, в якому завантажено це зображення. Для зображень, завантажених в попередніх сеансах, зміна цих властивостей неможлива.
Властивість Transparent Color визначає колір, який використовується в масці для прозорого малювання зображення. За умовчанням це колір лівого нижнього пікселя зображення. Для піктограм ця властивість встановлюється в clNone, оскільки піктограми вже масковані.
Властивість Fill Color визначає колір, використовуваний для заповнення порожнього простору при переміщенні і центруванні зображення. Для піктограм ця властивість встановлюється в clNone.
Група радіокнопок Options визначає спосіб розміщення зображення бітової матриці з розмірами, не відповідними розмірам, прийнятим в списку, :
Crop |
Відображується частина зображення, що поміщається в розмір списку, починаючи з лівого верхнього кута |
Stretch |
Розміри зображення змінюються, стаючи рівними розмірам списку. При цьому можливі спотворення |
Center |
Зображення центрується, а якщо його розмір більше розміру списку, то області, що не поміщаються, відсікаються |
Тепер розглянемо основні властивості TImageList :
Властивість |
Тип |
Опис |
Height |
Integer |
Висота зображень в списку |
Width |
Integer |
Ширина зображень в списку |
AllocBy |
Integer |
Визначає кількість зображень, на яку збільшується список для додавання нових зображень |
Count |
Integer |
Визначає число зображень в списку. Властивість тільки для читання |
Інші властивості визначають кольори і способи малювання зображення.