微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Delphi的OLE自动化过程中使Word不可见

从我们的应用程序,我们使用OLE自动化来构建一个相当复杂的Word文档.我希望在制作文档时使Word不可见,因为有很多粘贴和插入需要相当长的时间.

我使用以下代码建立Word连接:

function ConnectToWord : TWordAutomationResult;
begin
  WordApp := TWordApplication.Create(nil);

  try
    WordApp.Connect;
    WordApp.Visible := false; 
  except on E: Exception do
    begin
      Result := waeErrorConnectingToWord;
      exit;
    end;
  end;
end;

我使用以下代码打开现有文档,然后由我的应用程序编辑.

function TWordAUtomation.opendocument(aFileName: string) : WordDocument;
var vFileName,vConfirmConversions,vReadOnly,vAddToRecentFiles,vPasswordDocument,vPasswordTemplate,vRevert,vWritePasswordDocument,vWritePasswordTemplate,vFormat,vEncoding,vVisible,vOpenConflictDocument,vOpenAndRepair,vWdDocumentDirection,vNoEncodingDialog  : OleVariant;
begin
  Result := nil;
  if not FileExists(aFileName) then exit;

  vFileName                := aFileName;
  vConfirmConversions      := True;
  vReadOnly                := False;
  vAddToRecentFiles        := False;
  vPasswordDocument        := EmptyParam;
  vPasswordTemplate        := EmptyParam;
  vRevert                  := True; 
  vWritePasswordDocument   := EmptyParam;
  vWritePasswordTemplate   := EmptyParam;
  vFormat                  := wdOpenFormatAuto;
  vEncoding                := EmptyParam;
  vVisible                 := False; //Document should be invisible
  vOpenConflictDocument    := EmptyParam;
  vOpenAndRepair           := EmptyParam;
  vWdDocumentDirection     := EmptyParam;
  vNoEncodingDialog        := EmptyParam;

  Result := WordApp.Documents.Open(vFileName,vNoEncodingDialog);
end;

它适用于我的电脑! (TM值)

对于我们的一些客户,Word在编辑过程中仍然可见.有什么理由可以做到这一点?据我所知,使用某种远程计算的客户(如托管客户端等)会出现问题.是否有一些其他属性可以处理仅在远程桌面连接等情况下有效的应用程序可见性?我对这些事情不是很了解:-(

解决方法

我正在为我们的软件维护Word自动化,并且还有关于Citrix客户端中弹出Word窗口的报告.我不知道是什么导致这种情况以及如何摆脱它.

只有一种方法可以模拟Word再次可见,并且在应用程序处理时打开Word文档.但我不认为这是你的问题的原因.

PS:您调用TWordApplication.Connect然后将Visible设置为False.知道当你调用Connect并且你没有更改ConnectKind时,它将连接到正在运行的Word实例.当您的客户正在编辑文档时,该文档将突然消失.也许最好将ConnectKind设置为NewInstance,这样您就可以使用新的winword.exe进程.现有的winword.exe将保留给您的客户端,并且当您的应用程序正在处理另一个时,他可以继续处理他的文档.

当然,这种方法也有一些缺点:

>当您的客户端打开一个新的Word文档时,它将在您的Word实例中打开>您可以在normal.dot上被另一个应用程序修改时出错

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐