Для установки компонентов TOpenDialog и TSaveDialog на форму необходимо на странице Dialogs палитры компонентов щелкнуть мышью соответственно по пиктограммам или и поставить их в любое свободное место формы.
Установка фильтра производится следующим образом. Выбрав соответствующий компонент, дважды щелкнуть по правой части свойства Filter инспектора объектов. Появится окно Filter Editor, в левой части которого записывается текст, характеризующий соответствующий фильтр, а в правой части – маска.
Для OpenDialo g 1 установите значения маски, как показано на рисунке 14.2. Фильтр*.dat означает, что будут видны все файлы с расширением dat, а фильтр *.* – что будут видны все файлы (с любым именем и с любым расширением).
Рисунок 14.2 – Установка свойства Filter
Для того чтобы файл автоматически записывался с расширением dat, в свойстве DefaultExt необходимо записать требуемое расширение – dat.
Аналогичным образом настраивается SaveDialog1 (расширение dat).
Работа с программой
После запуска программы на выполнение на экране появится диалоговое окно программы (рисунок 14.3), содержащую главное меню и панель с кнопками быстрого доступа к функциям, а также таблицу для ввода данных.
Кнопка «Новый» создает новую таблицу-ведомостью. Открыть ранее созданный позволяет нажатие кнопки «Открыть». Кнопка «Добавить» добавляет строку в таблицу, а «Удалить» удаляет выбранную. Кнопка «Сохранить» позволяет сохранить данные в файл.
Рисунок 14.3 – Внешний вид программы
# include < vcl . h >
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{}
void __fastcall TForm1::N15Click(TObject *Sender)
{ Application->Terminate();}
void __fastcall TForm1::FileSaveUpdate(TObject *Sender)
{ TAction* pa = dynamic_cast<TAction*>(Sender);
if (pa) pa->Enabled=(StringGrid1->Visible);
}
void __fastcall TForm1::FileNewUpdate(TObject *Sender)
{// функция, управляющая доступностью контролирующих элементов
TAction * pa = dynamic _ cast < TAction *>( Sender );
if (pa) pa->Enabled=true;
}
void __fastcall TForm1::FileNewExecute(TObject *Sender)
{ // новый файл
StringGrid1->Visible=true;
StringGrid1->RowCount=1;
StringGrid1->ColWidths[0]=30;StringGrid1->ColWidths[1]=250;
StringGrid1->ColWidths[2]=80; StringGrid1->ColWidths[3]=80;
StringGrid1->ColWidths[4]=80; StringGrid1->ColWidths[5]=80;
StringGrid1->Cells[0][0]="№";
StringGrid1->Cells[1][0]="ФИО";
StringGrid1->Cells[2][0]="Математика";
StringGrid1->Cells[3][0]="Информатика";
StringGrid1->Cells[4][0]="Русский";
StringGrid1->Cells[5][0]="Ср. балл";
AppendExecute(Sender);
StringGrid1->FixedRows=1;
}
void __fastcall TForm1::AppendExecute(TObject *Sender)
{// Добавляет новую строку
StringGrid 1-> RowCount ++;
StringGrid1->Cells[0][StringGrid1->RowCount-1]=IntToStr(StringGrid1->RowCount-1);
for (int i=1; i<=5; i++)
StringGrid1->Cells[i][StringGrid1->RowCount-1]="";
}
void __fastcall TForm1::DeleteUpdate(TObject *Sender)
{// функция, управляющая доступностью кнопки "удалить строку"
Delete->Enabled=(StringGrid1->RowCount>2)*(StringGrid1->Visible);
}
//--------------------------------------------------------------
void __fastcall TForm1::AppendUpdate(TObject *Sender)
{// функция, управляющая доступностью кнопки "добавить строку"
Append->Enabled=(StringGrid1->Visible);}
void __fastcall TForm1::DeleteExecute(TObject *Sender)
{// Удаление строки и перенос выше всех других строк
int k=StringGrid1->Row;
if (k>0)
{ for (int i=k+1; i<StringGrid1->RowCount; i++)
for (int j=0; j<StringGrid1->ColCount; j++)
if (j==0) StringGrid1->Cells[0][i]=IntToStr(i);
else
StringGrid1->Cells[j][i-1]=StringGrid1->Cells[j][i];
StringGrid1->RowCount--;
}
}
void __fastcall TForm1::OpenFileExecute(TObject *Sender)
{ // Чтение из файла
int myfile, row, col, lenStr;
char *pszBuffer;
if (OpenDialog1->Execute())
{try
{ myfile = FileOpen(OpenDialog1->FileName, fmOpenRead);
Form 1-> FileNewExecute ( Sender );
// Читаем из файла количество колонок и строк таблицы
FileRead(myfile,&col,sizeof(StringGrid1->ColCount));
FileRead(myfile,&row,sizeof(StringGrid1->RowCount));
StringGrid1->ColCount=col; StringGrid1->RowCount=row;
// теперь содержимое таблицы
for (int i=0; i<col; i++)
for (int j=0; j<row; j++)
{ // Читаем длину записанной чтроки
FileRead(myfile, &lenStr, sizeof(lenStr));
pszBuffer = new char[lenStr+1];//содаем буфер для чтения
// читаем саму строку
FileRead(myfile,pszBuffer, lenStr);
StringGrid1->Cells[i][j]=AnsiString(pszBuffer,lenStr);
delete [] pszBuffer ; // удаляем буфер для чтения
}
}
catch (...)
{
Application -> MessageBox ("Ошибка чтения файла...","Ошибка файла", IDOK );
}
}
}
void __fastcall TForm1::FileSaveExecute(TObject *Sender)
{// Запись в файл
if (SaveDialog1->Execute())
{ int iLength;
int myfile=FileCreate(SaveDialog1->FileName);
// Записываем в выходной файл количество колонок и строк таблицы
FileWrite(myfile, (char*)&(StringGrid1->ColCount), sizeof(StringGrid1->ColCount));
FileWrite(myfile, (char*)&(StringGrid1->RowCount), sizeof(StringGrid1->RowCount));
// теперь содержимое таблицы
for (int x=0;x<StringGrid1->ColCount;x++)
for (int y=0;y<StringGrid1->RowCount;y++)
{// Записываем длину строки
iLength = StringGrid1->Cells[x][y].Length();
FileWrite(myfile, (char*)&iLength, sizeof(iLength));
AnsiString temp = StringGrid1->Cells[x][y];
//Копируем текст ячейки во временную переменную
FileWrite(myfile,temp.c_str(),
StringGrid1->Cells[x][y].Length());
}
FileClose(myfile);
}
}
void __fastcall TForm1::HelpAboutExecute(TObject *Sender)
{ ShowMessage ("Типовая программа ЛР №8 ( C ) 2006 Яхонтов С.А.");
}
Контрольные вопросы
1. Какие действия необходимо выполнить для использования компонента TOpenDialog?
2. Какие действия необходимо выполнить для использования компонента TSaveDialog?
3. Какие действия необходимо выполнить для использования компонента T Main Menu?
15 Разработка приложений
с использованием средств для отображения графической информации
15.1 Построение графика с помощью компонента TChart
Обычно результаты расчетов представляются в виде графиков и диаграмм. Система C ++ Builder имеет мощный пакет стандартных программ вывода на экран и редактирования графической информации, который реализуется с помощью визуально отображаемого на форме компонента TChart (рисунок 15.1).
Построение графика (диаграммы) производится после вычисления таблицы значений функции y = f(x) на интервале [Xmin, Xmax] с заданным шагом. Полученная таблица передается в специальный двумерный массив Seriesk (k – номер графика, например, Series1) компонента TСhart с помощью метода Add.
Компонент T Chart осуществляет всю работу по отображению графиков, переданных в объект Seriesk: строит и размечает оси, рисует координатную сетку, подписывает название осей и самого графика, отображает переданную таблицу в виде всевозможных графиков или диаграмм. При необходимости, с помощью встроенного редактора EditingChart компоненту TСhart передаются данные о толщине, стиле и цвете линий, параметрах шрифта подписей, шагах разметки координатной сетки и другие настройки.
В процессе работы программы изменение параметров возможно через обращение к соответствующим свойствам компонента TChart. Так, например, свойство Chart1->BottomAxis содержит значение максимального предела нижней оси графика и при его изменении во время работы программы автоматически изменяется изображение графика (см. нижеприведенную программу).
Пример разработки программы
Задание: составить программу, отображающую графики функций sin ( x ) и cos ( x ) на интервале [Xmin, Xmax]. Предусмотреть возможность изменения разметки координатных осей, а также шага построения таблицы.
Настройка формы
Панель диалога программы организуется в виде, представленном на рисунке 15.1.
Для ввода исходных данных используются окна редактирования TEdit. Компонент TChart вводится в форму путем нажатия пиктограммы « » в палитре компонентов на странице
TeeChart Std.
Рисунок 15.1 – Использование компонента TChart
Работа с компонентом TChart
Для изменения параметров компонента TChart необходимо дважды щелкнуть по нему мышью в окне формы. Появится окно редактирования EditingChat1 (рисунок 15.2).
Для создания нового объекта Series1 щелкнуть по кнопке Add на странице Series. В появившемся диалоговом окне TeeChart Gallery выбрать пиктограмму с надписью Line (график выводится в виде линий). Если нет необходимости представления графика в трехмерном виде, отключить независимый переключатель 3D.
После нажатия на кнопку OK появится новая серия с название Series1. Для изменения названия нажать кнопку Title. В появившемся однострочном редакторе набрать имя отображаемой функции – «sin(x)». Аналогичным образом создать объект Series2 для функции cos(x).
Рисунок 15.2 – Окно редактирования EditingChat1
Для изменения надписи над графиком на странице Titles в многострочном редакторе набрать: «Графики функций».
Для разметки осей необходимо выбрать страницу Axis и научиться устанавливать параметры настройки осей.
Нажимая различные кнопки меню, познакомиться с другими возможностями EditingChat.
Дата: 2019-02-02, просмотров: 367.