К зтим диалогам относятся компоненты OpenDialog (SaveDialog) и OpenPictureDialog (SavePictureDialog) .
Их основные свойства:
FileName – определяет имя выбранного файла
Filter - определяет маски файла (фильтры), доступные в диалоге.В процессе проектироваия это свойство задается с помощью редактора фильтров , который вызывается нажатием кнопки с многоточием возле имени этого свойства в Инспекторе объектов.
FilterIndex - определяет индекс фильтра по умолчанию при открытии диалога.
InitialDir - определяет каталог при открытии диалога.
DefaultExt - определяет заданное по умолчанию расширение файла.
Title –заголовок окна.
Options - различные опции компонента, которые определяют условия выбора файла.Например, свойство ofCreatePrompt выводит замечание и запрос на создание нового файла , если польэователь написал имя несуществующего файла.
В компонентах диалогов открытия и сохранения файлов предусмотрена возможность обработки ряда событий:
OnCanClose – возникает при нормальном закрытии пользователем окна после выбора файла..
OnFolderChange – наступает при изменении каталога.
OnSelectionChange – наступает при изменении имени файла.
OnShow - наступает, когда диалог открывается.
OnTypeChange – наступает при изменении типа файла.
Пример.Пусть приложение включает окно редактирования RichEdit1 и диалоги OpenDialog и SaveDialog. Тогда обработка команды Открыть, загружающей выбранный пользователем файл в RichEdit1, может сводиться к следующему:
AnsiString MyFName = " ";...
if (OpenDialog1->Execute())
{
MyFName = OpenDialog1->FileName;
RichEdit1->Lines->LoadFromFile(MyFName);
}
Этот блок операторов вызывает диалог и проверяет выбрал ли пользователь файл.Затем имя выбранного файла (OpenDialog1->FileName)сохраняется в переменнойMyFNameи файл загружается в текст RichEdit1методомLoadFromFile.
Обработка команды Сохранить как, сохраняющей текст окна RichEdit1 в выбранном пользователем файле, сводится к следующему:
//Задание имени по умолчанию
SaveDialog1->FileName = MyFName;
if (SaveDialog1->Execute())
{
MyFName = OpenDialog1->FileName;
RichEdit1->Lines->SaveToFile(MyFName);
}
Первый из этих операторов присваивает свойству FileNameкомпонентаSaveDialog1запомненное имя файла.Это имя по умолчанию будет предложено пользователю при открытии диалога Сохранить как .Следующий оператор открываетдиалогь и , если пользователь выбрал в нем , запоминает в новое имя файла и сохраняет в файле с этим именем текст компонента RichEdit1.
Обработка команды Сохранить, сохраняющей текст окна RichEdit1 в ранее открытом или, если текст не из файла, то в выбранном пользователем файле, сводится к следующему:
if (RichEdit1 ! = "")
RichEdit1->Lines->SaveToFile(MyFName);
Else
if(SaveDialog1->Execute())
{
MyFName = SaveDialog1->FileName;
RichEdit1->Lines->SaveToFile(MyFName);
}
Если имя файлаMyFNameне равно пустой строке , т.е. известно,то нет необходимости обращаться к диалогу. Текст сохраняется методом SaveToFile.Если же имя файла неизвестно , то текст сохраняется с помощью диалога SaveDialog1 так же , как было рассмотрено выше.
7.2 Диалог выбора шрифта(компонент FontDialog)
Этот компонент вызывает диалоговое окно выбора шрифта ,в котором пользовательможет выбрать имя ширфта ,его стиль(начертание), размеры и другие атрибуты.Основное свойство компонента – Font,в котором можно задать начальные установки атрибутов шрифта или прочесть значениея атрибутов, выбранные пользователем в процессе диалога.Свойства MaxFontSize и MinFontSize устанавливают ограничения на максимальный и минимальный размеры шрифта. По умолчанию значения этих свойств равны 0 ,при этом никакие ограничения не накладываются.Свойство Option содержит множество опций ,определяющих особенности отображения окна выбора атрибутов шрифта. По умолчанию все опции отключены кроме опции fdEffects , которая отображает индикаторы специальных эффектов (жирный шрифт,курсив ,подчеркивание и т.д.) и список цветов.
Фрагмент кода иллюстрирующего применениу компонента FontDialog при использовании в качестве окна редактирования компонентаRichEdit1имеет вид:
В данном фрагменте меняются атрибуты шрифта только выделенной части текста . При необходимости изменнять шрифт всего текста целесообразно использовать оператор:
If ( FontDialog1-> Execute())
RichEdit1->Font->Assign(FontDialog1->Font);
7.3 Диалог выбора цвета(компонент ColorDialog)
С помощью этого компонента вызывается диалоговое окно выбора цвета , в котором пользователь может выбрать цвет из базовой палитры.Основным свойством компонента является свойство Color , которое соответствует тому цвету , который выбрал в диалоге пользователь.Полученное значение цвета можно передать любому компонентному объекту , имеющему одноименное свойство.Например, следующий фрагмент кода приведет к окрашиванию фона компонента RichEdit1цветом, выбранным пользователем в диалогеColorDialog1.
Программный код приложения, иллюстрирующего примеры использования рассмотренных диалогов показан на рисунке 7.1.Интерфейс приложения содержит форму, на которой расположены семь кнопок типа(Button), многострочный редактор (RichEdit1)и диалоги: открытия и сохранения файлов(OpenDialog1 и SaveDialog1), выбора шрифтов (FontDialog1) и выбора цвета(ColorDialog1) .
//Программный код приложения по применению различных диалогов
Рис.7.1 Программный код примеров, иллюстрирующих работу диалоговых окон
Программный код данного приложения при нажатии соответствующих кнопок позволяет:
· Открыть файл;
· Запомнить файл со старым именем;
· Сохранить файл с новым именем;
· Изменить шрифт для выделенной части текста;
· Изменить шрифт всего текста;
· Изменить цвет фона многострочного редактора;
· Изменить цвета шрифта.
7.4Диалоги поиска и замены текста(компоненты FindDialog и ReplaceDialog)
Эти компоненты вызывают диалоги поиска и замены фрагментов текста..Обладают следующими основными свойствами:
FindText – определяет текст , заданный пользователем для поиска и замены .
ReplaceText – определяет в компоненте ReplaceDialog текст,который должен заменять FindText.
Options –множество опций , которые определяют особенности окон диалогов поиска и замены.
Сами по себе компоненты FindDialog и ReplaceDialog не осуществляют ни поиска, ни замены. Они только обеспечивают интерфейс с пользователем. А поиск и замену надо осуществлять программно. Для этого можно пользоваться событием OnFind, происходящим, когда пользователь нажал в диалоге кнопку Найти далее, и событием OnReplace, возникающим, если пользователь нажал кнопку Заменить или Заменить все. В событии OnReplaceузнать, какую именно кнопку нажал пользователь, можно по значениям флагов frReplace и frReplaceAll.
Пример1.Разработать программу поиска заданного фрагмента текста в компоненте Memo, с использованием диалога поиска. Интерфейс этой программы кроме формы будет содержать только кнопку с именем Button1 и многострочный редактор с именем Memo1.Программный код приложения, решающего поставленную задачу показан на рисунке 7.2 .
//Программный код приложения, позволяющего осуществлять поиск заданного фрагмента текста
Рис.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. .
//Программный код приложения, позволяющего осуществлять поиск и замену найденного фрагмента текста
Рис. 7.3Программный код приложения, позволяющего осуществлять поиск и замену найденного фрагмента текста
8. Файлы, используемые в проектах C++Builder
Проект (project) — это набор файлов, которые используются при создании автономного исполняемого файла или динамически компонуемой библиотеки (DLL).C++Builder управляет проектами с помощью нескольких вспомогательных файлов. Для нового проекта C++Builder создает следующие основные файлы:
1. Головной файл проекта.
2. Информационный файл проекта.
3. Файл реализации модуля.
4. Заголовочный файл модуля.
5. Файл формы.
6. Файл ресурсов приложения.
Головной файл проекта содержит функцию Win-Main( ),которая инициирует приложение и запускает его на выполнение. Имеет расширение (.срр).
Информационный файл проекта представляет собой текстовый файл, содержащий установленные опции компилятора, имена исходных файлов и форм, входящих в проект, а также имена необходимых библиотечных файлов Имеет расширение (.bpr).
Файл реализации модуля и Заголовочный файл модуля представляют собой текстовые файлы, содержащие программный код реализации модуля и заголовочный файл с описанием класса формы. Имеют расширения соответственно (.срр) и (.h). Среда C++Builder создает дополнительные файлы реализации и заголовочные файлы для каждой новой формы данного проекта.
Файл формы содержит информацию о формах приложения. Имеет расширение(.dfm).Каждому файлу формы соответствует файл реализации модуля .
Файл ресурсов приложения представляет собой двоичный файл, содержащий ресурсы проекта. Имеет расширение (.res).
Следующая группа файлов создается компилятором :
Исполняемый файл является автономным исполняемым файлом приложения. Имеет расширение (.exe) .
Объектный файл модуля представляет собой откомпилированный файл модуля, который компонуется в исполняемый файл. Имеет расширение (.obj) .
Файл таблицы символов представляет собой двоичный файл , используемый отладчиком в процессе отладки приложения. Имеет расширение (.tds) .
Файлы, создаваемые C++Builder, можно разделить на две категории: файлы, на основе которых строится проект, и файлы, создаваемые при компиляции и компоновке проекта. Если необходимо перенести все исходные файлы на другой компьютер, нужно будет переписать только те из них, которые C++Builder использует для построения приложения. Обычно исходные файлы имеют наименьший размер по сравнению с другими файлами проекта и не требуют много места при резервном копировании.
Файлы с расширениями .cpp, .h, .dfm и .bpr составляют минимальный набор. Все остальные файлы C++Builder создаст заново при построении программы. Информация о формах хранится в трех файлах : .dfm, cpp,и.h.В файле с расширением .dfmхранится информация о внешнем виде формы , ее размерах, местоположение на экране и т.п. Файл реализации модуля .cpp является основным файлом ,с которым работает проектировщик, так как в нем хранится программный код, соответствующий данной форме. В текстовом заголовочном файле с расширением .hхранится объявление класса формы. Весь основной текст этого файла C++Builder формирует автоматически по мере проектирования приложения.
Поскольку в любое приложение C++Builder включает несколько файлов, то при создании нового проекта рекомендуется :
· Для каждого нового проекта создавать новый каталог.
· Создавать новый проект командой File\New Application.
· Сразу сохранять проект и файл модуля командой File\Save All.