宿主的功用:
裝載.dfm檔案動態產生表單;
註冊動態產生表單中的類,對象,屬性,方法,函數,從而讓指令碼引擎能夠操作它們。
下面以TMS SCRIPTER STUDIO為例:
unit uMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, atScript, atPascal;
type
TFormMain = class(TForm)
MainMenu1: TMainMenu;
Scripter: TatPascalScripter;
m1: TMenuItem;
N11: TMenuItem;
N21: TMenuItem;
procedure N11Click(Sender: TObject);
procedure N21Click(Sender: TObject);
private
{ Private declarations }
procedure LoadScript(Sender: TComponent; const DFMFile, PSCFile,
InitProc: string);
// params: Sender--宿主表單 DFMFile--介面指令檔 PSCFile--業務指令碼 InitProc--呼叫指令碼的初始化方法
public
{ Public declarations }
end;
var
FormMain: TFormMain;
implementation
{$R *.dfm}
uses uClass, Unit1, Unit2;
procedure TFormMain.LoadScript(Sender: TComponent; const DFMFile, PSCFile,
InitProc: string);
begin
uClass.LoadFromDFM(DFMFile, Sender); // 裝載介面
Scripter.AddComponents(Sender); // 讓指令碼認識表單中的對象
uClass.PianLiComps(Sender, Scripter);
Scripter.SourceCode.Clear;
Scripter.SourceCode.LoadFromFile(PSCFile); // 裝載業務
scripter.ExecuteSubroutine(InitProc); // 呼叫指令碼的初始化方法
end;
procedure TFormMain.N11Click(Sender: TObject);
begin
LoadScript(form1, '1.dfm', '1.psc', 'init');
end;
procedure TFormMain.N21Click(Sender: TObject);
begin
LoadScript(Form2, '2.dfm', '2.psc', 'init');
end;
end.