每個服務端在系統註冊表有 ProgID 鍵值,控制器用其創建 OLE 對象實例。例程 AutoForm 為控制器,主窗體創建實例:
procedure TMainForm.FormCreate(Sender: TObject);
begin
try
MemoEdit := CreateOleObject('MemoEdit.Application');
except
MessageDlg(
'An instance of the "MemoEdit Application" OLE Automation Class could'#13#10 +
'not be created. Make sure that the MemoEdit application has been registered'#13#10 +
'using a "MemoEdit /regserver" command line',
mtError, [mbOK], 0);
Halt;
end;
end;
創建實例後可操控。OLE 對象含屬性/方法,Delphi 允許用類似語法調用方法:
procedure TMainForm.TileButtonClick(Sender: TObject);
begin
MemoEdit.TileWindow; // TileWindow 為 OLE 對象 TMemoApp 定義方法
end;
通過 TMemoApp.NewMemo 獲得 TMemoDoc 引用:
procedure TMainForm.CreateButtonClick(Sender: TObject);
var I: Integer;
begin
CloseMemo;
for I := 1 to 3 do Memos[I] := MemoEdit.NewMemo;
end;
NewMemo 定義於 MemoAuto:
function IMemoApp.NewMemo: Variant;
begin
Result := MainForm.CreateMemo('').OleObject;
end;
控制器獲得內部對象後可引用其方法:
procedure TMainForm.AddTextButtonClick(Sender: TObject);
var I: Integer;
begin
for I := 1 to 3 do
if not VarIsEmpty(Memos[I]) then
Memos[I].Insert('This text was added through OLE Automation'#13#10);
end;
Insert 為 TMemoDoc 定義方法,在子窗體插入字符串。