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

Sve*_*sli 6 delphi ole ms-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;      
Run Code Online (Sandbox Code Playgroud)

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

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, vConfirmConversions, vReadOnly, vAddToRecentFiles, vPasswordDocument, vPasswordTemplate, vRevert, vWritePasswordDocument, vWritePasswordTemplate, vFormat, vEncoding, vVisible, vOpenAndRepair, vWdDocumentDirection, vNoEncodingDialog);
end;
Run Code Online (Sandbox Code Playgroud)

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

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

The*_*Fox 4

我正在维护我们软件的 Word 自动化,并且还收到了 Citrix 客户端中弹出 Word 窗口的报告。我不知道是什么原因导致这种情况以及如何消除它。

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

PS:您调用 TWordApplication.Connect,然后将 Visible 设置为 False。请注意,当您调用 Connect 并且未更改 ConnectKind 时,它将连接到正在运行的 Word 实例。当您的客户正在编辑文档时,该文档会突然消失。也许最好将 ConnectKind 设置为 NewInstance,以便您始终在新的 winword.exe 进程中工作。现有的 winword.exe 仍可供您的客户使用,并且在您的应用程序处理其他文档时,他可以继续处理他的文档。

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

  • 当您的客户打开一个新的 Word 文档时,它会在您的 Word 实例中打开
  • 当其他应用程序修改 Normal.dot 时,您可能会收到错误消息