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

ИнфТехнКомпТехн

.pdf
Скачиваний:
18
Добавлен:
02.04.2015
Размер:
35.33 Mб
Скачать

2.Разработать алгоритмы решения задач.

3.Составить программы решения задач.

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

1.GDI (Graphics Device Interface) - интерфейс и драйверы графических устройств. Контекст отображения (дисплейный контекст) и его инструменты: шрифт, перо, кисть.

2.Класс TGraphicObject (графический объект).

3.Класс TFont - шрифт. Свойства Charset (набор символов), Name (имя), Size (размер в кеглях), Style (стиль), Color

4.(цвет фона).

5.Класс TPen - перо. Свойства Color (цвет), Style (стиль), Width (ширина), Mode (режим).

6.Класс TBrush - кисть. Свойства Color (цвет), Style (стиль).

7.Класс TCanvas - холст (поверхность Рисования). Свойства CopyMode (режим копирования), Pen (перо), Brush (кисть), Font (шрифт), Pixels (цвет пикселя).

8.Использование свойства TCanvas.Pixels или метода TCanvas.LineTo для Рисования графиков функций.

9.Метод MoveTo (переместить перо к).

10.Компонент TChart.

11.Задание функции для отображения в компоненте TChart.

12.Использование легенды в компоненте TChart.

Задание к работе

Создать программу вывода текста и Рисования в форме графиков функций. Проект – приложение. Варианты заданий приведены в табл. 16.1.

 

 

 

Таблица 16.1 - Варианты задания 1

 

График функции y(x)

 

 

 

Функция

 

x начальное

 

x конечное

 

sin(x)

 

0

 

 

cos(x)

 

0

 

 

sin(x)+sin(2x)

 

0

 

 

sin(x)-sin(2x)

 

0

 

 

sin(x)+cos(2x)

 

0

 

 

sin(x)-cos(2x)

 

0

 

 

sin(x)*exp(x)

 

0

 

 

cos(x)*exp(x)

 

0

 

 

sin(x)*exp(-x)

 

0

 

 

cos(x)*exp(-x)

 

0

 

 

exp(x)

 

0

 

2

 

exp(-x)

 

0

 

2

 

ln(x)

 

1

 

10

 

lg(x)

 

1

 

100

 

ln(x)+lg(x)

 

1

 

10

 

Пример выполнения

Создать программу Рисования в форме графика функции с поясняющим текстом. Проект – приложение. Функция - синус. Программа предусматривает три варианта Рисования графика:

Точками с помощью свойства Pixels (график в левой верхней части окна).

Линиями с использованием метода LineTo (график в нижней левой части окна).

221

С использованием компонента TChart (в правой части окна).

На Рис. 16.1 представлено окно формы в начале конструирования. В форме размещены следующие компоненты:

Кнопка BitBtn1 (Графика) из страницы Additional. Она вызывает построение графиков в окне.

Кнопка BitBtn2 (Закрыть) из страницы Additional. Дублирует кнопку закрытия приложения Windows.

TChart1. Компонент построения графиков из страницы Additional.

Рисунок 16.1 - Окно формы на этапе конструирования

Для подготовки TChart к работе используется встроенный редактор свойств этого компонента, вызываемый двойным щелчком по компоненту. На Рис. 16.2 слева представлено окно этого редактора. В нем в закладке Series нужно нажатием кнопки Add добавить, по крайней мере, одну серию данных для построения графика. Остальные параметры компонента можно оставить без изменения. При этом возникает окно для выбора способа отображения графика, показанное на Рис.16.2 справа.

Рисунок 16.2 - Выбор серии для TChart

После выбора вида графика окно редактора приобретает вид Рис. 16.3, а у компонента TChart в окне формы отображается примерный вид представления графика (см. Рис. 16.4 слева). По умолчанию в правой части компонента отображается легендастолбик из вычисляемых значений функции. При желании легенду можно удалить. Для этого следует вновь вызвать редактор свойств TChart, на вкладке Legend которого выключить флаг Visible. Окно формы примет вид, показанный на Рис. 16.4 справа.

222

Рисунок 16.3 - Окно редактора TChart после выбора серии

Рисунок 16.4 - Окно формы

Листинг модуля формы unit Prg_15_1_; interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons, TeEngine, Series, TeeProcs, Chart;

type

TForm1 = class(TForm) BitBtn1: TBitBtn; BitBtn2: TBitBtn; Chart1: TChart; Series1: TLineSeries;

procedure BitBtn1Click(Sender: TObject); private

{Private declarations } public

{Public declarations } end;

var

Form1: TForm1; implementation {$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject); var i,amp,x01,y01,x02,y02,imax,t:integer; func:real;

begin

imax:=100; //число точек в периоде t:=3; //число периодов

223

amp:=70;

//амплитуда

 

 

 

x01:=20;

//начала координат

 

 

x02:=20;

 

 

 

 

 

 

y01:=20+amp;

 

 

 

 

 

y02:=y01+2*amp+40;

Pixels

 

 

 

//Рисуем график с

 

с Pixels');

Canvas.TextOut(0,0,'График функции

Canvas.MoveTo(x01,y01);

//Рисуем ось

X

Canvas.LineTo(x01+imax*t,y01);

Canvas.MoveTo(x01,y01+amp);

//Рисуем ось

Y Canvas.LineTo(x01,y01-amp);

for i:=0 to imax*t do//Рисуем график

 

begin

 

 

 

 

 

 

func:=-amp*sin(2*pi/imax*i);

 

 

Canvas.Pixels[x01+i,y01+round(func)]:=clBlack;

end;

 

 

LineTo

 

 

 

//Рисуем график с

 

 

функции c LineTo');

Canvas.TextOut(x02,y02-amp-20,'График

Canvas.MoveTo(x02,y02);

//Рисуем ось

X

Canvas.LineTo(x02+imax*t,y02);

Canvas.MoveTo(x02,y02+amp);

//Рисуем ось

Y Canvas.LineTo(x02,y02-amp);

//func:=amp*sin(0);

 

 

 

 

//Canvas.MoveTo(x01,y0+round(func));

 

for i:=0 to imax*t do//Рисуем график

 

begin

 

 

 

 

 

 

func:=-amp*sin(2*pi/imax*i);

 

 

Canvas.LineTo(x02+i,y02+round(func));

 

end;

 

в

компонентеTChart

 

//Рисуем график

 

for i:=0 to imax*t do Chart1.SeriesList[0].AddXY(i,amp*sin(2*pi/imax*i),'',clRed); end;

initialization end.

На Рис. 16.5 представлено окна работающего приложения проекта. Оно возникает при нажатии кнопки График. В окне видны графики одной и той же функции, построенные разными способами:

С использованием свойства Pixels (вверху слева).

С использованием метода LineTo (внизу слева).

С помощью компонента TChart (справа).

224

Рисунок 16.5 – Окно работающего приложения проекта

Выводы

1.Для Рисования используется класс Canvas (поверхность Рисования, или холст).

2.Многие компоненты имеют свойство Canvas. Например, Form (форма), компонент Image (изображение).

3.Canvas имеет два инструмента: Pen (перо) для Рисования линий, Brush (кисть) для заливки областей.

4.Pen имеет свойства:

Color - цвет линии, значения с префиксом cl (например, clRed),

Style - тип линии, значения с префиксом ps (например, psSolid, принято по умолчанию),

Width - толщина линии, в пикселах (по умолчанию 1),Mode - режим взаимодействия с поверхностью холста, значения с префиксом pm (например, pmCopy - писать цветом пера, режим по умолчанию).

5.Brush имеет свойства:

Color - цвет заливки,

Style - стиль заливки, значения с префиксом bs (Например, bsCross).

6.Для Рисования графиков функций используются свойство TCanvas.Pixel(x,y) и метод TCanvas.LineTo. Второй метод дает более качественный график.

7.Для построения графиков есть компонент TChart, позволяющий автоматизировать значительную часть операций.

17. Графика, примитивы

Подготовка к работе По указанной литературе изучить:

Назначение, типы и методы работы с графическими примитивами.

Свойства компонента TShape.

Метафайлы.

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

1.Назначение графических примитивов.

2.Графический примитив Линия и метод LineTo его отображения.

225

3. Графический примитив Кусочно-ломаная линия и метод

PolyLine и его

отображения.

 

4.Графический примитив Хорда (линия поперек эллипса) и метод Chord его отображения.

5.Графический примитив Прямоугольная рамка и метод FrameRect его отображения.

6.Графический примитив Заполненный прямоугольник и метод Rectangle его отображения.

7.Графический примитив Заполненный многоугольник и метод Polygon его отображения.

8.Графический примитив Заполненный прямоугольник со скругленными углами и метод RoundRect его отображения.

9.Графический примитив Дуга и метод Arc его отображения.

10.Графический примитив Заполненный эллипс и метод Ellipse его отображения.

11.Графический примитив Пирог (сектор эллипса) и метод Pie его отображения.

12.Метод заполнения замкнутых фигур FloodFill (заполнить область),

13.Методы вывода текста: TextOut (вставить строку текста).

14.Компонент TShape.

15.Метафайлы, назначение, структура, создание и использование.

Задание к работе

1.Создать программу Рисования в форме графического примитива с заливкой. Примитив Рисуется при нажатии кнопки мыши (событие onDown) на форме. Цвет линий, стиль и цвет заливки зависит от того, какая кнопка мыши нажимается(левая или правая). Проект – приложение. Варианты заданий приведены в табл. 17.1.

Таблица 17.1 - Варианты задания 1

Примитив

Цвет линий

 

Заливка

 

 

Левая кнопка

Правая кнопка

Стиль

Цвет

Ellipse

clBlue

clGreen

bsSolid

clRed

Rectangle

clGreen

clWhite

bsHorizontal

clBlue

Pie

clWhite

clRed

bsVertical

clGreen

RoundRec

clRed

clBlue

bsDiagonal

clWhite

Polygon (3)

clBlue

clGreen

bsBDiagonal

clRed

Ellipse

clGreen

clWhite

bsCross

clBlue

Rectangle

clWhite

clRed

bsDiagCros

clGreen

Pie

clRed

clBlue

bsSolid

clWhite

RoundRec

clBlue

clGreen

bsHorizontal

clRed

Polygon (7)

clGreen

clWhite

bsVertical

clBlue

Ellipse

clWhite

clRed

bsDiagonal

clGreen

Rectangle

clRed

clBlue

bsBDiagonal

clWhite

Pie

clBlue

clGreen

bsCross

clRed

RoundRec

clGreen

clWhite

bsDiagCros

clBlue

Polygon (6)

clWhite

clRed

bsSolid

clGreen

2.Создать проект, демонстрирующий использование графического компонента TShape для изменения пользовательского интерфейса при выполнении программы. В проекте на форме с изменяемым цветом отображается фигура с разными типом, размерами и цветом. Варианты заданий приведены в Табл. 17.2. Возможные типы фигуры:

Тип

Имя

Круг

StCircle

Эллипс

stEllipse

 

226

Прямоугольник

stRectangle

Прямоугольник со скругленными

stRoundRect

Квадрат

stsquare

Квадрат со скругленными углами

stRoundSquare(квадрат с округлыми углами)

 

 

 

 

Таблица 17.2 - Варианты задания 2

stCircle

stEllipse

 

stRectangle

 

stEllipse

stRectangle

 

stRoundRect

 

stRectangle

stRoundRect

 

stsquare

 

stRoundRect

stsquare

 

stCircle

 

stsquare

stRoundSquare

 

stRectangle

 

stRoundSquare

stCircle

 

stRoundRect

 

stCircle

stRectangle

 

stsquare

 

stEllipse

stRoundRect

 

stRoundSquare

 

stRectangle

stsquare

 

stRectangle

 

stRoundRect

stRoundSquare

 

stRoundRect

 

stsquare

stRoundRect

 

stsquare

 

stRoundSquare

stsquare

 

stRoundSquare

 

stCircle

stRoundSquare

 

stRoundSquare

 

stEllipse

stRoundRect

 

stsquare

 

stRectangle

stsquare

 

stCircle

 

3.Создать проект работы с метафайлом. Метафайл содержит график с графическими примитивами,, создается программно, отображается на форме и сохраняется на диске ПК. Для проверки праильности метафайла он считывается в компонент Image формы. Проект – приложение. Графические примитвы студент выбирает самостоятельно.

Пример выполнения Задание 1

Создать программу Рисования в форме графического примитива с заливкой. Примитив - пятиугольная звезда, Рисуется при нажатии кнопки мыши (событие onDown) на форме. Если нажата левая кнопка мыши, то цвет линий clBlack (черный), стиль заливки bsDiagCross (диагональный крест), цвет заливки - clRed (красный). Если нажата правая кнопка мыши, то цвет линий clRed (красный), стиль заливки bsCross ( крест), цвет заливки clBlue (синий). Проект – приложение.

Листинг модуля формы unit Prg_16_1_; interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

procedure FormMouseDown(Sender: TObject; Button:TMouseButton; Shift: TShiftState; x,y:integer);

private

{Private declarations } public

{Public declarations } end;

var

Form1: TForm1; implementation {$R *.dfm}

procedure StarLine(x0,y0,r: integer; Canvas: TCanvas);

227

//x0,y0 - координаты центра звезды

//r - радиус звезды

var

 

 

 

массив

координат

лучей

и

p: array[1..11] of TPoint;//

впадин

 

 

ОХ и

радиусом к точке звезды

 

a: integer;// угол между

 

i: integer;

 

 

 

 

 

 

 

begin

// строим

от

правого горизонтального луча

 

a := 18;

 

for i:=1 to 10 do

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

if (i mod 2 = 0)

 

 

 

 

 

 

then

 

 

 

 

 

 

 

begin // впадина звезды

 

 

 

 

 

p[i].x := x0+Round(r/2*cos(a*2*pi/360));

 

 

p[i].y:=y0-Round(r/2*sin(a*2*pi/360));

 

 

 

end

 

 

 

 

 

 

 

else

 

 

 

 

 

 

 

begin // луч звезды

 

 

 

 

 

 

p[i].x:=x0+Round(r*cos(a*2*pi/360));

 

 

 

p[i].y:=y0-Round(r*sin(a*2*pi/360));

 

 

 

end;

 

 

 

 

 

 

 

a := a+36;

 

 

 

 

 

 

 

end;

 

// чтобы

замкнуть

контур

звезды

 

p[11].X := p[1].X;

 

p[11].Y := p[1].Y;

// начертить звезду

 

 

Canvas.Polyline(p);

 

 

end;

кнопки мыши

 

 

 

 

 

// нажатие

 

 

 

TObject;

procedure

TForm1.FormMouseDown(Sender:

Button:TMouseButton; Shift:

 

 

 

 

TShiftState; x,y:integer);

 

 

 

 

 

begin

 

 

 

 

 

 

 

with Form1 do begin

// нажата

левая кнопка?

 

 

if Button = mbLeft

 

 

then begin

 

 

 

 

 

 

 

Canvas.Pen.Color := clBlack; StarLine(x, y, 30,Canvas); Canvas.Brush.Style:=bsDiagCross; Canvas.Brush.Color:=clRed; Canvas.FloodFill(x,y,Canvas.Pen.Color,fsBorder);

end

else begin

Canvas.Pen.Color := clRed; StarLine(x, y, 30,Canvas); Canvas.Brush.Style:=bsCross; Canvas.Brush.Color:=clBlue; Canvas.FloodFill(x,y,Canvas.Pen.Color,fsBorder);

end; end;end; end.

На Рис. 17.1 представлен вид окна приложения задачи 1 при исполнении.

228

Рисунок 17.1 – Вид окна приложения

Задание 2

Создать проект в котором в форме, цвет которой может изменяться, отображается компонент Shape1 (фигура), для которого можно менять тип, цвет и размеры. Формы фигур: stCircle, stEllipse, stsquare.

 

 

Выполнение

 

 

 

 

 

 

 

1.

Запустить Delphi.

 

 

 

 

 

2.

Создать в ней новое приложение.

 

 

 

 

 

3.

ПРисвоить свойству Caption компонента Form1 значение Prg_16_2.

 

 

4.

Сохранить модуль под именем Prg_16_2_, а проект под именем Prg_16_2.

 

 

5.

Установить на форме компоненты:

 

 

 

 

 

 

кнопки Button1 и Button2, комбинированный список ComboBox1, линейки

 

 

 

прокрутки ScrollBar1 и ScrollBar2, панель Panel1 (со страницы Standard).

 

 

 

фигура Shape1 (со страницы Additional).

 

 

 

 

 

 

диалог цвета ColorDialog1 (со страницы Dialogs).

 

 

6.

Задать свойству Shape компонента Shape1 значение stEllipse (Эллипс). Используя

 

 

 

свойство Brush, установить произвольный цвет объекта Shape1.

 

 

7.

Установить значения свойств компонентов линеек прокрутки ScrollBar1 и

 

 

 

ScrollBar2:

 

 

 

 

 

 

 

 

Name

ScrollBar1

 

 

ScrollBar2

 

 

Kind ( Тип)

sbHorizobntal (Горизонтальная)

 

 

sbVertical (Вертикальная)

 

 

 

Align

alBottom (Снизу)

 

 

alRight (Справа)

 

 

8.

Компоненты Button1, Button2, ComboBox1 установить на передний план объекта

 

 

 

Panel1 и выровнять их по вертикали.

 

 

 

 

 

9.

Установить значения свойств компонентов Button1, Button2:

 

 

 

Компонент

Button1

 

 

Button2

 

 

 

Name (Имя)

FormColor

 

 

ShapeColor

 

 

 

Caption

Цвет формы

 

 

Цвет фигуры

 

 

10. Установить следующие значения строк списка ComboBox1:

 

 

 

Имя фигуры

 

 

Тип фигуры

 

 

 

stRectangle

 

 

Прямоугольник

 

 

 

stSguare

 

 

Квадрат

 

 

 

stRoundRect

 

 

Прямоугольник со скругленными углами

 

 

 

stRoundSguare

 

 

Квадрат со скругленными углами

 

 

 

stEllipse

 

 

Эллипс

 

 

 

stCircle

 

 

Круг

 

 

 

 

229

 

 

 

 

 

Внимание: имена фигур надо заносить в указанном порядке, так как они далее анализируются по номеру в списке.

11.Задать свойству BorderWidth компонента Panel1 значение 5. После вышеперечисленных установок интерфейс проекта примет вид, показанный на рис

17.2.

Рисунок 17.2 - Форма проекта задачи 2

12.Для изменения цвета фигуры или формы во время выполнения приложения использовать стандартное диалоговое окно выбора цвета ColorDialog1. Этот компонент при исполнении программы невидим.

13.Двойным щелчком по кнопке Цвет формы создать заготовку обработчика отклика на событие OnClick (на щелчок) для кнопки Цвет формы. Написать код обработчика, который при нажатии кнопки Цвет формы вызывает стандартное диалоговое окно выбора цвета с помощью диалогового окна ColorDialog1.

14.Двойным щелчком по кнопке Цвет фигуры создать заготовку обработчика события OnClick (на щелчок) для кнопки Цвет фигуры. Написать код обработчика, который при нажатии кнопки установит значение свойства Brush.Color (цвет закраски) фигуры Shape1, выбираемое с помощью диалогового окна ColorDialog1.

15.Запустить проект командой Выполнить и проверить действие кнопок Цвет формы и Цвет фигуры. При нажатии кнопок выбора цвета в отдельном окне (см. Рис. 17.3) отображается окно диалога выбора цвета, в котором следует выбирать желаемый цвет.

230