Delphi 对 Microsoft Word ActiveX/OLE 组件的调用是否异步以及(如果是)如何检测调用的完成?

问题描述 投票:0回答:0

我(自豪地)使用 Delphi 6,但我想这可能是所有 Delphi 版本(Delphi 7、Delphi 2009、Delphi XE 等)的问题。

我有以下代码模板:

uses Word_TLB;
...
property WordDocument: _Document read GetWordDocument write FWordDocument;
//This is:
// Word_TLB:
//  _Document = interface(IDispatch)
//    ['{0002096B-0000-0000-C000-000000000046}']
...
WordApplication.Visible := True;
WordApplication.ScreenUpdating:=true;
...
//Some bunch of commands that writes into Word document - there is dataset, 
//over which the iterations happens. Entire dataset is written into the Word document - 
//but not much, just 1-2 pages, no more
WordDocument.Tables.Item(1).Cell(irow, 1).Range.Text='Some data';
WordDocument.Tables.Item(1).Rows.Add(EmptyParam);

//Print Preview
WordDocument.PrintPreview;

此代码将数据集写入 Word 文档,然后显示其打印预览。问题是在某些计算机和某些情况下打印预览不完整,但关闭打印预览和保存文档没有问题 - 保存的文档包含所有数据。

我的问题是关于对 Word ActiveX/OLE 对象的调用

...Range.Text
,
...Rows.Add(EmptyParam)
- Word 文档是同步还是异步执行它们?我猜异步执行发生了,这就是为什么
PrintPreview
显示不完整的视图,但 Word 继续执行命令队列,这就是为什么保存没有问题。

那么 - Word ActiveX/OLE 命令是异步的吗?如果是这样,如何检测它们执行的结束,以便我可以调用

PrintPreview
确定没有处理发生?类似于 Delphi 的
Application.ProcessMessages
但只是针对 Word ActiveX/OLE 对象?

delphi ms-word activex ole activexobject
© www.soinside.com 2019 - 2024. All rights reserved.