Cемь сходств Президента РФ и WINDOWS:
1) Работают, но постоянно глючат.
2) Никто не знает, чего от них ожидать.
3) Никому не нравятся, но вынуждены терпеть.
4) Никто не знает смысл их сообщений.
5) Имеют друзей по имени Билл.
6) Смена версий прошла в 2000 году.
7) Оба имеют кнопку "Пуск" (у одного в чемодане, у второго на рабочем столе).
program PlainAPI;
uses
Windows,
Messages;
{$R *.res}function PlainWinProc (hWnd: THandle; nMsg: UINT;
wParam, lParam: Cardinal): Cardinal; export; stdcall;
var
hdc: THandle;
ps: TPaintStruct;
begin
Result := 0;
case nMsg of
wm_lButtonDown:
MessageBox (hWnd, 'Mouse Clicked',
'Plain API', MB_OK);
wm_Paint:
begin
hdc := BeginPaint (hWnd, ps);
Ellipse (hdc, 100, 100, 300, 300);
EndPaint (hWnd, ps);
end;
wm_Destroy:
PostQuitMessage (0);
else
Result := DefWindowProc (hWnd, nMsg, wParam, lParam);
end;
end;
procedure WinMain;
var
hWnd: THandle;
Msg: TMsg;
WndClassEx: TWndClassEx;
begin// initialize the window class structure
WndClassEx.cbSize := sizeOf (TWndClassEx);
WndClassEx.lpszClassName := 'PlainWindow';
WndClassEx.style := cs_VRedraw or cs_HRedraw;
WndClassEx.hInstance := HInstance;
WndClassEx.lpfnWndProc := @PlainWinProc;
WndClassEx.cbClsExtra := 0;
WndClassEx.cbWndExtra := 0;
WndClassEx.hIcon := LoadIcon (hInstance,
MakeIntResource ('MAINICON'));
WndClassEx.hIconSm := LoadIcon (hInstance,
MakeIntResource ('MAINICON'));
WndClassEx.hCursor := LoadCursor (0, idc_Arrow);;
WndClassEx.hbrBackground := GetStockObject (white_Brush);
WndClassEx.lpszMenuName := nil;
// register the classif RegisterClassEx (WndClassEx) = 0 then
MessageBox (0, 'Invalid class registration',
'Plain API', MB_OK)
elsebegin
hWnd := CreateWindowEx (
ws_Ex_OverlappedWindow, // extended styles
WndClassEx.lpszClassName, // class name
'Plain API Demo', // title
ws_OverlappedWindow, // styles
cw_UseDefault, 0, // position
cw_UseDefault, 0, // size
0, // parent window
0, // menu
HInstance, // instance handlenil); // initial parametersif hWnd = 0 then
MessageBox (0, 'Window not created',
'Plain API', MB_OK)
elsebegin
ShowWindow (hWnd, sw_ShowNormal);
while GetMessage (Msg, 0, 0, 0) dobegin
TranslateMessage (Msg);
DispatchMessage (Msg);
end;
end;
end;
end;
begin
WinMain;
end.
Программа Delphi, созданная с использованием Plain API (Windows API) и отображающая эллипс в окне. В проекте также есть процедура для обработки кликов мыши и уничтожения окна.
Вот разбивка кода:
Программа PlainAPI использует модули Windows и Messages, которые обеспечивают доступ к Windows API и функциональности обработки сообщений.
Функция PlainWinProc является основной процедурой окна, которая обрабатывает полученные сообщения:
Для WM_ LBUTTONDOWN она отображает сообщение о том, что была нажата кнопка мыши.
Для WM_PAINT она рисует эллипс на окне с помощью функции Ellipse.
Для WM_DESTROY она отправляет сообщение об остановке приложения.
Процедура WinMain инициализирует структуру класса окна и зарегистрирует ее в операционной системе. Она также создает экземпляр окна с помощью функции CreateWindowEx и отображает его на экране.
Процедура WinMain затем вступает в цикл обработки сообщений, где она получает и обрабатывает отправленные сообщения о окне с помощью функций GetMessage, TranslateMessage и DispatchMessage.
Код хорошо организован и легко понятен, с ясными именами переменных и краткими комментариями. Однако есть несколько предложений по улучшению:
Консистентность именования: код использует оба стиля именования (PascalCase и camelCase) для переменных. Лучше использовать один стиль в проекте.
Комментарии и документация: хотя код имеет некоторые комментарии, он может выгодно улучшиться с более подробными объяснениями каждого раздела.
Обработка ошибок: код не обрабатывает ошибки или исключения явно. Рекомендуется добавить блоки try-catch или механизмы обработки ошибок для улучшения надежности.
В целом, это хороший старт для создания простого приложения Windows с использованием Plain API. С некоторыми улучшениями и дополнительными функциями он может стать более полноценным и полезным программой.
Публикация статьи, посвященной созданию формы на чистом API с использованием языка программирования Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.