Листинг 2.21.
Создание главного окна приложения (с элементами управления)
program ControlsDemo;
uses
Windows, Messages,
Controls in \'Controls.pas\
{$R *.res}
var
hMainWnd: HWND;
hInst: Cardinal;
mess: MSG;
//Функция обработки сообщений
…
//Создание окна и цикла обработки сообщений
begin
hInst := GetModuleHandle(nil);
//Регистрация и создание главного окна
if not RegisterWindow() then Exit;
hMainWnd := CreateWindow(
\'MyWindowClass\', //Имя класса окна
\'Главное окно\', //Заголовок окна
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, //Координата X по умолчанию
CW_USEDEFAULT, //Координата Y по умолчанию
CW_USEDEFAULT, //Ширина по умолчанию
CW_USEDEFAULT, //Высота по умолчанию
HWND(nil), //Нет родительского окна
HMENU(nil), //Нет меню
hInst,
nil);
if (hMainWnd = HWND(nil)) then Exit;
//Инициализация модуля Controls для работы с главным окном
Controls.hParentWnd := hMainWnd;
Controls.hAppInst := hInst;
//Создание элементов управления
CreateFrame(10, 80, 170, 70, –1, \'Кнопки\');
CreateButton(20, 100, 70, 30, 1001, \'Кнопка 1\');
CreateButton(100, 100, 70, 30, 1002,\'Кнопка 2\');
CreateFrame(200, 10, 200, 180, –1, \'Флажки и переключатели\');
CreateCheck(210, 30, 180, 20, 2001, \'Флажок 1\');
CreateCheck(210, 60, 180, 20, 2002, \'Флажок 2\', True);
CreateOption(210, 100, 180, 20, 3001, \'Переключатель 1\', True);
CreateOption(210, 130, 180, 20, 3002, \'Переключатель 2\', False,
True);
CreateOption(210, 160, 180, 20, 3003, \'Переключатель 3\', True);
CreateFrame(420, 10, 300, 180, –1, \'Списки и статические
надписи\');
CreateLabel(430, 30, 70, 20, -1, \'Надпись\');
CreateCombo(510, 30, 200, 100, 4001);
CreateList(430, 60, 280, 120, 5001);
CreateFrame(200, 200, 200, 240, –1, \'Текстовые поля\');
CreateEdit(210, 220, 180, 20, 6001, \'Текст в текстовом поле\');
CreateMemo(210, 250, 180, 180, 6002, \'Текст в многострочном\'
+ #13 + #10 + \'текстовом поле\');
//Добавление строк в списки
AddToCombo(4001, \'Строка 1\');
AddToCombo(4001, \'Строка 2\');
AddToCombo(4001, \'Строка 3\');
AddToList(5001, \'Строка 1\');
AddToList(5001, \'Строка 2\');
AddToList(5001, \'Строка 3\');
ShowWindow(hMainWnd, SW_NORMAL);
//Запуск цикла обработки сообщений
while (Longint(GetMessage(mess, 0, 0, 0)) <> 0)
do begin
TranslateMessage(mess);
DispatchMessage(mess);
end;
end.
Листинг 2.21 заодно демонстрирует использование некоторых из приведенных ранее функций работы с элементами управления. Выглядит созданное окно так, как показано на рис. 2.3.
Рис. 2.3. Окно с элементами управления
Принцип построения функции обработки сообщений для этого окна приведен в листинге 2.22.