Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Alexaev_OS_1.doc
Скачиваний:
3
Добавлен:
27.09.2019
Размер:
276.99 Кб
Скачать

5. Задайте окну серый цвет, переписав функцию обработки сообщений следующим образом:

const

maxx_size = 800;

maxy_size = 600;

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 (200, 200, 200));{кисть}

Pen := CreatePen (PS_SOLID, 1, RGB (200, 200, 200)); {карандаш }

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;

end; // case

{Все сообщения, не обрабатываемые оконной функцией, передаются функции ядра Windows DefWindowProc.}

WindowProc := DefWindowProc (Window, Message, WParam, LParam); {DefWindowProc обеспечивает обработку тех сообщений окна, которые не обрабатывает прикладная программа.}

end;

Компиляция программы прошла успешно, после запуска программы на выполнение, появилось такое же окно, что и в прошлом задании, но с перекрашенной рабочей областью в серый цвет.

рис.3. Результат работы программы

6.Постройте запрос на подтверждение закрытия формы, то есть при нажатии кнопкой мыши на кнопке закрытия формы должно выводиться диалоговое окно с сообщением 'Завершить приложение?'. На окне должны быть расположены 2 кнопки: Ok – закрываем форму и Cancel – игнорируем закрытие.

Для этого необходимо добавить обработку сообщения WM_CLOSE, в результате функция обработки сообщений примет вид:

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 (200, 200, 200));

Pen := CreatePen (PS_SOLID, 1, RGB (200, 200, 200));

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;

end;

WindowProc := DefWindowProc (Window, Message, WParam, LParam);

end;

Для работы MessageDlg() необходимо подключить модуль Dialogs. Теперь после попытки закрытия окна появляется запрос на подтверждение этого действия:

рис.4. Результат работы программы

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]