Welcome 微信登录
编程资源 图片资源库

首页 / 软件开发 / Delphi / 第八章-对象链接与嵌入(二)(4)

第八章-对象链接与嵌入(二)(4)2007-05-078.4.3 自动化另一程序

每个服务器在系统注册中有一个叫ProgID的关键定,主要用以控制器辨识服务器。任何控制器可以用ProgID号来创建OLE对象实例。例程AutoForm是控制器程序,它在其主窗体创建了OLE对象实例。

procedure TMainForm.FormCreate(Sender : TObject);

begin

try

MemoEdit := CreateOleObject("MemoEdit.Application");

except

MessageDlg(

"An instance of the "MemoEdit Application"OLE Automation Class could

not be created,Make sure that the MemoEdit application has been registered

using a "MemoEdit|regserver"command line",

mtError,[mbok],0)

Halt;

end;

end;

控制器创建了OLE自动化对象实例后,可对其进行操纵。OLE自动对象包括属性和方法,虽然OLE自动化对象与面向对象Pascal中的对象不是同一概念,但Delphi允许使用与类似的语法对OLE对象的方法进行调用。

AutoForm的很多过程引用了OLE自动化对象的方法:

procedure TMainForm,TileButtonClick(Sender : Tobject);

begin

MemoEdit,TileWindow;

end;

其中TileWindows是OLE对象TMemoApp中定义的方法。

AutoForm还通过TMemoApp的NewMemo方法获得了对服务器内部OLE对象TMemoDoc 的引用。

procedure TMainForm,CreateButtonClick(Sender : TObject);

var

I : Integer;

begin

CloseMemo

for I := 1 to 3 do Memos[2] := MemoEdit.NewMemo;

end;

其中NewMemo在MemoAuto单元中定义如下:

function IMemoApp.NewMemo : Variant;

begin

Result := MainForm,CreateMemo(" "),OleObject;

end;

控制器在获得服务器的内部OLE对象后,可以引用其方法:

procedure TMainForm.AddTextButtonClick(Sender,TObject);

var

I : Integer;

begin

for I := 1 to 3 do

if not var IsEmpty(Memo[I]) then

Memo[I],Insert{"This text was added through OLE Automation"#13#10);

end;

Insert是TMemoDoc中定义的方法,用以在子窗体中插入字符串。