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

cm_Thin:

PenWidth := 1; {текущая ширина ручки-1}

cm_Regular:

PenWidth := 3; {текущая ширина ручки-3}

cm_Thick:

PenWidth := 5; {текущая ширина ручки-5}

cm_Solid:

PenStyle:=ps_solid;{текущий стиль ручки- сплошная}

cm_Dash:

PenStyle:=PS_DASH;{текущий стиль ручки- тире}

cm_DashDot:

PenStyle:=PS_DASHDot;{текущий стиль ручки- тире-точка}

cm_Dot:

PenStyle:=PS_Dot;{текущий стиль ручки-точка}

cm_Red:

PenColor := RGB(255, 0, 0);{текущий цвет ручки-красный}

cm_Green:

PenColor := RGB(0, 255, 0); {текущий цвет ручки-зелёный}

cm_Black:

PenColor := RGB(0, 0, 0);  {текущий цвет ручки-черный}

cm_Yellow:

PenColor := RGB(255,255,51);{текущий цвет ручки-желтый}

cm_PaleBlue:

PenColor := RGB(96,230,249);{текущий цвет ручки-голубой}

cm_Magenta:

PenColor := RGB(187,63,209);{текущий цвет ручки-фиолетовый}

cm_Blue:

PenColor := RGB(98,77,251); {текущий цвет ручки-синий}

else

DoWMCommand := 0;

end;

end;

{

function WndProc

WndProc вызывает оконную функцию (window proc)

для класса окна My Paint. Она обрабатывает все сообщения получаемые окном.

}

function WndProc (HWindow : HWnd; Message: Word;

wParam: Word; lParam: LongInt): LongInt; export;

begin

WndProc := 0;

case Message of

wm_Command:

WndProc := DoWMCommand(wParam); {Реакция на выбор пункта меню}

wm_LButtonDown:

LButtonDown(HWindow,lParam);  {Реакция на нажатие левой кнопки мыши}

wm_LButtonUp:

LButtonUp(HWindow,lParam);  {Реакция на сообщение о том, что кнопка мыши отпущена}

wm_MouseMove:

DoMouseMove(HWindow,lParam); {Реакция на движение мыши}

wm_Paint:                 {Реакция сообщение wm_Paint}

My_Paint(HWindow);

else

WndProc := DefWindowProc(HWindow, Message, wParam, lParam); {Обеспечивает стандартную обработку сообщений }

{для сообщений, которые явно не обрабатываются}

{прикладной программой.}

end;

end;

var

theWndClass: TWndClass;

theMessage: TMsg;

HWindow: HWnd;

l,e,r,r_2:HBitmap;

My:HMenu;

begin

l:=loadbitmap(hinstance,'LINE');{Загружает названный ресурс}

e:=loadbitmap(hinstance,'ELLips');

r:=loadbitmap(hinstance,'Rectangle');

r_2:=loadbitmap(hinstance,'Rectangle2');

My := LoadMenu(HInstance, 'MY PAINT');

{ Регистрация класса окна,если это не было сделано раньше }

if hPrevInst = 0 then

begin

theWndClass.style := cs_HRedraw or cs_VRedraw ; {Стиль окна}

theWndClass.lpfnWndProc := @WndProc;   

{указатель на оконную функцию которая будет обрабатывать}

{все сообщения посылаемые окну}

theWndClass.cbClsExtra := 0; 

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

theWndClass.cbWndExtra := 0; 

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

theWndClass.hInstance := hInstance; 

{Ссылка на экземпляр программы. Это поле используется ядром Windows }

theWndClass.hIcon := LoadIcon(0, 'ide_My');{Ссылка на иконку}

theWndClass.hCursor :=LoadCursor(0,idc_Arrow);{Ссылка на курсор}

theWndClass.hbrBackground := GetStockObject(White_Brush);

{Ссылка на шаблон заполнения фона}

theWndClass.lpszMenuName := szAppName;

{Ссылка на строку имени меню для данного класса окна}

theWndClass.lpszClassName := szAppName; {определяет имя класса окна}

if not RegisterClass(theWndClass) then Halt(255);

end;

{ Создание и показ окна }

HWindow := CreateWindow(szAppName,'My Paint',ws_OverLappedWindow, cw_UseDefault, 0

,cw_UseDefault, 0, 0, my, hInstance, nil);  {Создает пеpекpытое, всплывающее или дочеpнее окно.}

SetMenuItemBitmaps(My,201,mf_ByCommand,l,l);

{  Связывает две BitMap с элементом меню;}

{одна из них отобpажается, когда элемент выбpан,}

{а дpугая - когда не выбpан.}

SetMenuItemBitmaps(My,202,mf_ByCommand,e,e);

SetMenuItemBitmaps(My,203,mf_ByCommand,r,r);

SetMenuItemBitmaps(My,204,mf_ByCommand,r_2,r_2);

ShowWindow(HWindow, CmdShow);

{Отобpажает или пpячет окно обpазом, указанным паpаметpом CmdShow.}

UpdateWindow(HWindow);

{Если область обновления окна непустая, то посылает сообщение wm_Paint}

{ прямо оконной функции данного окна.}

while GetMessage(theMessage, 0, 0, 0) do

{Считывает сообщение, в pамках диапазона фильтpации,}

{ из очеpеди сообщений пpикладной задачи.}

{ Оставляет упpавление дpугим пpикладным задачам, если}

{ сообщений нет или если следующим сообщением является}

{ wm_Paint или wm_Timer.}

begin

TranslateMessage(theMessage );

{Пеpеводит комбинации  wm_KeyDown/Up в wm_Char или wm_DeadChar}

{ и комбинации wm_SysKeyDown/Up в wm_SysChar или wm_SysDeadChar и }

{напpавляет символьное сообщение в очеpедь пpикладной задачи.}

DispatchMessage(theMessage );

{Пеpедает в Msg сообщение оконной функции окна }

end;

end.