
- •1. Создайте новое приложение в Delphi и назовите его TestMessages, а главную форму Test, изменив свойство Name.
- •2. Напишите Windows-приложение с нуля. Для этого удалите из исходного текста приложения все кроме program, begin, end.
- •3. Запустите и посмотрите размер исполняемого файла (около 15 Кб).
- •4. Добавьте цикл обработки сообщений – главное для Windows-приложений. Минимальный код программы см. В Приложении а.
- •5. Задайте окну серый цвет, переписав функцию обработки сообщений следующим образом:
- •7. Задайте различные цвета форме на событие создания окна, то есть на сообщение wm_create.
- •8. Получите высоту и ширину окна, обработав сообщение wm_size, и выведите их значения на форму (с помощью TextOut) или в виде сообщения (с помощью ShowMessage).
- •9. Выведите на форму (TextOut), текущий нажатый символ на клавиатуре (сообщение wm_char).
- •10. Модифицируйте свое приложение, так, чтобы при нажатии на форме левой кнопки мыши рисовался эллипс красного цвета, а при нажатии правой кнопки он исчезал.
- •Дайте определения событию и сообщению.
- •Перечислите основные действия, которые должно выполнять любое Windows-приложение.
- •Что понимается под диспетчированием?
- •Лабораторная работа
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. Результат работы программы