gpt4 book ai didi

delphi - 在 TOleContainer 中嵌入多个 MS Word 实例

转载 作者:行者123 更新时间:2023-12-03 14:53:27 24 4
gpt4 key购买 nike

这让我头疼......

我正在开发的delphi应用程序使用TOLEContainer中的Word打开一个或多个表单。我遇到的问题是,当使用嵌入的 Word 实例打开多个表单时,一个实例的控件会影响所有其他实例,而第一个实例上的控件不可用。

例如,第一个 TOleContainer 的控件仍然可见,并且似乎已启用,但不起作用,在第一个实例中选择文本并使用第二个实例中的控件会导致更改反射(reflect)在第一个实例中(清晰如泥?!?)一切都非常困惑,所以我附上了一张图片:

OleControls toolbar controlling both instances of word

目的是让单词的每个实例都嵌入到它自己的形式中并利用它自己的控件。那么是什么导致了我的不良行为以及我能采取什么措施呢?我确信这很简单,比如捕获 OleContainer 的“activate”属性和设置(我不知道要设置什么),但我对此没有运气。

我认为一种替代方法可能是创建我自己的 TWordApplication 实例,并通过 Windows.SetParent() 重新设置父级(这确实有效,顺便说一句,每个实例确实可以控制自己,但需要对应用程序进行大量返工)或嵌入 OleContainer...我可以将 TWordApplication 实例嵌入到它们自己的 OleContainer 中吗?如果是这样怎么会这样?或者更改 CreateObjectFromFile 的默认打开行为(但我认为这是由 COM 服务器(即 Word)控制的)...

供引用...通过实例化几个表单来测试以下内容...

// This embed into an OleContainer, but opening two forms 
// leaves me with one that has working controls and another
// that has non-working controls (this code on it's own form)
// If this code is on TForm2 and you create two instances of TForm2
// Word behaves incorrectly
OleContainer1.CreateObjectFromFile('C:\Test.docx', false);
OleContainer1.AutoActivate := aaGetFocus;
OleContainer1.DoVerb(ovOpen);

OleContainer1.Run;


// To embed Word on a TPanel (this code on it's own form)
// This code on TForm3, create two instance of TForm3 to see
// word work independently as desired
wordApp := TWordApplication.Create(Self);
wordApp.ConnectKind := TConnectKind.ckNewInstance;
wordApp.Caption := IntToStr(AppId);
wordApp.Visible := True;

WordHandle := FindWindow('OpusApp', PWideChar(wordApp.Caption));

Windows.SetParent(WordHandle, Panel1.Handle);

if AppId = 1 then
begin
lFilename := 'C:\Test.docx';
end else begin
lFilename := 'C:\Test2.docx';
end;
wordApp.Documents.Open(lFileName, EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);

最佳答案

您可以尝试使用 IOleInPlaceActiveObject 并在表单激活和停用时激活和停用。请参阅我的问题已接受的答案:Context menu disappears with Word automation

关于delphi - 在 TOleContainer 中嵌入多个 MS Word 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14328411/

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