unit TestMainU; interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TTestMain = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
// Следующая процедура обрабатывает сообщение WM_USER,
// которое посылает форма из DLL в момент своего закрытия
procedure WMUser(var Msg: TMessage);
message WM_USER; end; var TestMain: TTestMain; implementation {$R *.DFM}
function ShowModalForm: Integer; External 'DLLWithForm'; procedure ShowForm(Appl, Form: THandle);
External 'DLLWithForm'; procedure FreeForm; External 'DLLWithForm'; procedure TTestMain.Button1Click(Sender: TObject);
// Модальный вызов
begin Button2.Enabled := False; label1.Caption := 'ModalResult = '+IntToStr(ShowModalForm);
label1.Show; // Показываем результат вызова Button2.Enabled := True end; procedure TTestMain.Button2Click(Sender: TObject);
// Немодальный вызов
begin Button1.Enabled := False; Button2.Enabled := False; Button3.Enabled := True; label1.Hide; ShowForm(Application.Handle, Self.Handle);
end; procedure TTestMain.Button3Click(Sender: TObject);
// Закрыть форму
begin FreeForm; Button1.Enabled := True; Button2.Enabled := True; Button3.Enabled := False; end; procedure TTestMain.WMUser(var Msg: TMessage);
// Сообщение из формы DLL о ее закрытии
begin Button3.Click end; end.