В DLL-библиотеке можно хранить не только процедуры и функции, но и экранные формы с визуальными компонентами. Это позволяет в полной мере реализовать модульную структуру программы, когда к головному модулю подсоединяются DLL, реализующие те или иные возможности. По такому принципу строятся многие расширяемые системы, к которым можно добавлять все новые и новые модули.
Добавим форму в проект geta.dll. Активируем его и создадим новую форму (команда меню FileàNewàForm). Сохраним созданный файл в директории Z:\111111\Иванов\DLL под произвольным именем, скажем, main.pas. Переименуем созданную форму (свойство Name) в DLLForm. В файле main.pas в разделе IMPLEMENTATION опишем процедуру:
PROCEDURE ShowModalForm;
BEGIN
DLLForm := TDllForm.Create(Application);
DLLForm.ShowModal;
DLLForm.Free
END;
Данная процедура выполняет трюк барона Мюнхгаузена с поднятием самого себя за волосы: она создает форму DLLForm (метод Create), отображает ее (метод ShowModal) и после закрытия пользователем выгружает из памяти (метод Free).
В раздел описаний надо добавить заголовок процедуры ShowModalForm, чтобы она была доступна из файла geta.dll:
type
TDLLForm = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
procedure ShowModalForm;
var
DLLForm: TDLLForm;
implementation
…
В файле geta.dll в раздел EXPORTS добавляем имя экспортируемой процедуры ShowModalForm:
EXPORTS
ShowModalForm, GetArea;
Библиотека с формой готова. Кстати, на форму можно поместить любые компоненты. Для вызова формы из библиотеки применим статическое связывание. В проекте project1.dpr поместим на форму еще одну кнопку и в ее обработчике запишем:
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowModalForm
end;
А после оператора IMPLEMENTATION запишем:
procedure ShowModalForm; FAR; EXTERNAL 'geta';
Готово! При нажатии на кнопку в программе Project1.exe на экране появится вторая форма, хранящаяся в библиотеке geta.dll.