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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

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

Приложение.

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

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 {Если пользователь уже рисовал фигуры то}

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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.