Как создать форму из ресурсов

Создаем прект File -> New -> Application. Удаляем из него форму и сохраняем в папку проекта. Открываем модуль проекта и начнем создавать программу.
Первым делом добавим используемые модули:
uses Windows,Messages,SysUtils;
Определим константы для нашей программы (имена кнопок, полей ввода, заголовок программы и т.д.).
const AppTitle: PChar = 'Form from Resources'; szCaption: PChar = 'Information'; szMessage: PChar = 'Была нажата кнопка ОК'; szEdit: PChar = 'Текст в поле ввода'; DIALOG = 100; IDC_EDIT = 1001; IDC_LABEL = 1002; IDC_OK = 1003; IDC_CLOSE = 1004;
ID элементов управления можно посмотреть в редакторе ресурсов. У меня DIALOG=100 (диалоговое окно), IDC_OK=1003 (кнопка ОК), IDC_CLOSE=1004 (кнопка Выход), IDC_LABEL=1002 (метка) и IDC_EDIT=1001 (поле ввода).
Далее определяем переменные экземпляра программы и иконки.
var Inst,hIcon:integer;
Пишем процедуру обработки окна:
function DlgProc(hWin,uMsg,wParam,lParam: integer): integer; stdcall;
begin
result:= 0;
case uMsg of
WM_INITDIALOG: // Инициализация диалогового окна
begin
hIcon:= LoadIcon(hInstance,'MAINICON'); // загружаем иконку из ресурсов
SendMessage(hWin, WM_SETICON, ICON_BIG, hIcon); // назначаем ее нашему окну
SetWindowText(hWin, AppTitle); // Выводим заголовок окна
end;
WM_COMMAND:
begin
if wParam = IDC_OK then
begin
// если нажата кнопка OK
MessageBox(hWin, szMessage, szCaption, MB_OK+MB_ICONINFORMATION);
SetDlgItemText(hWin,IDC_EDIT,szEdit);
end
else if wParam = IDC_CLOSE then
// Если нажата кнопка выхода из программы
EndDialog(hWin,0);
end;
WM_CLOSE: // При закрытии окна, щелкнув по крестику закрытия окна
EndDialog(hWin,0);
end;
end;
Ну, и инициализация всей программы, собственно с этих строк программа и начнет свою работу.
begin
{$R dialog.res}
Inst:= hInstance;
asm
push 0
push offset DlgProc
push 0
push DIALOG
push Inst
call DialogBoxParam
end;
end.
Первым делом мы подключили файл ресурсов директивой $R, затем назначаем переменной Inst хэндл нашего экземпляра приложения. Далее идет ассемблерная вставка, которой мы создаем диалоговое окно. DIALOG - указатель на нашу форму в ресурсах. DlgProc - цикл обработки сообщения, т.е. процедура обработки диалогового окна. Описание функции DialogBoxParam можно посмотреть в справке Delphi.
Здесь можно скачать исходный код программы.
Комментарии