Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mashgraf.doc
Скачиваний:
6
Добавлен:
04.09.2019
Размер:
152.58 Кб
Скачать

Константы свойства Style

Константа

Тип заполнения области

bsSolid

Сплошная заливка

bsClear

Область не закрашивается

bsHorisontal

Горизонтальная штриховка

bsVertical

Вертикальная штриховка

bsFDiagonal

Диагональная штриховка с наклоном линий вперед

bsBDiagonal

Диагональная штриховка с наклоном линий назад

bsCross

Горизонтально-вертикальная штриховка, в клетку

bsDiagCross

Диагональная штриховка, в клетку

Таким образом, для изображения закрашенной фигуры перед использованием соответствующего метода (Chord, Ellipse, Pie, Polygon и др.) необходимо установить цвет и стиль её закраски (Brush.Color и Brush.Style).

Свойство канвы Font (шрифт) определяет параметры шрифта, которым выводится текст на холсте. Эти параметры устанавливаются через его свойства. Некоторые из них приведены ниже:

Таблица 6

Константы свойства Font

Свойство

Назначение

Name

Определяет вид (название) шрифта (Arial, Times New Roman, Courier, и т.д.)

Size

Pазмер шрифта в пунктах (points). Один пункт равен 1/72 дюйма.

Style

Стиль начертания символов (курсив, полужирный, подчеркнутый, перечеркнутый)

Color

Цвет символов

Для вывода текста на поверхность графического объекта используется метод TextOut. Он определен следующим образом:

procedure TextOut(X,Y: Integer; Text: String);

Строка текста Text пишется на канве, начиная с позиции с координатами (X, Y). Надпись делается в соответствии с текущими установками шрифта Font. Фон надписи определяется установками текущей кисти Brush (если нет необходимости в фоне для надписи, то перед выводом текста свойству Brush.Color нужно присвоить значение bsClear или задать цвет кисти, совпадающий с цветом поверхности, на которую выводится текст). После вывода текста текущая позиция PenPos пера Pen перемещается к концу выведенного текста.

Перечисленные свойства и методы представляют далеко не все графические возможности Delphi. Однако, они покрывают около 80% потребностей, обычно возникающих при работе с графикой.

Прежде, чем перейти к примерам, необходимо сказать непосредственно о порядке создания изображения. Как отмечалось выше, канва представляет собой область, на которой можно рисовать или отображать готовые изображения. Она является свойством компонента Image, и для рисования на форму сначала помещают этот компонент, а затем на его канве с помощью указанных выше свойств и методов создают изображение - записывают код в обработчик какого-либо события, например OnPaint. Как указывалось ранее, канву имеют не только компонент Image, но и другие компоненты среды программирования, например, форма. То есть, все, что рисуется на компоненте Image, может рисоваться и непосредственно на форме.

В качестве примера рассматривается программа построения домика.

В программе константами задаются относительные размеры элементов домика (задается доля, которую составляет рассматриваемый размер от ширины или высоты формы). Цвет фона и цвет рисования также заданы константами. При рисовании домика можно использовать процедуру рисования прямоугольника, но в дальнейшем при написании программы анимации домика (вращение) необходимо рисовать прямоугольник произвольной ориентации, поэтому воспользоваться процедурой Rectangle будет нельзя.

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

unit domik;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormResize(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

xmax,ymax:integer;

hd, //высота домика

ld, //ширина домика

ldo, //ширина окна

hdo, //высота окна

rdo, //радиус окна на чердаке

hkr, //высота чердака

hram :real; //высота верхней части рамы окна

const kl = 1.0 / 6.0; //отношение ширины домика к ширине формы

kh = 1.0 / 8.0; //отношение высоты домика к высоте формы

kkr = 1.0 / 24.0; //отношение высоты чердака к высоте формы

klo = 2.0 / 3.0; //отношение ширины окна к ширине домика

kho = 2.0 / 3.0; //отношение высоты окна к высоте домика

kro = 1.0 / 4.0; //отношение радиуса окна на чердаке к высоте

//чердака

khram = 1.0 / 4.0; //отношение высоты верхней части рамы к высоте

// домика

nn=14;

cris=clRed;

cf=clWhite;

klkn=1/7; // относительные размеры кнопок

khkn=1/20; // (доля высоты и ширины кнопок от ширины и высоты формы)

var x,y:array[1..nn] of real;

implementation

{$R *.dfm}

//Рисование домика

procedure ris;

var i:integer;

begin

With Form1.Canvas do

begin

//рисование домика

//Rectangle(x[2],y[2],x[5],y[5]); можно использовать

//эту процедуру, но при вращении надо рисовать прямоугольник отрезками

MoveTo(round(x[1]),round(y[1]));

for I := 2 to 5 do

LineTo(round(x[i]),round(y[i]));

LineTo(round(x[1]),round(y[1]));

MoveTo(round(x[2]),round(y[2]));

LineTo(round(x[4]),round(y[4]));

MoveTo(round(x[2]),round(y[2]));

LineTo(round(x[3]),round(y[3]));

LineTo(round(x[4]),round(y[4]));

//рисование окна

//Rectangle(x[7],y[7],x[9],y[9]);

MoveTo(round(x[6]),round(y[6]));

for I := 7 to 9 do

LineTo(round(x[i]),round(y[i]));

LineTo(round(x[6]),round(y[6]));

MoveTo(round(x[10]),round(y[10]));

LineTo(round(x[11]),round(y[11]));

MoveTo(round(x[13]),round(y[13]));

LineTo(round(x[12]),round(y[12]));

//рисование окна на чердаке

Ellipse(round(x[14]-rdo),round(y[14]-rdo),round(x[14]+rdo),

round(y[14]+rdo));

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

with Canvas do

begin

Brush.Color:=cf;

Brush.Style:=bsSolid;

Rectangle(0,0,xmax,ymax);

Pen.Color:=cris;

ris;

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Close();

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

xmax:=ClientWidth;

ymax:=ClientHeight;

hd := kh * ymax;

ld := kl * xmax;

ldo := klo * ld;

hdo := kho * hd;

hkr := kkr * ymax;

rdo := kro * hkr;

hram := khram * hdo;

//расчет координат вершин домика

x[1]:=(xmax/2-ld/2); y[1]:=(ymax/2+hd/2);

x[2]:=x[1]; y[2]:=(y[1]-hd);

x[3]:=(x[2]+ld/2); y[3]:=(y[2]-hkr);

x[4]:=(x[2]+ld); y[4]:=y[2];

x[5]:=x[4]; y[5]:=y[1];

//расчет координат вершин окна

x[6]:=(x[1]+(ld-ldo)/2); y[6]:=(y[1]-(hd-hdo)/2);

x[7]:=x[6]; y[7]:=(y[6]-hdo);

x[8]:=(x[7]+ldo); y[8]:=y[7];

x[9]:=x[8]; y[9]:=y[6];

x[10]:=x[6]; y[10]:=(y[7]+hram);

x[11]:=x[8]; y[11]:=y[10];

x[12]:=x[3]; y[12]:=y[10];

x[13]:=x[12]; y[13]:=y[6];

x[14]:=x[12]; y[14]:=(y[3]+hkr/2);

//расчет размеров кнопок

Button1.Width:=round(klkn*xmax);

Button1.Height:=round(khkn*ymax);

Button2.Width:=round(klkn*xmax);

Button2.Height:=round(khkn*ymax);

Button1.Top:=ymax-4*Button1.Height;

Button1.Left:=xmax-Button1.Width;

Button2.Top:=ymax-2*Button2.Height;

Button2.Left:=xmax-Button2.Width;

end;

//обработчик события - изменение размеров формы

procedure TForm1.FormResize(Sender: TObject);

begin

FormCreate(Sender);

Button1Click(Sender);

end;

end.

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