Задайте различные цвета форме на событие создания окна, то есть на сообщение WM_CREATE.




Для этого в разделе объявления глобальных переменных нужно объявить три переменные:

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 Результат работы программы



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-11-19 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: