Системні діалоги 10 Системні діалоги Діалоги роботи з файлами - компоненти OpenDialog,

TOpenDialog (TSaveDialog) та TOpenPictureDialog (TSavePictureDialog) відображають модальні діалогові вікна Windows для відкриття (збереження) файлів. Компоненти TOpenDialog та TSaveDialog працюють із файлами будь-якого типу, а компоненти TOpenPictureDialog та TSavePictureDialog - з файлами зображень.

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

FileName– Ім'я вибраного файлу. Основна властивість, в якій повертається у вигляді рядка вибраний користувачем файл. Значення цієї властивості можна задати перед зверненням до діалогу. Тоді воно з'явиться у діалозі як значення за замовчуванням у вікні Ім'я файлу

Після виходу з вікна редагування фільтрів вказані вами шаблони з'являться у властивості Filter у вигляді рядка. Наприклад:

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

У цьому рядку тексти та шаблони поділяються вертикальними лініями. В аналогічному вигляді, якщо потрібно, можна задавати властивість Filter програмно під час виконання програми.

Єдина відмінність OpenPictureDialog та SavePictureDialog від OpenDialog та SaveDialog - задане значення за умовчанням властивості Filter. У цих компонентах задані такі фільтри:

JPEG Image File (*.jpg)

JPEG Image File (*.jpeg)

Enhanced Metafiles (*.emf)

У цих фільтрах перелічені всі типи графічних файлів, із якими можна працювати. Отже, вам залишається видалити, якщо хочете, фільтри тих файлів, з якими ви не хочете працювати, додати, можливо, фільтр "Всі файли (*.*)" і перекласти українською мовою назви типів.

FilterIndex– визначає номер фільтра, який буде за промовчанням показаний користувачеві в момент відкриття діалогу. Наприклад, значення FilterIndex = 1 задає за промовчанням перший фільтр.

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

DefaultExt– Визначає за промовчанням розширення файлу. Якщо значення цієї властивості не встановлено, користувач повинен вказати в діалозі повне ім'я файлу з розширенням. Інакше мається на увазі файл без розширення. Якщо ж встановити значення DefaultExt, то користувач може писати в діалозі ім'я без розширення. І тут буде прийнято задане розширення. Якщо при заданому DefaultExt користувач напише ім'я файлу з розширенням, то вплив DefaultExt залежить від того, чи зареєстровано написане користувачем розширення в системі. Якщо зареєстровано, воно збережеться. А якщо не зареєстровано, то до нього додасться розширення за умовчанням. Так що при збереженні з'явиться файл із двома розширеннями, наприклад, "file.ttt.txt".

Title-задає заголовок діалогового вікна. Якщо ця властивість не задано, вікно відкривається із заголовком, визначеним у системі. Але ви можете задати і свій заголовок,що підказує користувачеві очікувані дії. Наприклад, "Вкажіть ім'я файлу, що відкривається".

Options– Різні опції компонента

OfAllowMultiSelect– Дозволяє користувачеві вибирати кілька файлів

OfCreatePrompt– У випадку, якщо користувач написав ім'я неіснуючого файлу, з'являється зауваження та запит, чи потрібно створити файл із заданим ім'ям

OfEnableIncludeNotify–Дозволяє надсилати в діалог повідомлення

OfEnableSizing– Дозволяє користувачеві змінювати розмір діалогового вікна

OfExtensionDifferent– Цей прапор, який можна прочитати після виконання діалогу, показує, що розширення файлу, вибраного користувачем, відрізняється від DefaultExt

OfFileMustExist– У випадку, якщо користувач написав ім'я неіснуючого файлу, з'являється повідомлення про помилку

OfHideReadOnly–Видаляє з діалогу індикатор Відкрити тільки для читання

OfNoChangeDir– Після клацання користувача на кнопці OK відновлює поточний каталог, незалежно від того, який каталог був відкритий при пошуку файлу

OfNoDereferenceLinks– Забороняє перепризначати клавіші швидкого доступу в діалоговому вікні

OfNoLongNames– Відображаються лише не більше 8 символів імені та трьох символів розширення

OfNoNetworkButton –Забирає з діалогового вікна кнопку пошуку в мережі. Діє тільки якщо прапор ofOldStyleDialog включений

OfNoReadOnlyReturn– Якщо користувач вибрав файл тільки для читання, то генерується повідомлення про помилку

OfNoTestFileCreate– Забороняє вибір у мережі захищених файлів та недоступних дисків при збереженні файлу

OfNoValidate– Не дозволяє писати в іменах файлів невирішені символи, але не заважає вибирати файли зневирішеними символами

OfOldStyleDialog– Створює діалог вибору файлу у старому стилі

OfOverwritePrompt– У випадку, якщо при збереженні файлу користувач написав ім'я існуючого файлу, з'являється зауваження, що файл з таким ім'ям існує і запитує бажання користувача переписати існуючий файл

OfPathMustExist– Генерує повідомлення про помилку, якщо користувач вказав у імені файлу неіснуючий каталог

OfReadOnly– За замовчуванням встановлює індикатор Відкрити тільки для читання під час відкриття діалогу

OfShareAware– Ігнорує помилки порушення умов колективного доступу та дозволяє, незважаючи на них, робити вибір файлу

OfShowHelp– Відображає у діалоговому вікні кнопку Довідка

За замовчуванням всі перелічені опції, крім HideReadOnly, вимкнені. Але, як видно з їхнього опису, багато з них корисно включити перед викликом діалогів.

Якщо ви дозволяєте за допомогою опції множинний вибір файлу, то список вибраних файлів можна прочитати як Files типу TStrings.

Незважаючи на безліч опцій у якостіOptions,їх починає не вистачати в міру розвитку Windows. Тому, починаючи з Delphi 6, в діалоги введено ще одну властивість -OptionsEx. Це безліч, до якої в міру розвитку Windows та Delphi будуть включатися нові опції. ПокиOptionsExмістить лише одну опцію:

ofExPlacesBar– Забороняє появу в діалозі смуги, що забезпечує доступ до папок Історія, Робочий стіл тощо.

OnCanClose– виникає при нормальному закритті користувачем діалогового вікна після вибору файлу. У разі відмови користувача від діалогу - натискання кнопки Скасувати, клавіші Esc і т.д. подія OnCanClose не настає. Заголовок обробника:

procedure TForm1.OpenDialog1CanClose(Sender: TObject; var CanClose: Boolean);

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

OnFolderChange- зміна каталогу,

procedure TForm1.OpenDialog1FolderChange(Sender: TObject);

OnSelectionChange- зміна імені файлу,

procedure TForm1.OpenDialog1SelectionChange(Sender: TObject);

OnTypeChange- зміна типу файлу.

procedure TForm1.OpenDialog1TypeChange(Sender: TObject);

У цих обробниках ви можете передбачити повідомлення користувача.

Прикладивикористання діалогів OpenDialog та SaveDialog

Нехай ваш додаток включає вікно редагування Memo1, в яке за командою меню "Відкрити" (або при натисканні на кнопку "Відкрити") ви хочете завантажувати текстовий файл, а після якихось змін, зроблених користувачем, - зберігати за командою "Зберегти" текст у тому ж файлі, а за командою "Зберегти як" - у файлі з іншим ім'ям.

Введіть на форму компоненти - діалогиOpenDialog та SaveDialog.Припустимо, що ви залишили їх імена за умовчанням -OpenDialogl і SaveDialogl.

Оскільки після читання файлу вам потрібно запам'ятати його ім'я, щоб знати, під яким ім'ям потім його зберігати, ви можете визначити для цього імені змінну, назвавши її, наприклад,FName:

Тоді обробка команди Відкрити може зводитися до наступного оператора:

Цей оператор викликає діалог, перевіряє, чи вибрав користувач файл (якщо вибрав,то функціяExecuteповертаєtrue),після чого ім'я вибраного файлу(OpenDialogl. File Name)зберігається в змінній FName і файл завантажується в текстMemolметодомLoadFromFile.

Обробка команди Зберегти виконується оператором

У даному випадку немає необхідності звертатися до якогось діалогу, оскільки

ім'я файлу відомо: воно зберігається в змінній FName.

Обробка команди Зберегти як. виконується операторами:

Перший із цих операторів надає властивостіFileNameкомпонентаSaveDialoglзапам'ятоване ім'я файлу. Це ім'я за промовчанням буде запропоновано користувачеві при відкритті діалогу Зберегти як. Наступний оператор відкриває діалог і, якщо користувач вибрав файл, запам'ятовує нове ім'я файлу і зберігає у файлі з цим ім'ям текст компонентаMemol.