我(自豪地)使用 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 对象?