
- •Лекція №11
- •Системні діалоги
- •1. Загальна характеристика компонентів діалогів
- •2. Діалоги відкриття і збереження файлів — компоненти OpenDlalog, SaveDlalog, OpenPictureDialog, SavePictureDialog
- •3. Фрагменти діалогів — компоненти DriveComboBox, DirectoryListBox, FilterComboBox, FileListBox і cDirectoryOutline
- •Діалог вибору шрифту — компонент FontDialog
- •Діалоги вибору кольору — компоненти ColorDialog і ColorBox
- •Діалоги друку і установки принтера — компоненти PrintDialog і PrinterSetupDialog
- •Діалоги пошуку і заміни тексту — компоненти FindDialog і ReplaceDialog
2. Діалоги відкриття і збереження файлів — компоненти OpenDlalog, SaveDlalog, OpenPictureDialog, SavePictureDialog
Компоненти OpenDialog — діалог «Відкрити файл» і SaveDialog — діалог «Зберегти файл як...», використовуються найчастіше, в більшості програм.
Всі властивості цих компонентів однакові, тільки їх зміст різний для відкриття і збереження файлів. Основна властивість, в якій повертається у вигляді рядка вибраний користувачем файл, — FileName. Значення цієї властивості можна задати і перед зверненням до діалогу. Тоді воно з'явиться в діалозі як значення за умовчанням у полі Ім'я файлу.
Типи файлів, що з'являються в діалозі у випадному списку Тип файлу, задаються властивістю Filter. В процесі проектування цю властивість простіше всього задати за допомогою редактора фільтрів, який викликається натисненням кнопки з багатокрапкою біля імені цієї властивості в Інспекторі Об'єктів. При цьому відкривається вікно редактора фільтру. У його лівій панелі Fiter Name ви записуєте той текст, який побачить користувач у випадному списку Тип файлу діалогу. А в правій панелі Filter записуються розділені крапками з комою шаблони фільтру. Наприклад два фільтри: текстових файлів з розширеннями .txt і .doc і будь-яких файлів з шаблоном *.*.
Після виходу з вікна редагування фільтрів задані вами шаблони з'являться у властивості Filter у вигляді рядка вигляду. У аналогічному вигляді, якщо потрібно, можна задавати властивість Filter програмно під час виконання застосування.
Властивість FilterІndex визначає номер фільтру, який буде за умовчанням показаний користувачу у момент відкриття діалогу. Наприклад, значення FilterIndex = 1 задає за умовчанням перший фільтр.
Властивість InitialDir визначає початковий каталог, який буде відкритий у момент початку роботи користувача з діалогом. Якщо значення цієї властивості не задане, то відкривається поточний каталог або той, який був відкритий при останньому зверненні користувача до відповідного діалогу в процесі виконання даного застосування.
Властивість DefaultExt визначає значення розширення файлу за умовчанням. Якщо значення цієї властивості не задане, користувач повинен вказати в діалозі повне ім'я файлу з розширенням. Якщо ж задати значення DefaultExt, то користувач може писати в діалозі ім'я без розширення. В цьому випадку буде прийняте задане розширення.
Властивість Title дозволяє вам задати заголовок діалогового вікна. Якщо ця властивість не задана, вікно відкривається із заголовком, визначеним в системі (наприклад, «Зберегти як»). Але ви можете задати і свій заголовок, що підказує користувачу очікувані дії. Наприклад, «Вкажіть ім'я і тип файлу, що зберігається».
Властивість Options визначає умови вибору файлу. Набір основних опцій, які ви можете встановити програмно або під час проектування, включає:
ofAllowMultiSelect - дозволяє користувачу вибирати декілька файлів;
ofCreatePrompt - у випадку, якщо користувач написав ім'я неіснуючого файлу, з'являється зауваження і запит, чи треба створити файл із заданим ім'ям;
ofHideReadOnly – відображує в діалоговому вікні індикатор «Тільки для читання»;
ofEnableІncludeNotify – дозволяє переслати у діалог повідомлення;
ofEnableSizing - дозволяє користувачу змінювати розмір діалогового вікна;
ofShowHelp - відображує в діалоговому вікні кнопку Довідка.
За умовчанням всі перераховані опції у властивостях Options і OptionsEx, окрім ofHideReadOnly, вимкнені. Але, як видно з їх опису, багато з них корисно включити перед викликом діалогів.
У компонентах діалогів відкриття і збереження файлів передбачена можливість обробки ряду подій. Така обробка потрібна, якщо розглянутих опцій, не вистачає, щоб встановити всі обмеження на вибір файлів. Подія OnCanClose виникає при нормальному закритті користувачем діалогового вікна після вибору файлу. При відмові користувача від діалогу — натисненні кнопки Відміна, клавіші Esc і т.д. подія OnCanClose не наступає. У обробці події OnCanClose ви можете провести додаткові перевірки вибраного користувачем файлу і, якщо за умовами завдання цей вибір недопустимий, ви можете сповістити про це користувача і задати значення false параметру CanClose, це не дозволить користувачу закрити діалогове вікно.
Можна також написати обробники подій OnFolderChange — зміна каталога, OnSelectionChange — зміна імені файлу, OnTypeChange — зміна типу файлу. У цих обробниках ви можете передбачити якісь повідомлення користувачу.
Тепер приведемо приклад використання діалогів OpenDialog і SaveDialog. Наприклад застосування включає вікно редагування RichEdit1 в яке по команді меню MainMenu «Відкрити» ви хочете завантажувати текстовий файл і після якихось змін, зроблених користувачем, — зберігати текст по команді Зберегти в тому ж файлі, а по команді Зберегти як — у файлі з іншим ім'ям.
Введіть на форму компоненти — діалоги OpenDialog і SaveDialog. Припустимо, що ви залишили їх імена за умовчанням — OpenDialog1 і SaveDialog1.
Оскільки після читання файлу вам треба запам'ятати його ім'я, щоб знати, під яким ім'ям потім його зберігати, ви можете визначити для цього імені змінну, назвавши її, наприклад, MyFName. Для цього в модулі форми оголосите цю глобальну змінну:
AnsiString MyFName = " ";
Тоді обробка команди Відкрити може зводитися до наступного оператора:
if (OpenDialog1->Execute())
{
MyFName = OpenDialog1->FileName;
RichEdit1->Lines->LoadFromFile(OpenDialogl->FileName);
}
Цей оператор викликає діалог, перевіряє, чи вибрав користувач файл (якщо вибрав, то функція Execute повертає true), після чого ім'я вибраного файлу (OpenDialog1->FileName) зберігається в змінній MyFName і файл завантажується в текст RichEdit1 методом LoadFromFile.
Обробка команди Зберегти як виконується операторами:
SaveDialog1->FileName = MyFName;
if (SaveDialog1->Execute())
{
MyFName = SaveDialog1->FileName;
RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
}
Перший з цих операторів привласнює властивості FileName компоненту SaveDialog1 ім'я файлу. Це ім'я за умовчанням буде запропоновано користувачу при відкритті діалогу Зберегти як. Наступний оператор відкриває діалог і, якщо користувач вибрав в ньому файл, запам'ятовує нове ім'я файлу і зберігає у файлі з цим ім'ям текст компоненту RichEdit1.
Обробка команди Зберегти виконується операторами
if (MyFName != "")
RichEdit1->Lines->SaveToFile(MyFName);
else if(SaveDialog1->Execute())
{
MyFName = SaveDialog1->FileName;
RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
}
Якщо ім'я файлу MyFName не дорівнює порожньому рядку, тобто відомо, то немає необхідності звертатися до якогось діалогу. Текст зберігається методом SaveToFile.
Якщо ж ім'я файлу невідомо, то текст зберігається за допомогою діалогу SaveDialog1 так само, як було розглянуто вище.
Ми розглянули діалоги відкриття і збереження файлів довільного типа. У бібліотеці C++Builder є також спеціалізовані діалоги відкриття і закриття графічних файлів: OpenPictureDialog і SavePictureDialog, вони відрізняються зручною можливістю проглядати зображення в процесі вибору файлу.
Властивості компонентів OpenPietureDialog і SavePictureDialog нічим не відрізняються від властивостей компонентів OpenDialog і SaveDialog. Єдина відмінність — задані значення розширень типових графічних файлів за умовчанням для властивості Filter.