|
发表于 2008-8-19 09:15:18
|
显示全部楼层
DispatchHelper
平台上访问接口都是通过DispatchHelper实现的,通过创建DispatchHelper的实例,调用这个实例的方法来访问接口的属性或者调用接口的方法。
1.1. 相关属性和方法
1. constructor create(idispatch: TObject); overload;
创建接口对象的实例
2.function InvokeMethod(Name: string; Params: array of TObject): TObject; overload;
调用接口的Name方法,用Params作为参数
3.function InvokeMethod(Name: string; ParamsByRef: array of Boolean; Params: array of TObject): TObject; overload;
调用接口的Name方法,用ParamsByRef作为传值参数,用Params作为传参参数
4.function PropertyGet(Name: string; Params: array of TObject): TObject; overload;
获取接口的Name属性值作为函数返回值
5.procedure PropertyPut(Name: string; Params: array of TObject); overload;
设置接口的Name属性值
代码:
1 var
2 o: Object;
3 app, docs, doc: System.DispatchHelper;
4 begin
5 //创建接口对象o
6 o := ComObj.CreateOleObject('Word.Application');
7 //根据接口对象o创建接口app
8 app := System.DispatchHelper.Create(o);
9 app.PropertySet('Visible', [False]);
10 docs := System.DispatchHelper.Create(app.PropertyGet('Documents', []);
11 docs.InvokeMethod('Open', []);
12 ...
13 //释放接口对象。
14 (o as System.IDisposable).Dispose;
15 end;
=========================================
procedure TMainForm.OpenWordClick(Sender: TObject);
var
lPath: String;
lFileName: String;
begin
if OpenDialog1.Execute then
begin
lFileName := OpenDialog1.FileName;
FWord := ComObj.CreateOleObject('Word.Application');
FApp := DispatchHelper.Create(FWord);
FApp.PropertyPut('Visible', [True]);
FDocs := DispatchHelper.Create(FApp.PropertyGet('Documents', []));
FDocs.InvokeMethod('Open', [lFileName]);
end;
end;
procedure TMainForm.CloseWordClick(Sender: TObject);
var
lAw: DispatchHelper;
begin
lAw := DispatchHelper.Create(FApp.PropertyGet('ActiveWindow', []));
lAw.InvokeMethod('Close', []);
end;
procedure TMainForm.replaceClick(Sender: TObject);
var
lSelection, lFind, lReplacement: DispatchHelper;
begin
lSelection := DispatchHelper.Create(FApp.PropertyGet('Selection', []));
lFind := DispatchHelper.Create(lSelection.PropertyGet('Find', []));
lReplacement := DispatchHelper.Create(lFind.PropertyGet('Replacement', []));
lFind.InvokeMethod('ClearFormatting', []);
lReplacement.InvokeMethod('ClearFormatting', []);
lFind.InvokeMethod('Execute', [edit1.Text, False, False, False, False, False, True, 1, False, edit2.Text,
2, False, False, False, False]);
end; |
|