gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:00:22 30 4
gpt4 key购买 nike

在我们的应用程序中,我们使用 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, vConfirmConversions, vReadOnly, vAddToRecentFiles, vPasswordDocument, vPasswordTemplate, vRevert, vWritePasswordDocument, vWritePasswordTemplate, vFormat, vEncoding, vVisible, vOpenAndRepair, vWdDocumentDirection, 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 时遇到错误

关于delphi - 如何在 Delphi 的 OLE 自动化过程中使 Word 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3912648/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com