Глобальные переменные. Массив, содержащий фигуры нарисованные пользователем

Страницы работы

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

Приложение.

Текст программы.

Program MyPaint;

uses WinProcs, WinTypes;

{$R 1.RES}

{Глобальные переменные}

const

szAppName = 'My Paint';

id_Line       = 1;

id_Ellipse    = 2;

id_Rectangle  = 3;

id_RoundRect  = 4;

cm_Exit       = 105;

cm_Line      = 201;

cm_Ellipse   = 202;

cm_Rectangle = 203;

cm_RoundRect = 204;

cm_Thin      = 301;

cm_Regular   = 302;

cm_Thick     = 303;

cm_Solid     = 313;

cm_DASH      = 314;

cm_DashDot   = 310;

cm_Dot       = 312;

cm_Red       = 304;

cm_Green     = 305;

cm_Black     = 306;

cm_Yellow    = 307;

cm_PaleBlue = 308;

cm_Magenta   = 309;

cm_Blue      = 311;

{ Обозначает фигуру которую пользователь рисует }

{ Фигура по умолчанию -линия}

CurrentShape : Integer = id_Line;

{ Обозначает размер ручки. Ширина по умолчанию-средняя. }

PenWidth : Integer = 3;

{ Обозначает цвет ручки. Цвет по умолчанию- чёрный. }

PenColor:TColorRef=$00000000;

{Обозначает стиль ручки. Стиль по умолчанию-сплошная}

PenStyle:Word=ps_Solid;

{Поля данной записи определяют}

{свойства фигуры которую рисует пользователь}

type

Shape = record

Points: Trect;

PenWidth: Integer;

theShape: Integer;

PenColor: TcolorRef;

PenStyle: Word;

{ Используется чтобы определить направление линии. Если   }

{ slope > 0 тогда линия рисуется слево-направо и сверху-вниз. Иначе  }

{ слево-направо и снизу-вверх.}

Slope: Integer;

end;

const

nPoints  = 100;

{ Определяет порядковый номер фигуры которую рисует пользователь }

CurrentPoint : Integer = -1;

var

{ Массив содержащий фигуры нарисованные пользователем. }

thisShape: array[0..nPoints - 1] of Shape;

function Min(a, b: LongInt): LongInt;

begin

if a < b then Min := a

else Min := b;

end;

function Max(a, b: LongInt): LongInt;

begin

if a > b then Max := a

else Max := b;

end;

{procedure DrawMyShape

Рисует фигуру с заданными параметрами PenWidth

,PenColor и PenStyle в прямоугольнике ограниченном x,y,x2,y2.

Параметр Slope показывает с каким наклоном рисуется линия, с положительным или отрицательным.}

procedure DrawMyShape(HandleDC: HDC; x, y, x2, y2, Shape,

PenWidth: Integer; PenColor: TColorRef; Slope: Integer;PenStyle:Word);

var

SaveObject: THandle;

begin

{ Создать надлежащую ручку для данной фигуры.  Предварительно }

{ сохранив выбранный объект в DC. }

SaveObject := SelectObject(HandleDC, CreatePen(PenStyle,

PenWidth, PenColor));

{Устанавливает логический объект для DC. В любой момент времени}

{может быть установлен только 1 объект и должен быть удалён если не используется}

case Shape of {Определение способа рисования фигур}

id_Line:

{Прямоугольники содержащие позиции фигур должны сохраняться как координаты-}

{ верхняя-левая и нижняя правая.  Чтобы нарисовать линию из}

{ верхнего-правого в нижний-левый угол,линия должна иметь}

{ отрицательный наклон.}

if Slope > 0 then

begin

MoveTo(HandleDC, x, y);

{Перемещает текущую позицию рисования в точку с данными координатами}

LineTo(HandleDC, x2, y2);

{Рисует линию из текущей позиции в данную точку}

end

else

begin

MoveTo(HandleDC, x2, y);

LineTo(HandleDC, x, y2);

end;

id_Ellipse:

Ellipse(HandleDC, x, y, x2, y2);

{Рисует эллипс ограниченный прямоугольником с координатами углов}

{(x,y)-верхний-левый,(x2,y2)-нижний-правый}

id_Rectangle:

Rectangle(HandleDC, x, y, x2, y2);

{Рисует  прямоугольник с координатами углов}

{(x,y)-верхний-левый,(x2,y2)-нижний-правый}

id_RoundRect:

RoundRect(HandleDC, x, y, x2, y2, Round(((x2-x)/x)-10),Round((( y2+y)/y))-10);

{Рисует прямоугольник со скругленными углами. Скругления углов определены как четверти эллипса.}

{(x,y)-верхний-левый,  (x2,y2)-нижний-правый, углы скруглены четвертями эллипса }

{ширинойRound(((x2-x)/x)-10)  и высотойRound((( y2+y)/y))-10) .}

end;

{ Удаляет установленный в настоящее время объект (the pen) из памяти }

{ и освобождает место для дальнейшей установки выбранного вами объекта }

DeleteObject(SelectObject(HandleDC, SaveObject));

end;

{procedure My_Paint

Обрабатывает сообщение wm_Paint .  wm_Paint посылается тогда когда вызывается UpdateWindow или если око было перемещено, поменяло размеры или было перекрыто другим окном.}

procedure My_Paint(HWindow: HWnd);

var

i: Integer;

HandleDC, hMemDC: HDC;

{Определяет тип управления для контекст устройства}

theRect, DestRect: TRect;

{Запись TRect определяет прямоугольную }

{область заданную координатами вершин}

theBitmap: HBitMap;

ps: TPaintStruct;{Содержит информацию для рисования}

begin

HandleDC := BeginPaint(HWindow, ps);

{Готовит окно к рисованию, заполняя поля записи ps}

if CurrentPoint >= 0 then {Если пользователь уже рисовал фигуры то}

Похожие материалы

Информация о работе