Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабник по СПО

.pdf
Скачиваний:
9
Добавлен:
05.06.2015
Размер:
1.59 Mб
Скачать

A=Vvod(AEd->Text); Calc();

}

void __fastcall TfmArea::HEdChange(TObject *Sender) {H=Vvod(HEd->Text);

Calc();

}

void __fastcall TfmArea::CEdChange(TObject *Sender)

{

C=Vvod(CEd->Text); Calc();

}

Следующей создаём функцию обработки выбора фигуры из списка. void __fastcall TfmArea::ListBox1Click

(TObject *Sender)

{

RP=ListBox1->ItemIndex; if (RP==0 || RP==1) {

RP=3; ListBox1->ItemIndex=3;

}

Calc();

}

Создаём функцию выбора фигуры по сочетанию клавиши Ctrl и клавиши с символом в соответствии с рис.5.6. Нажатие третьей клавиши при выборе треугольника приведёт к ошибке преобразования строки в число, если фокус находится в одном из редакторов. Чтобы избежать ошибки преобразования из-за ввода некорректного символа, ввод в этом случае не производим, а передаём фокус объекту ListBox1.

void __fastcall TfmArea::FormKeyDown (TObject *Sender, WORD &Key, TShiftState Shift)

{

if (Shift.Contains(ssCtrl) && Key==84)

{

Trng=1; ListBox1->SetFocus();

141

PDF created with pdfFactory Pro trial version www.pdffactory.com

}

if ((Trng==1) && (Key==72))

{

RP=2; ListBox1->ItemIndex=2; Calc();

}

if ((Trng==1) && (Key==76)) {RP=3; ListBox1->ItemIndex=3; Calc();

}

if (Shift.Contains(ssCtrl) && (Key==83))

{

RP=4; ListBox1->ItemIndex=4; Calc();

}

if (Shift.Contains(ssCtrl) && (Key==82))

{

RP=5; ListBox1->ItemIndex=5; Calc();

}

if (Shift.Contains(ssCtrl) && (Key==68))

{

RP=6; ListBox1->ItemIndex=6; Calc();

}

}

Проверяем работу программы.

В обработчике события OnClick кнопки Да, находящейся на форме сообщения о закрытии программы, задаём значение подтверждающего ответа равным 6.

void __fastcall TfmClose::BtnYesClick(TObject *Sender)

142

PDF created with pdfFactory Pro trial version www.pdffactory.com

{

ModalResult = 6;

}

В обработчике события OnCloseQuery главной формы записываем вызов модального окна сообщения с вопросом о закрытии программы.

void __fastcall TfmAreas::FormCloseQuery (TObject *Sender, bool &CanClose)

{

if (IndWr==0) fmClose->Caption="Результаты не записаны"; else if (IndPas==0) fmClose->Caption=

"Последний расчёт не записан"; else fmClose->Caption=

"Записано расчётов - "+IntToStr(IndWr); if (IndSave==0)

{

fmClose->LbRez->Caption="Результаты не сохранены"; fmClose->LbRez->Font->Color=clRed;

}

else

{

fmClose->LbRez->Caption="Результаты сохранялись"; fmClose->LbRez->Font->Color=clNavy;

}

if (fmClose->ShowModal()==6) CanClose = true; else CanClose = false;

}

Пишем текст обработчика нажатия кнопки Записать. void __fastcall TfmAreas::WrButClick(TObject *Sender)

{

fmOut->MemOut->Lines->Add(ResStr); IndWr=IndWr+1;

IndPas=1; fmOut->Show();

}

Пишем текст обработчика нажатия кнопки Отчёт.

143

PDF created with pdfFactory Pro trial version www.pdffactory.com

void __fastcall TfmAreas::OpenButClick (TObject *Sender)

{fmOut->Show(); }

Пишем текст обработчика нажатия кнопки Сохранить. void __fastcall TfmAreas::SavButClick(TObject *Sender)

{

fmOut->MemOut->Lines->SaveToFile(Edittxt->Text); IndSave=1;

}

Создаём контекстное меню на форме fmOut в соответствии с рис.5.9. Создаём обработчик нажатия пункта меню Удалить.

void __fastcall TfmOut::OutDelClick(TObject *Sender)

{

fmOut->MemOut->Clear(); fmOut->MemOut->Lines->Add("Результаты расчёта"); fmOut->MemOut->Lines->Add(' ');

IndWr=0;

IndPas=0;

}

Создаём обработчик нажатия пункта меню Записать формы fmOut. void __fastcall TfmOut::WrOutClick(TObject *Sender)

{

fmOut->MemOut->Lines->Add(ResStr); IndWr=IndWr+1;

IndPas=1;

}

Создаём обработчик нажатия пункта меню Сохранить формы fmOut. void __fastcall TfmOut::SavOutClick(TObject *Sender)

{

fmAreas->SavButClick(Sender);

}

Создаём обработчик нажатия пункта меню Закрыть форму формы fmOut. void __fastcall TfmOut::ClsfmOutClick(TObject *Sender)

{ Close(); }

Создаём обработчик нажатия пункта меню Закрыть программу формы fmOut.

144

PDF created with pdfFactory Pro trial version www.pdffactory.com

void __fastcall TfmOut::ClsPrOutClick(TObject *Sender) { fmAreas->Close(); }

Создаём контекстное меню на главной форме в соответствии с рис.5.10. Создаём обработчик нажатия пункта меню Записать главной формы.

void __fastcall TfmAreas::WrOutClick(TObject *Sender) { WrButClick(Sender);

}

Создаём обработчик нажатия пункта меню Открыть главной формы. void __fastcall TfmAreas::OpnOutClick

(TObject *Sender) { fmOut->Show(); }

Создаём обработчик нажатия пункта меню Сохранить главной формы. void __fastcall TfmAreas::SavOutClick(TObject *Sender)

{

SavButClick(Sender);

}

Создаём обработчик нажатия пункта меню Закрыть главной формы. void __fastcall TfmAreas::ClsPrClick(TObject *Sender)

{

Close();

}

145

PDF created with pdfFactory Pro trial version www.pdffactory.com

Контрольные вопросы

2. Как добавить или убрать объекты на форме во время выполнения программы?

6.Зачем в функцию ввода введены операторы If?

If ((Str <> '')And(Str <> ' ')) Then

или

if ((Str != "")&&(Str != " ")).

7.Какие методы предназначены для обработки событий клавиатуры?

8.Какие методы предусмотрены для задания горячих клавиш?

9.Как определить событие одновременного нажатия двух клавиш?

10.Как обеспечить одинаковые расчёты при изменении разных исходных данных?

11.Какое окно называется модальным?

12.Что такое ShortCut и где её найти?

13.Как вывести сообщение в модальном окне?

14.Как можно получить реакцию пользователя на сообщение?

146

PDF created with pdfFactory Pro trial version www.pdffactory.com

Лабораторная работа № 6. Создание графических приложений

Задание

Цель работы:

1.Изучение методов создания и отображения графических изображений на экране.

2.Освоение приёмов создания и использования диалоговых окон.

Содержание работы:

Разработка приложения для построения переходной характеристики колебательного контура.

Технические требования к приложению:

Выполняемые действия: расчёт и рисование на экране серии переходных характеристик колебательного звена.

Отображаемые рисунки: переходная характеристика, шкала времени, шкала уровней сигнала, электрическая схема звена.

Максимальное число графиков переходных характеристик, отображаемых в одном окне: 5 не менее.

Отображаемые параметры: постоянная времени звена, собственная частота колебаний звена, круговая частота собственных колебаний звена, период собственных колебаний звена, коэффициент затухания.

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

Форма отчёта:

Текст проекта в папке с именем Work6 на диске Н:.

Содержание отчёта:

Файлы проекта и исполняемый файл.

147

PDF created with pdfFactory Pro trial version www.pdffactory.com

Визуальные компоненты для графических приложений

Компонент Image (рисунок) находится на вкладке Additional и используется для отображения растровых изображений: bmp-файлов, пиктограмм и метафайлов. Представляет собой упаковку, которая хранит рисунок в свойстве Picture. Для того чтобы поместить изображение, нужно дважды щёлкнуть на объекте и загрузить изображение. Объекты типа ТImage обеспечивают автоматическое отображение рисунков.

Для того чтобы изображение занимало всё пространство окна, в свойстве Align установите значение alClient. Чтобы растровое изображение внутри объекта Image занимало всю клиентскую область, в свойстве Stretch установите значение True.

Компонент Shape (фигура) находится на вкладке Additional и используется для создания геометрических фигур, заполненных и незаполненных. Выбор фигур определяется значением свойства Shape объекта типа TShape.

Компонент PaintBox (окно для рисования) находится на вкладке System и используется для создания отдельных областей рисования или рисунков на компонентах, не имеющих свойства Canvas, например, на компоненте Panel. Компонент PaintBox можно использовать для ограничения на форме области рисования. Для рисования вызываются методы свойства Canvas компонента. Выбор параметров графических инструментов производится с помощью свойств Font, Pen и Brush. Рисование осуществляется в обработчике событий OnPaint.

Компонент OpenDialog (диалоговое окно открытия файлов) находится на вкладке Dialogs. Позволяет просматривать папки и открывать файлы. Свойство FileName содержит полное имя файла при успешном завершении диалога. Если имя файла вводится пользователем, то существование файла необходимо проверить глобальной функцией FileExists или использовать механизм обработки исключительных ситуаций. Свойство Filter служит для выбора файлов заданного типа.

Компонент OpenPictureDialog (диалоговое окно открытия рисунков) находится на вкладке Dialogs. Позволяет просматривать папки и открывать графические файлы. Отличается от компонента OpenDialog наличием окна для предварительного просмотра рисунков.

Компонент ColorDialog (диалоговое окно для выбора цвета) находится на вкладке Dialogs. Выбранный цвет возвращается в свойстве Color при успешном завершении диалога. Для того чтобы изменить цвет какого-либо элемента, например, панели, надо написать оператор вызова функции Execute.

148

PDF created with pdfFactory Pro trial version www.pdffactory.com

if (ColorDialog1->Execute()) Panel1->Color=ColorDialog1->Color;

или

With ColorDialog1 Do

If Execute Then Label4.Color:=Color;

Свойства класса Canvas

Класс Canvas создаёт канву, на которой можно рисовать чертёжными инструментами: пером, кистью и шрифтом. Для конфигурации графических элементов класс Canvas поддерживает свойства, значения которым могут присваиваться во время работы программы, обычно в обработчике события формы OnCreate или OnPaint:

ŸBrush (объект-кисть). Определяет цвет и шаблон заливки фигуры, а также основной цвет текста. Имеет свойства Color и Style.

ŸClipRect (область рисования). Определяет текущие границы области, нуждающейся в прорисовке.

ŸCopyMode (способ копирования). Определяет способ копирования изображения из одного объекта в другой методом CopyRect. С помощью свойства CopyMode можно получать разные графические эффекты путём выполнения логических операций И, ИЛИ,

исключительное ИЛИ и инвертирования исходной и результирующей графических областей.

ŸFont (объект-шрифт). Используется для выбора стилей шрифтов, применяемых при выводе текста методом TextOut или TextRect объекта Canvas.

ŸHandle (дескриптор канвы). Используется для непосредственного обращения к API-

функциям ОС Windows. При вызове методов GDI (Graphics Device Interface), которым требуется дескриптор контекста устройства, следует передать его значение Canvas- >Handle или Canvas.Handle в качестве параметра HDС.

ŸPen (объект-перо). Определяет параметры линии. Имеет свойства Color, Style, Mode

и Width.

ŸPenPos (позиция). Определяет текущие координаты объекта (PenPos.x и PenPos.y) относительно левого верхнего угла канвы. Координаты определяют начало линии. Для задания положения начальной точки рисования можно вызвать метод MoveTo объекта

Canvas.

ŸPixels[x,y] (пиксели). Обеспечивает доступ к отдельным пикселям объекта Canvas. Каждый элемент массива является значением типа TColor. Класс TCanvas преобразует ссылки на элементы Pixels[x,y] в вызовы функций GetPixels и SetPixels.

149

PDF created with pdfFactory Pro trial version www.pdffactory.com

Методы класса TCanvas

Методы построения фигур обращаются непосредственно к функциям GDI, которые имеют те же имена. Перед каждым использованием объекта Canvas необходимо присваивать значения его свойствам в обработчике событий OnPaint.

Процедура Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4) чертит дугу эллипса в охватывающем прямоугольнике (X1,Y1) - (X2,Y2). Начало дуги лежит на пересечении эллипса и луча, проведённого из центра в точку (X3,Y3), а конец - на пересечении эллипса и луча, проведённого из центра в точку (X4,Y4).

Процедура BrushCopy(Dest, Bitmap, Source, Color) копирует часть изображения Source на участок канвы Dest. Color указывает цвет в Dest, который должен измениться на цвет кисти канвы. Метод устаревший, лучше использовать класс TImageList.

Процедура Chord(X1, Y1, X2, Y2, X3, Y3, X4, Y4) чертит сегмент эллипса в охватывающем прямоугольнике (X1,Y1) - (X2,Y2). Начало дуги лежит на пересечении эллипса и луча, проведённого из центра в точку (X3,Y3), а конец - на пересечении эллипса и луча, проведённого из центра в точку (X4,Y4). Начальная и конечная точки соединяются прямой линией.

Процедура CopyRect(Dest, Canvas2, Source) копирует изображение канвы источника Canvas2 на канву приемника изображения, к которой применен метод CopyRect. Dest - структура типа TRect, которая задает положение и размер области, куда выполняется копирование. Source - структура типа TRect, которая задает положение и размер области, откуда выполняется копирование. Свойство CopyMode задаёт способ объединения пикселей.

Процедура Draw(X, Y, Graphic) рисует графический объект Graphic так, чтобы левый верхний угол объекта был расположен в точке (X,Y).

Процедура DrawFocusRect(Rect) прорисовывает прямоугольник с помощью операции XOr, повторная прорисовка уничтожает ранее вычерченный прямоугольник.

Процедура Ellipse(X1, Y1, X2, Y2) чертит эллипс в охватывающем прямоугольнике (X1,Y1) - (X2,Y2). Заполняет внутреннее пространство эллипса текущей кистью. Процедура FillRect(TRect) заполняет текущей кистью прямоугольную область Rect, включая её левую и верхнюю границы, но не затрагивая правую и нижнюю границы. Процедура FloodFill(X, Y, Color, FillStyle) производит заливку канвы текущей кистью. Если FillStyle=fsSurface, заливка распространяется на все соседние точки с цветом Color. Если FillStyle=fsBorder, заливка прекращается на точках с цветом Color.

Процедура FrameRect(TRect) очерчивает границы прямоугольника Rect текущей кистью толщиной в 1 пиксель без заполнения внутренней части прямоугольника.

150

PDF created with pdfFactory Pro trial version www.pdffactory.com

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]