Діалоги відкриття і збереження файлів

До зтім діалогам відносяться компоненти OpenDialog (SaveDialog) і OpenPictureDialog (SavePictureDialog).

Їх основні властивості:

FileName - визначає ім'я обраного файлу

FilterIndex - визначає індекс фільтра за замовчуванням при відкритті діалогу.

InitialDir - визначає каталог при відкритті діалогу.

DefaultExt - про пределяет заданий за замовчуванням розширення файлу.

Title - заголовок вікна.

Options - різні опції компонента, які визначають умови вибору файла.Напрімер, властивість ofCreatePrompt виводить зауваження і запит на створення нового файлу. якщо польеователь написав ім'я неіснуючого файлу.

У компонентах діалогів відкриття і збереження файлів Можна оперувати ряду подій:

OnCanClose - виникає при нормальному закритті користувачем вікна після вибору файлу ..

OnFolderChange - настає при зміні каталогу.

OnSelectionChange - настає при зміні імені файлу.

OnShow - настає, коли діалог відкривається.

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

Приклад .Нехай додаток включає вікно редагування RichEdit1 і діалоги OpenDialog і SaveDialog. Тоді обробка команди Відкрити. завантажує вибраний користувачем файл в RichEdit1. може зводитися до наступного:

AnsiString MyFName = "";.

Цей блок операторів викликає діалог і перевіряє чи вибрав користувач файл.Затем ім'я обраного файлу (OpenDialog1-> FileName) зберігається в переменнойMyFName і файл завантажується в текст RichEdit1 методомLoadFromFile.

Обробка команди Зберегти як. зберігає текст вікна RichEdit1 в обраному користувачем файлі, зводиться до наступного:

Перший з цих операторів присвоює властивості FileName компонентаSaveDialog1 запомненное ім'я файла.Ето ім'я за замовчуванням буде запропоновано користувачу при відкритті діалогу Зберегти як Слід оператор откриваетдіалогь і. якщо користувач вибрав в ньому. запам'ятовує в нове ім'я файлу і зберігає у файлі з цим ім'ям текст компонента RichEdit1.

Обробка команди Зберегти. зберігає текст вікна RichEdit1 в раніше відкритому або, якщо текст не з файлу, то в обраному користувачем файлі, зводиться до наступного:

Якщо ім'я файлаMyFName не дорівнює порожній рядку. тобто відомо, то немає необхідності звертатися до діалогу. Текст зберігається методом SaveToFile. Якщо ж ім'я файлу невідомо. то текст зберігається за допомогою діалогу SaveDialog1 так само. як було розглянуто вище.

7.2 Діалог вибору шрифту (компонент FontDialog)

Цей компонент викликає діалогове вікно вибору шрифту, в якому Користувачі можуть вимкнути вибрати ім'я шірфта, його стиль (накреслення), розміри та інші атрібути.Основное властивість компонента - Font, в якому можна задати початкові установки атрибутів шрифту або прочитати значеніея атрибутів, вибрані користувачем в процесі діалогу .властивості MaxFontSize і MinFontSize встановлюють обмеження на максимальний і мінімальний розміри шрифту. За замовчуванням значення цих властивостей рівні 0, при цьому ніякі обмеження не накладиваются.Свойство Option містить безліч опцій, що визначають особливості відображення вікна вибору атрибутів шрифту. За замовчуванням всі опції відключені крім опції fdEffects. яка відображає індикатори спеціальних ефектів (жирний шрифт, курсив, підкреслення і т.д.) і список кольорів.

Фрагмент коду ілюструє застосування компонента FontDialog при використанні в якості вікна редагування компонентаRichEdit1 має вигляд:

If (FontDialog1-> Execute ())

У цьому фрагменті змінюються атрибути шрифту тільки виділеної частини тексту. При необхідності ізменнять шрифт всього тексту доцільно використовувати оператор:

If (FontDialog1-> Execute ())

7.3 Діалог вибору кольору (компонент ColorDialog)

За допомогою цього компонента викликається діалогове вікно вибору кольору. в якому користувач може вибрати колір з базової палітри.Основним властивістю компонента є властивість Color. яке відповідає тому кольору. який вибрав в діалозі пользователь.Полученное значення кольору можна передати будь-кому компонентного об'єкту. має однойменне свойство.Напрімер, наступний фрагмент коду призведе до фарбування фону компонента RichEdit1 кольором, вибраним користувачем в діалогеColorDialog1.

If (ColorDialog1-> Execute ())

// Програмний код додатку по застосуванню різних діалогів

#pragma resource "* .dfm"

AnsiString MyFName = ""; // Опис змінної

void __fastcall TForm1 :: Button1Click (TObject * Sender) // Відкрити файл

if (OpenDialog1-> Execute ()) // Відкриття діалогу OpenDialog1

MyFName = OpenDialog1-> FileName; // Присвоєння змінної імені файлу

void __fastcall TForm1 :: Button2Click (TObject * Sender) // Зберегти як

if (SaveDialog1-> Execute ()) // Відкриття діалогу SaveDialog1

RichEdit1-> Lines-> SaveToFile (MyFName); // Збереження файлу з заданим ім'ям

void __fastcall TForm1 :: Button3Click (TObject * Sender) // Зберегти

RichEdit1-> Lines-> SaveToFile (MyFName); // Зберегти якщо ім'я файлу задано

RichEdit1-> Lines-> SaveToFile (MyFName); // Зберегти як якщо ім'я файлу не задано

void __fastcall TForm1 :: Button4Click (TObject * Sender) // Зміна щріфта, виділеної частини тексту

if (FontDialog1-> Execute ()) // Виклик діалогу FontDialog1

void __fastcall TForm1 :: Button5Click (TObject * Sender) // Зміна атрибутів щріфта у всьому тексті

void __fastcall TForm1 :: Button7Click (TObject * Sender) // Зміна кольору фону шрифту

Рис.7.1 Програмний код прикладів, що ілюструють роботу діалогових вікон

Програмний код цього додатка при натисканні відповідної кнопки дозволяє:

· Запам'ятати файл зі старим іменем;

· Зберегти файл з новим ім'ям;

· Змінити шрифт для виділеної частини тексту;

· Змінити шрифт всього тексту;

· Змінити колір шрифту.

7.4Діалогі пошуку і заміни тексту (компоненти FindDialog і ReplaceDialog)

Ці компоненти викликають діалоги пошуку і заміни фрагментів текста..Обладают наступними основними властивостями:

FindText - визначає текст. заданий користувачем для пошуку і заміни.

ReplaceText - визначає в компоненті ReplaceDialog текст, який повинен замінювати FindText.

Options - безліч опцій. які визначають особливості вікон діалогів пошуку і заміни.

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

// Програмний код додатку, що дозволяє здійснювати пошук заданого фрагмента тексту

#pragma resource "* .dfm"

void __fastcall TForm1 :: Button1Click (TObject * Sender)

// Завдання початкового тексту пошуку в Memo

FindDialog1-> FindText = Memo1-> SelText; //Виділення тексту

FindDialog1-> Execute (); // Виклик діалогу пошуку

void __fastcall TForm1 :: FindDialog1Find (TObject * Sender)

E - кількість символів від першої позиції пошуку докінця тексту

F = S + "кол. Символів виділ. Фрагмента" + "індекс першого символу виділеного

фрагмента при черговому пошуку "* /

на величину символів виділеного фрагмента тексту * /

S + = Memo1-> SelLength; // Нарощування S на кол. символів виділеного фрагмента

/ * SubString (S + 1, E) - Функція повертає частину тексту, що починається з S + 1

символу і до кінця тексту,

LowerCase () - Функція повертає рядок в якій всі символи наведені

до нижнього регістра,

Pos (FindDialog-> FindTextA.LowerCase ()) - Функція, яка повертає індекс

Якщо фрагмент не знайдений, повертається 0 * /

if (F! = S) // Якщо фрагмент знайдена

else ShowMessage ( "текст '" + FindDialog1-> FindTextA + "' більш не найден");

Рис.7.2 програмний код додатка, що дозволяє здійснювати пошук заданого фрагмента тексту

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

Функція LowerCase () - повертає рядок в якій всі символи приведені до нижнього регістру.

Функція SabString () - використовується для отримання фрагментів рядка Memo1. Ця функція повертає підрядок. що починається з символу в позиції, заданої першим параметром функції, і містить число символів. що не перевищує значення. заданий другим параметром функції. Таким чином, вираз Memo1-> Text.SubString (S + 1, E) возвращаетчасть тексту. починається Сs + 1 сімволаі до кінця тексту.

ФункціяPos () - шукає в рядку. до якої вона може бути застосована (в нашому випадку Memo1-> Text.SubString (S + 1, E)) перше входження підрядка. заданий її параметром (в нашому випадку FindTextA). Якщо пошук успішний. функція повертає індекс першого символу знайденого входження підрядка. Рахунок індексів починається з одиниці, якщо ж підрядок не знайдено. повертається 0.

Приклад 2. Розробити програму пошуку і заміни знайденого фрагмента тексту в компоненті Memo. з використанням діалогу замени- ReplaceDialog. Інтерфейс цієї програми буде містити ті ж елементи, що і в прімере1.Программний код додатка, вирішального поставлену задачу, показаний на малюнку 7.3.

// Програмний код додатку, що дозволяє здійснювати пошук і заміну знайденого фрагмента тексту

#pragma resource "* .dfm"

void __fastcall TForm1 :: Button1Click (TObject * Sender)

Memo1-> SelStart = 0; // Переклад курсора в початок тексту

// Завдання початкового тексту пошуку в Memo

ReplaceDialog1-> Execute (); // Виклик діалогу заміни

void __fastcall TForm1 :: ReplaceDialog1Find (TObject * Sender)

E - кількість символів від першої позиції пошуку докінця тексту

F = S + "кол. Символів виділ. Фрагмента" + "індекс першого символу виділеного

фрагмента при черговому пошуку "* /

на величину символів виділеного фрагмента тексту * /

S + = Memo1-> SelLength; // Нарощування S на кол. символів виділеного фрагмента

/ * SubString (S + 1, E) - Функція повертає частину тексту, що починається з S + 1

символу і до кінця тексту,

LowerCase () - Функція повертає рядок в якій всі символи наведені

до нижнього регістра,

Pos (FindDialog-> FindTextA.LowerCase ()) - Функція, яка повертає індекс

Якщо фрагмент не знайдений, повертається 0 * /

if (F! = S) // Якщо фрагмент знайдений

else ShowMessage ( "текст '" + ReplaceDialog1-> FindTextA + "' більш не найден");

void __fastcall TForm1 :: ReplaceDialog1Replace (TObject * Sender)

if (Memo1-> SelText! = "") // Якщо в Memo1 не порожня рядок

// Заміна знайденого фрагмента тексту

// Заміна фрагментів по всьому тексту

ShowMessage ( "фрагмент" + ReplaceDialog1-> FindTextA + "шукати далі");

Мал. 7.3 Програмний код додатку, що дозволяє здійснювати пошук і заміну знайденого фрагмента тексту

8. Файли, які використовуються в проектах C ++ Builder

Проект (project) - це набір файлів, які використовуються при створенні автономного виконуваного файлу або динамічно компо-нуемой бібліотеки (DLL) .C ++ Builder управляє проектами за допомогою декількох котельно-них файлів. Для нового проекту C ++ Builder створює такі основні файли:

1. Головний файл проекту.

2. Інформаційний файл проекту.

3. Файл реалізації модуля.

4. Заголовний файл модуля.

6. Файл ресурсів програми.

Головний файл проекту містить функцію Win-Main (), яка ініціює програми та запускає його на виконання. Має розширення (.срр).

Інформаційний файл проекту являє собою текстовий файл, який містить задані параметри компілятора, імена вихідних файлів і форм, що входять в про-ект, а також імена необхідних бібліотечних файлів Має розширення (.bpr).

Файл реалізації модуля і Заголовний файл модуля є текстові файли, що містять програмний код реалізації модуля та заголовки з описом класу форми. Мають розширення відповідно (.срр) і (.h). Середовищі C ++ Builder створює додаткові файли реалізації і заго-ловочние файли для кожної нової форми даного проекту.

Файл форми містить інформацію про форми додатка. Має розширення (.dfm). Кожному файлу форми відповідає файл реалізації модуля.

Файл ресурсів програми є двійковий файл, який містить ресурси проекту. Має розширення (.res).

Наступна група файлів створюється компілятором:

Виконуваний файл є автономним виконуваним файлом програми. Має розширення (.exe).

Об'єктний файл модуля являє собою відкомпільований файл модуля, який компонується в виконуваний файл. Має розширення (.obj).

Файл таблиці символів є двійковий файл. використовуваний отладчиком в процесі налагодження програми. Має розширення (.tds).

Оскільки в будь-який додаток C ++ Builder включає кілька файлів, то при створенні нового проекту рекомендується:

· Для кожного нового проекту створювати новий каталог.

· Створювати новий проект командою File \ New Application.

· Відразу зберігати проект і файл модуля командою File \ Save All.