Листинг 10. Текст вызывающей программы

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. 

возврат