Формы можно хранить в длл-ках:
//-------------------------------
Текст DLL library DLLWithForm;
uses
SysUtils,
Classes,
DLLFormU in 'DLLFormU.pas' {DLLForm};
{$R *.RES}
exports
ShowModalForm,ShowForm;
begin
end.
//----------------------------
Текст формы в DLL
unit DLLFormU;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, Buttons;
type
TDLLForm = class(TForm)
BitBtnl: TBitBtn;
private
{ Private declarations }
public
{ Public declarations }
end;
// Объявление экспортируемых подпрограмм
function ShowModalForm: Integer;
procedure ShowForm(aHandle: THandle);
var
DLLForm: TDLLForm;
implementation
{$R *.DFM}
// Модальный вызов
function ShowModalForm: Integer;
begin
DllForm := TDllForm.Create(Application);
Result := DLLForm.ShowModal;
DLLForm.Free;
end;
// Немодальный вызов
procedure ShowForm(Appl, Form: THandle);
begin
Application.Handle := Appl; // Замена объекта
Application.DllForm := TDllForm.Create(Application);
DLLForm.Show
end;
end.
//----------------------------------
Текст вызывающей программы
unit TestMainU;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TTestMain = class(TForm)
Buttoni: TButton; // Открыть в модальном режиме
Button2: TButton; // Открыть в немодальном режиме
label I: TLabel;
procedure ButtonlClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
TestMain: TTestMain;
implementation
{$R *.DFM}
function ShowModalForm: Integer;
external 'DLLWithForm';
procedure ShowForm(Appl, Form: THandle);
external ' DLLWithForm';
// Модальный вызов
procedure TTestMain.ButtonlClick(Sender: TObject);
begin
label1.Caption := 'ModalResult = ' + IntToStr(ShowModalForm);
label1.Show; // Показываем результат вызова
end;
// Немодальный вызов
procedure TTestMain.Button2Click(Sender: TObject);
begin
Buttoni.Enabled := = False;
Button2.Enabled := False;
label1.Hide;
ShowForm(Application.Handle, Self.Handle);
end;
end.