在 TOleContainer 中嵌入多个 MS Word 实例

2024-01-04

这让我很头疼...

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

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

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

我认为一种替代方法可能是创建我自己的 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 并在表单激活和停用时激活和停用。请参阅我的问题已接受的答案:Word 自动化后上下文菜单消失 https://stackoverflow.com/questions/2949817/context-menu-disappears-with-word-automation

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 TOleContainer 中嵌入多个 MS Word 实例 的相关文章

  • 每次 TDbGrid 的选定位置更改时都会触发什么事件?

    我的项目中有一个 TDbGrid 每次更改所选行时我都试图触发一个事件 行中的任何更改都已经更新了链接到同一数据源的所有数据感知控件 但还需要进行其他更改 我需要一个事件处理程序 我认为 OnColEnter 会起作用 根据帮助文件 它在以
  • 如何更改 TPageControl 上标签的方向?

    我是 Delphi 的新手 再次强调 我在 1994 年就使用过 Delphi 我现在有 Delphi 2009 Pro 来自Java 我发现对象继承非常晦涩 我的用户想要选项卡位于左侧的选项卡式页面 但是 TPageControl 不允许
  • Delphi 将面板流传输至文件

    今天我有一个关于将表单的一部分流式传输到文件的问题 在此示例中 我使用 Tmemo 而不是文件来查看流 这是我的表格 表单右上角的面板有一些控件 如标签 编辑等 使用 保存面板 按钮将面板保存在 TStream 上 这里是代码 proced
  • 查找字符串是否在列表中的最佳方法(没有泛型)

    我想做这样的事情 Result MyString in string1 string2 string3 string4 这不能与字符串一起使用 我不想做这样的事情 Result MyString string1 or MyString st
  • delphi THashSHA2 在大文件上返回错误的 SHA256

    Data Cloud CloudAPI pas has class function TCloudSHA256Authentication GetStreamToHashSHA256Hex const Content TStream str
  • VB 脚本 Documents.Open 抛出 424 错误

    所以我有一个vbs脚本 Function test2open sSourceFile sPDFFile Dim wApp As Word Application Dim wDoc As Word Document logStream wri
  • Delphi XE2,vcl样式重新创建窗口句柄

    在运行时应用新样式后 我的应用程序的 MainForm 创建一个新的窗口句柄 有什么方法可以阻止此操作或重新分配句柄 因为我收到了大量以下错误 系统错误 代码 1400 无效的窗口句柄 有什么方法可以操纵强制分配新句柄的进程吗 我通过执行以
  • 缓冲区为空,但 IdTCPClient.IOHandler.InputBufferIsEmpty 为 false

    我在使用 idTCPClient 从 telnet 服务器读取缓冲区的以下代码中遇到问题 procedure TForm2 ReadTimerTimer Sender TObject var S String begin if IdTCPC
  • 无法在 SAMSUNG GALAXY S7 EDGE 上调试

    为什么我无法在 RAD STUDIO 10 Seattle upd 1 中的 SAMSUNG GALAXY S7 EDGE ANDROID 6 0 1 上调试我的应用程序 当我调试时 设备上的应用程序启动 但 RAD STUDIO Delp
  • 安装软件包时出现无法加载软件包 %s 错误

    我正在 Delphi 2007 上进行测试 我的小组项目由 2 个包组成 包运行 bpl 它被标记为 仅运行时 并包含一个名为 uMyTestRun pas 的单元 其中定义了一个空的 TFrame 后代 unit uMyTestRun i
  • 如何从后台线程有效地对 Delphi 6 框架或表单执行图像流预览?

    我有一个 Delphi 6 应用程序 用于接收和处理来自外部摄像头的图像流 我将代码放在后台线程上 因为它占用大量 CPU 而且我不希望它干扰在主线程上运行的用户界面代码 我想使用我从相机的 JPEG 帧创建的 TBitmap 来更新表单或
  • Delphi 中的非字母排序

    我正在尝试按特定顺序对字符串列表进行排序 我尝试用 B C A 来订购 而不是 A B C 我已经按照我需要的顺序声明了一个 const 数组 我尝试过 CustomSorte 但我不明白如何编写该函数 我现在正在尝试使用 for 循环 但
  • 将数据从 DLL 传递到应用程序时出现问题

    我对如何在我的场景中正确使用指针感到有点困惑 我有一个 DLL 其中包含一些嵌入式资源 我在此 DLL 中公开了一个函数 该函数将这些资源之一的二进制数据传递回其调用应用程序 在本例中 我嵌入了 JPG 图像文件 我的 DLL 确实将文件正
  • 如何取消注册我的应用程序的文件格式?

    在 Windows 10 中的 Delphi 10 4 2 win 32 VCL 应用程序中 我注册了 ICO我的图形应用程序的文件格式使用DSiWin32 DSiRegisterUserFileAssoc https github com
  • 光标不工作时完成课程

    我在 2010 年和 XE2 中广泛使用了 Delphi 中的 Complete Class at Cursor 函数 最近 在安装 XE2 的 Update 4 后 Cursor 上的 Complete Class 停止工作 经过一些研究
  • Apache POI 编号列表

    我在用apache poi在 MS Word 文档中写入一些数据 我已经花了几个小时试图弄清楚如何创建编号列表但我还没有取得任何成果 我已经经历过this https stackoverflow com questions 31310020
  • 如何获取已打开连接的套接字 ID/句柄/描述符? (.NET、C++、德尔福)

    我的问题已在标题中说明 我到底该怎么做呢 我有一个开放的连接 我想 劫持 它并通过它发送我的自定义消息 据我了解 这是通过套接字及其处理程序完成的 任何语言都可以 但首选 C NET 谢谢 UPDATE 我到底想要实现什么 我想为 post
  • 挂钩到文件,实时读取新内容

    我如何连接到另一个程序当前正在使用的文件 该程序不断向该文件写入内容 假设有一个 10 行的文本文件 当我启动我的应用程序时 每次写入程序保存其内容时 它都必须检测并读取其中的任何内容 可以在不不断检查文件大小 日期的情况下完成此操作吗 您
  • 从 pdf 和 word 文件中提取文本

    如何在 C 中从 pdf 或 word 文件中提取文本 删除粗体 图像和其他富文本格式媒体 您可以使用专为索引服务设计 由索引服务使用的过滤器 它们旨在从各种文档中提取纯文本 这对于在文档内部进行搜索非常有用 您可以将其用于 Office
  • 良好的 Delphi Prism 在线资源

    在 Google 上搜索 delphi prism delphi prism 资源 或 delphi prism 代码片段 几乎找不到好的网站 是否有任何好的编程网站提供大量有关 Delphi Prism 的代码片段和教程 提前致谢 oma

随机推荐

  • Heroku、Grails:如果使用多个 Web dyno,则会缺少资源

    我已经创建了 grails 应用程序并将其上传到 heroku 中 如果我使用 heroku 规模网络 1 一切看起来都不错 但如果我跑 heroku 规模网络 2 一些静态资源消失了 从日志中我可以看出 web 2 dyno 中的所有静态
  • 阴影位于文本上方

    我正在向 Xamarin UWP 项目添加阴影 但问题并不是真正特定于 Xamarin 而是一般来说是 UWP bool IsShadowSupported gt ApiInformation IsApiContractPresent Wi
  • 无法使用带有 connect 的 ref 调用子方法

    我想从子组件调用一个方法 按照这里的建议从父方法调用子方法 https stackoverflow com questions 37949981 call child method from parent 但是 当子组件使用来自react
  • 在 while 循环中延迟

    所以我想在 jquery 中执行延迟的 ajax 请求 直到收到特定的服务器响应 非空 我该怎么做呢 while data response null ajax done function data function doUntilResu
  • Python将列表分成n块

    我知道这个问题已经被讨论过很多次了 但我的要求不同 我有一个类似的列表 range 1 26 我想把这个列表分成固定数量n 假设 n 6 gt gt gt x 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1
  • 联合和结构初始化

    我偶然发现了一段基于 C 语言联合的代码 代码如下 union struct char ax 2 char ab 2 s struct int a int b st u 12 1 printf d d u st a u st b 我只是不明
  • 以最少的比较次数对数组进行排序

    我的计算机科学作业需要一些帮助 我需要编写一个排序例程 在最坏的情况下使用 7 次比较对长度为 5 的数组进行排序 我已经证明 由于决策树的高度 将需要 7 次比较 我考虑使用决策树 硬编码 但这意味着该算法非常复杂 并且我的导师暗示这不是
  • GWT MVP架构优势

    我正在学习 GWT 并且在多个地方读到 使用 MVP 架构最适合开发 GWT 应用程序 我还读到 使用 MVP ARCH 进行测试很容易 有人可以解释一下为什么使用 MVP 架构进行测试很容易 另外 我正在使用 MVP 开发一个项目 我发现
  • for 循环的简洁数学符号

    如果这不属于这里 我很抱歉 但我正在寻找一种方法来描述我的代码的数学背景 使用 numpy 我对两个以上的维数组求和 a shape 10 5 2 b shape 5 2 c a b c shape 10 5 2 是否有一个纯粹的数学符号
  • 如何将多个 actor 作为源附加到 Akka 流?

    我正在尝试构建并运行一个 akka 流 在 Java DSL 中 其中 2 个 actor 作为源 然后是一个合并结点 然后是 1 个接收器 Source
  • 在 Flutter 的 in_app_purchase 插件中使用 sandbox = true 调用 buyNonConsumable 方法,并在调用 queryPastPurchases 时获取 sandbox = false

    我正在测试 Flutter 的 in app purchase 插件 https github com flutter plugins tree master packages in app purchase https github co
  • 使用 ASP.NET Core 3 流式传输视频

    我目前正在 ASP NET Core 3 中构建 API 作为我使用 NET Core 的第一个项目 我目前正在尝试将视频发送到我的 React js 前端以在浏览器中观看 上传文件和视频确实可以正常工作 您在下面看到的方法也已经将文件发送
  • Scala Spark 将多个列对分解为行

    如何将多个列对分解为多行 我有一个包含以下内容的数据框 client type address type 2 address 2 abc home 123 Street business 456 Street 我想要一个最终的数据框 如下所
  • struct.error:解包需要 4 个字节的缓冲区

    我想将设备中的数据从咬合转换为浮动 我使用这个答案中的代码 浮动字节数 https stackoverflow com questions 5415 convert bytes to floating point numbers in py
  • Django 模板未加载

    我有一个名为 src 的项目和名为 app 的应用程序 并且我的应用程序中有一个模板文件夹 在我的模板文件夹中 我有另一个名为 Pages 的文件夹 我的 html 页面 base html 和 view html 驻留在其中 我的 vie
  • SwiftUI 文本视图不显示不可显示的字符

    我有 Swift 代码 可以解析 LLDP 链路层发现协议 帧 其中包括可以由供应商任意定义的字段 有时它是一个字符串 有时它是任意数据结构 以下是我如何获取数据并将其强制转换为具有 utf8 编码的字符串 let ouiString St
  • C# 读取USB描述符

    如何用C 读取USB描述符 我发现LibUSB NET但我无法像示例中那样获取 USB 设备 UsbRegDeviceList allDevices UsbDevice AllDevices 它返回计数 0 None
  • spring中使用@Bean和@Component的名称和别名

    我们如何定义 a 单一名字b 多个名称 别名 使用 Bean 和 Component 注释 在 XML 中我们这样定义 对于单个名称
  • 存储时间信息:需要时区吗?

    我很想知道我正在考虑的是否是不好的做法 或者因为这是一个特定且经过深思熟虑的选择 所以它实际上是一个不错的主意 我想存储特定城市发生的事件的日期信息 我想将该数据存储为 UTC 时间戳 简单地存储时间戳和城市 ID 国家 ID 与特定时区相
  • 在 TOleContainer 中嵌入多个 MS Word 实例

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