Для этого в разделе объявления глобальных переменных нужно объявить три переменные:
colorR, colorG, colorB: integer; {переменные цвета для формы}
Также следует дополнить функцию обработки сообщений:
function WindowProc (Window: HWnd; Message, WParam: LongInt; LParam: LongInt): LongInt; stdcall;
Var
dc: HDC;
MyPaint: TPaintStruct;
Brush: hBrush;
Pen: hPen;
Begin
WindowProc:= 0;
Case Message of
wm_Destroy:
Begin
PostQuitMessage (0);
Exit;
end;
wm_Paint:
Begin
dc:= BeginPaint (Window, MyPaint);
Brush:= CreateSolidBrush (RGB (colorR, colorG, colorB));
Pen:= CreatePen (PS_SOLID, 1, RGB (colorR, colorG, colorB));
SelectObject (dc, Brush);
SelectObject (dc, Pen);
Rectangle(dc,0,0,maxx_size,maxy_size);
DeleteObject (Pen);
DeleteObject (Brush);
EndPaint (Window, MyPaint);
ReleaseDC (Window, dc);
end;
WM_CLOSE:
Begin
{вывод на экран запроса}
If MessageDlg('Завершить приложение?', mtConfirmation,MbOkCancel,0) <> idOK then
exit; {если Ok, то выход}
end;
WM_CREATE:
Begin
randomize; //инициалицация ГСЧ
colorR:= random(256); //
colorG:= random(256); //задание цвета фона
colorB:= random(256); //
end;
end;
WindowProc:= DefWindowProc (Window, Message, WParam, LParam);
end;
Результат работы программы аналогичен результату, полученному в предыдущем задании, но цвет фона у окна задается случайным образом при запуске программы.
Получите высоту и ширину окна, обработав сообщение WM_SIZE, и выведите их значения на форму (с помощью TextOut) или в виде сообщения (с помощью ShowMessage).
Объявим в разделе глобальных переменных следующие объекты:
Rectangl: TRect; {прямоугольник, хранящий данные о параметрах окна}
sWidth, sHeight: string; {строки с размерами, выводящиеся на форму}
Обновим функцию обработки сообщений:
function WindowProc (Window: HWnd; Message, WParam: LongInt; LParam: LongInt): LongInt; stdcall;
Var
dc: HDC;
MyPaint: TPaintStruct;
Brush: hBrush;
Pen: hPen;
Begin
WindowProc:= 0;
Case Message of
wm_Destroy:
Begin
PostQuitMessage (0);
Exit;
end;
wm_Paint:
Begin
dc:= BeginPaint (Window, MyPaint);
Brush:= CreateSolidBrush (RGB (colorR, colorG, colorB));
Pen:= CreatePen (PS_SOLID, 1, RGB (colorR, colorG, colorB));
SelectObject (dc, Brush);
SelectObject (dc, Pen);
Rectangle(dc,0,0,maxx_size,maxy_size);
TextOut(dc,0,0,pchar(sWidth),Length(sWidth)); {вывод ширины окна}
TextOut(dc,0,15,pchar(sHeight),Length(sHeight)); {вывод высоты окна}
DeleteObject (Pen);
DeleteObject (Brush);
EndPaint (Window, MyPaint);
ReleaseDC (Window, dc);
end;
WM_CLOSE:
Begin
{вывод на экран запроса}
If MessageDlg('Завершить приложение?', mtConfirmation,MbOkCancel,0) <> idOK then
exit; {если Ok, то выход}
end;
WM_CREATE:
Begin
randomize; //инициализация ГСЧ
colorR:= random(256); //
colorG:= random(256); //задание цвета фона
colorB:= random(256); //
end;
WM_SIZE:
Begin
GetWindowRect(Window, Rectangl); {получение прямоугольника, описывающего форму}
{создание записей с размерами окна}
sWidth:= 'width: ' + IntToStr(Rectangl.Right - Rectangl.Left);
sHeight:= 'height: ' + IntToStr(Rectangl.Bottom - Rectangl.Top);
end;
end;
WindowProc:= DefWindowProc (Window, Message, WParam, LParam);
end;
Для работы функции IntToStr() необходимо подключить модуль Sysutils. После запуска программы появляется окно с указанием его размеров.
рис.5 Результат работы программы
После изменения размеров окна меняются и цифры на форме:
рис.6 Результат работы программы