program SmallPrg;
uses
Windows, Messages;
const
WinName = 'MainWClass';
function MainWndProc(Window: HWnd; AMessage, WParam, LParam: Longint): Longint; stdcall;
begin//подпрограмма обработки сообщенийcase AMessage of
WM_DESTROY:
begin
PostQuitMessage(0);
Result := 0;
Exit;
end;
else
Result := DefWindowProc(Window, AMessage, WParam, LParam);
end;
end;
function InitApplication: Boolean;
var
wcx: TWndClass;
begin//Заполняем структуру TWndClass// перерисовываем, если размер изменяется
wcx.style := CS_HREDRAW or CS_VREDRAW;
// адрес оконной процедуры
wcx.lpfnWndProc := @MainWndProc;
wcx.cbClsExtra := 0;
wcx.cbWndExtra := 0;
// handle to instance
wcx.hInstance := hInstance;
// загружаем стандандартную иконку
wcx.hIcon := LoadIcon(0, IDI_APPLICATION);
// загружаем стандартный курсор
wcx.hCursor := LoadCursor(0, IDC_ARROW);
// делаем светло-cерый фон
wcx.hbrBackground := COLOR_WINDOW;
// пока нет главного меню
wcx.lpszMenuName := nil;
// имя класса окна
wcx.lpszClassName := PChar(WinName);
// Регистрируем наш класс окна.
Result := RegisterClass(wcx) <> 0;
end;
function InitInstance: HWND;
begin// Создаем главное окно.
Result := CreateWindow(
// имя класса окна
PChar(WinName),
// заголовок
'Small program',
// стандартный стиль окна
WS_OVERLAPPEDWINDOW,
// стандартные горизонтальное, вертикальное положение, ширина и высота
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
0,//нет родительского окна
0,//нет меню
hInstance, // handle to application instancenil); // no window-creation dataend;
var
hwndMain: HWND;
AMessage: msg;
beginif (not InitApplication) then
MessageBox(0, 'Ошибка регистрации окна', nil, mb_Ok)
elsebegin
hwndMain := InitInstance;
if (hwndMain = 0) then
MessageBox(0, 'Ошибка создания окна', nil, mb_Ok)
elsebegin// Показываем окно и посылаем сообщение WM_PAINT оконной процедуре
ShowWindow(hwndMain, CmdShow);
UpdateWindow(hwndMain);
while (GetMessage(AMessage, 0, 0, 0)) dobegin
TranslateMessage(AMessage);
DispatchMessage(AMessage);
end;
end;
end;
end.
Программа на Delphi, написанная на языке Object Pascal, создает простое приложение Windows с использованием Win32 API.
Главная процедура
Главная процедура (SmallPrg) является точкой входа в программу.
Клауза Uses
Клауза Uses импортирует два модуля: Windows и Messages. Эти модули обеспечивают доступ к функциям Win32 API для создания окон, обработки сообщений и т.д.
Константы
Константа WinName определяет имя класса окна (MainWClass).
Процедура MainWndProc
Это основная процедура окна (WNDPROC), которая обрабатывает сообщения, отправленные в приложение. Процедура использует оператор case для обработки различных типов сообщений:
WM_DESTROY: Когда окно уничтожается, программа вызывает PostQuitMessage(0) для выхода из цикла сообщений.
Все другие сообщения: Программа вызывает DefWindowProc(Window, AMessage, WParam, LParam) для передачи сообщения в стандартную процедуру окна для обработки.
Функция InitApplication
Функция инициализирует приложение, зарегистрировав новый класс окна (TWndClass) с помощью функции RegisterClass(). Структура TWndClass содержит информацию о классе окна,such as its style, icon, cursor, background color and menu name.
Функция проверяет успешность регистрации, сравнивая возвращаемое значение с нулём.
Функция InitInstance
Функция создает новый экземпляр основного окна приложения с помощью функции CreateWindow().
Цикл сообщений
Программа использует цикл while для обработки сообщений, отправленных в приложение. Она вызывает GetMessage() для получения следующего сообщения и затем обрабатывает его, вызывая TranslateMessage() и DispatchMessage().
Обработка ошибок
Если любая из функций инициализации fails (например, регистрация или создание окна), программа отображает сообщение об ошибке с помощью функции MessageBox().
Описывается пример программы на чистом API Delphi, которая создает окно и обрабатывает сообщения с помощью функции MainWndProc.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.