Внешний вид сайта:

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

Для уменьшения размера исполняемой программы, форму можно, как вариант, загружать из ресурсов. Для этого нужно создать форму с необходимыми компонентами в любом редакторе ресурсов и сохранить файл ресурсов с расширением *.res в папке с программой.

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

Создаем прект 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.

Здесь можно скачать исходный код программы.

Комментарии

Нет комментариев. Ваш будет первым!