русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Диалоги открытия и сохранения файлов


Дата добавления: 2014-11-27; просмотров: 1533; Нарушение авторских прав


К зтим диалогам относятся компоненты 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->SelAttributes->Assign(FontDialog1->Font);

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

If ( FontDialog1-> Execute())

RichEdit1->Font->Assign(FontDialog1->Font);

7.3 Диалог выбора цвета(компонент ColorDialog)

С помощью этого компонента вызывается диалоговое окно выбора цвета , в котором пользователь может выбрать цвет из базовой палитры.Основным свойством компонента является свойство Color , которое соответствует тому цвету , который выбрал в диалоге пользователь.Полученное значение цвета можно передать любому компонентному объекту , имеющему одноименное свойство.Например, следующий фрагмент кода приведет к окрашиванию фона компонента RichEdit1цветом, выбранным пользователем в диалогеColorDialog1.

If (ColorDialog1-> Execute())

RichEdit1->Color = ColorDialog1->Color;

//---------------------------------------------------------------------------

Программный код приложения, иллюстрирующего примеры использования рассмотренных диалогов показан на рисунке 7.1.Интерфейс приложения содержит форму, на которой расположены семь кнопок типа(Button), многострочный редактор (RichEdit1)и диалоги: открытия и сохранения файлов(OpenDialog1 и SaveDialog1), выбора шрифтов (FontDialog1) и выбора цвета(ColorDialog1) .

 

//Программный код приложения по применению различных диалогов

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

AnsiString MyFName="";//Описание переменной

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)//Открыть файл

{

if(OpenDialog1->Execute())//Открытие диалога OpenDialog1

{

MyFName= OpenDialog1->FileName;//Присвоение переменной имени файла

RichEdit1->Lines->LoadFromFile(MyFName);//Загрузка файла с заданным именем в текстовый редактор

}

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1::Button2Click(TObject *Sender)//Сохранить как

{

SaveDialog1->FileName=MyFName;

if(SaveDialog1->Execute())//Открытие диалога SaveDialog1

{

MyFName= SaveDialog1->FileName;

RichEdit1->Lines->SaveToFile(MyFName);// Сохранение файла с заданным именем

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)//Сохранить

{

if(MyFName!="")

RichEdit1->Lines->SaveToFile(MyFName);//Сохранить если имя файла задано

else if(SaveDialog1->Execute())

{

MyFName= SaveDialog1->FileName;

RichEdit1->Lines->SaveToFile(MyFName); //Сохранить как если имя файла не задано

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)//Изменение щрифта, выделенной части текста

{

if(FontDialog1->Execute()) //Вызов диалога FontDialog1

RichEdit1->SelAttributes->Assign( FontDialog1->Font); Изменение атрибутов щрифта в выделенной части текста редактора RichEdit1.

}

//---------------------------------------------------------------------------

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

{

if(FontDialog1->Execute())

RichEdit1->Font->Assign( FontDialog1->Font);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)//Изменение цвета фона редактора

{

if(ColorDialog1->Execute())

RichEdit1->Color=ColorDialog1->Color;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button7Click(TObject *Sender) //Изменение цвета фона шрифта

{

if(ColorDialog1->Execute())

RichEdit1->Font->Color=ColorDialog1->Color;

}

//------------------------------------------------------------------

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

Программный код данного приложения при нажатии соответствующих кнопок позволяет:

· Открыть файл;

· Запомнить файл со старым именем;

· Сохранить файл с новым именем;

· Изменить шрифт для выделенной части текста;

· Изменить шрифт всего текста;

· Изменить цвет фона многострочного редактора;

· Изменить цвета шрифта.

 

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

Эти компоненты вызывают диалоги поиска и замены фрагментов текста..Обладают следующими основными свойствами:

FindText – определяет текст , заданный пользователем для поиска и замены .

ReplaceText – определяет в компоненте ReplaceDialog текст,который должен заменять FindText.

Options –множество опций , которые определяют особенности окон диалогов поиска и замены.

Сами по себе компоненты FindDialog и ReplaceDialog не осуществляют ни поиска, ни замены. Они только обеспечивают интерфейс с пользователем. А поиск и замену надо осуществлять программно. Для этого можно пользоваться событием OnFind, происходящим, когда пользователь нажал в диалоге кнопку Найти далее, и событием OnReplace, возникающим, если пользователь нажал кнопку Заменить или Заменить все. В событии OnReplaceузнать, какую именно кнопку нажал пользователь, можно по значениям флагов frReplace и frReplaceAll.

Пример1.Разработать программу поиска заданного фрагмента текста в компоненте Memo, с использованием диалога поиска. Интерфейс этой программы кроме формы будет содержать только кнопку с именем Button1 и многострочный редактор с именем Memo1.Программный код приложения, решающего поставленную задачу показан на рисунке 7.2 .

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

#include <vcl.h>

#pragma hdrstop

#include "P1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

//Задание начального текста поиска в Memo

FindDialog1->FindText=Memo1->SelText; //Выделение текста

FindDialog1->Execute(); //Вызов диалога поиска

ShowMessage("Выделен текст"+FindDialog1->FindText);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FindDialog1Find (TObject *Sender)

{

/*S - адрес первого символа выделенного текста от началоа тексата

E - количество символов от первой позиции поиска доконца текста

F =S+ "кол. символов выдел. фрагмента"+"индекс первого символа выделенного

фрагмента при очередном поиске"*/

int F,S,E;

S=Memo1->SelStart;//Присвоение начального адреса

if(Memo1->SelLength)

/*Если фрагмент выделен (его длина SeelLength>0) начальный адрес наращивается

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

ShowMessage("Длина="+IntToStr(Memo1->SelLength));

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

E=Memo1->Text.Length()-S;

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

символа и до конца текста,

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

к нижнему регистру,

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

Если фрагмент не найден, возвращается 0*/

F=S+Memo1->Text.SubString(S+1,E).LowerCase().

Pos(FindDialog1->FindTextA.LowerCase());

if(F!=S)//Если фрагмент найдена

{

Memo1->SetFocus();

Memo1->SelStart=F-1;//Присвоение нового начального адреса

Memo1->SelLength=FindDialog1->FindTextA.Length();//Выделение фрагмента

//найденного текста

}

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. .

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

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

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

//Задание начального текста поиска в Memo

ReplaceDialog1->FindText=Memo1->SelText;//Выделение текста

ReplaceDialog1->Execute();//Вызов диалога замены

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ReplaceDialog1Find(TObject *Sender)

{ /*S - адрес первого символа выделенного текста от началоа тексата

E - количество символов от первой позиции поиска доконца текста

F =S+ "кол. символов выдел. фрагмента"+"индекс первого символа выделенного

фрагмента при очередном поиске"*/

int F,S,E;

S=Memo1->SelStart;//Присвоение начального адреса

if(Memo1->SelLength)

/*Если фрагмент выделен (его длина SeelLength>0) начальный адрес наращивается

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

//ShowMessage("Длина="+IntToStr(Memo1->SelLength));

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

E=Memo1->Text.Length()-S;

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

символа и до конца текста,

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

к нижнему регистру,

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

Если фрагмент не найден, возвращается 0*/

F=S+Memo1->Text.SubString(S+1,E).LowerCase().

Pos(ReplaceDialog1->FindTextA.LowerCase());

if(F!=S)//Если фрагмент найден

{

Memo1->SetFocus();

Memo1->SelStart=F-1;//Присвоение нового начального адреса

Memo1->SelLength=ReplaceDialog1->FindTextA.Length();//Выделение фрагмента

//найденного текста

}

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

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ReplaceDialog1Replace(TObject *Sender)

{

if(Memo1->SelText!="") //Если в Memo1 не пустая строка

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

Memo1->SelText=ReplaceDialog1->ReplaceTextA;

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

if(ReplaceDialog1->Options.Contains(frReplaceAll))

{

Memo1->SelStart+=ReplaceDialog1->ReplaceTextA.Length();

ReplaceDialog1Find(Sender);

}

else

{

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

return;

}

}

//---------------------------------------------------------------------------

Рис. 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.

 



<== предыдущая лекция | следующая лекция ==>
Системные диалоги | Структура головного файла проекта


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.02 сек.