Delphi. Трюки и эффекты - стр. 24
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Теперь обратим внимание на модули Windows и Messages. В первом определены константы, структуры данных, необходимые для работы с функциями Windows API, и, конечно же, объявлены импортируемые из системных библиотек API-функции. В модуле Messages можно найти определения констант и структур для работы с Windows-сообщениями (об этом в подразд. «Реакция на события элементов управления» разд. 2.3).
Собственно, этих двух модулей должно хватить для того, чтобы реализовать оконное приложение, правда, использующее только стандартные функции WindowsAPI, стандартные элементы управления. В листинге 2.3 приведен пример элементарного Windows-приложения. Главное, на что сейчас стоит обратить внимание, – это размер приложения: всего 15 Кбайт.
program WinAPI;
uses
Windows, Messages;
{$R *.res}
begin
MessageBox(0, 'This is a test', 'Little application', MB_OK);
end.
Зачастую неоправданно полностью отказываться от классов, реализованных Borland. Но для чистоты эксперимента в этой главе рассмотрим радикальные примеры, построенные на использовании только Windows API.
2.2. Создание окна вручную
Раз уж речь зашла о приложениях с оконным интерфейсом, то самое время приступить к его реализации средствами Windows API. Итак, чтобы создать и заставить работать окно приложения, нужно выполнить следующие операции:
1. Зарегистрировать класс окна с использованием функции RegisterClass или RegisterClassEx.
2. Создать экземпляр окна зарегистрированного ранее класса.
3. Организовать обработку сообщений, поступающих в очередь сообщений.
Пример того, как можно организовать регистрацию класса окна, приведен в листинге 2.4.
function RegisterWindow():Boolean;
var
wcx: WNDCLASSEX;
begin
ZeroMemory(Addr(wcx), SizeOf(wcx));
//Формирование информации о классе окна
wcx.cbSize := SizeOf(wcx);
wcx.hInstance := GetModuleHandle(nil);
wcx.hIcon := LoadIcon(0, IDI_ASTERISK); //Стандартный значок
wcx.hIconSm := wcx.hIcon;
wcx.hCursor := LoadCursor(0, IDC_ARROW); //Стандартный указатель
wcx.hbrBackground := GetStockObject(WHITE_BRUSH); //Серый
//цвет фона
wcx.style := 0;
//..самые важные параметры
wcx.lpszClassName := 'MyWindowClass'; //Название класса
wcx.lpfnWndProc := Addr(WindowFunc); //Адрес функции
//обработки сообщений
//Регистрация класса окна
RegisterWindow := RegisterClassEx(wcx) <> 0;