如何从 TOleContainer 中提取图元文件?

2023-12-08

我有一个带有 TOleContainer 控件的 Delphi (BDS 2006) 应用程序。它内部有一个 OLE 对象,即 MS Office 2003 中的 MS Equation 公式(名称“Equation.3”)。

如何从公式图像中提取矢量图元文件并将其插入网页或其他不支持 OLE 的文档中?

TOleContainer 内部只有“Equation.3”对象,没有其他可能性。 我尝试使用 .Copy 方法使其通过剪贴板,但它复制了一个空图像。


OLE 容器具有您可以访问的底层 IOLEObject 接口。您可以将其传递给OLEDraw与您自己的画布一起使用。您可以使用位图或图元文件画布,然后以您需要的格式保存图像。

OleDraw(OleContainer.OleObjectInterface, DVASPECT_CONTENT, Bmp.Canvas.Handle, R);


{
  DrawOleOnBmp
  ---------------------------------------------------------------------------
  Take a OleObject and draw it to a bitmap canvas.  The bitmap will be sized
  to match the normal size of the OLE Object.
}
procedure DrawOleOnBmp(Ole: IOleObject; Bmp: TBitmap);
var
  ViewObject2: IViewObject2;
  ViewSize: TPoint;
  AdjustedSize: TPoint;

  DC: HDC;
  R: TRect;
begin

  if Succeeded(Ole.QueryInterface(IViewObject2, ViewObject2)) then
  begin
    ViewObject2.GetExtent(DVASPECT_CONTENT, -1, nil, ViewSize);

    DC := GetDC(0);
    AdjustedSize.X := MulDiv(ViewSize.X, GetDeviceCaps(DC, LOGPIXELSX), 2540);
    AdjustedSize.Y := MulDiv(ViewSize.Y, GetDeviceCaps(DC, LOGPIXELSY), 2540);
    ReleaseDC(0, DC);

    Bmp.Height := AdjustedSize.Y;
    Bmp.Width := AdjustedSize.X;

    SetRect(R, 0, 0, Bmp.Width, Bmp.Height);

    OleDraw(Ole, DVASPECT_CONTENT, Bmp.Canvas.Handle, R);
  end
  else
  begin
    raise Exception.Create('Could not get the IViewObject2 interfact on the OleObject');
  end;

end;

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

如何从 TOleContainer 中提取图元文件? 的相关文章

  • 如何修复这个 delphi 7 编译错误 - “重复资源”

    我正在尝试编译我继承的 Delphi 7 项目 但收到此错误 错误 警告 重复资源 错误 类型 2 位图 ID 编辑 错误 文件 C 路径缩短 common CRGrid res 资源已保留 文件 c common raptree RES
  • 在 Delphi 中将对象转换为 OleVariant

    有没有办法在 OleVariant 中传递包装并解开 TObject 后代 我正在尝试跨自动化对象传递 TObject 我知道这不是一个好主意 但我没有更好的选择 该对象将在来自同一自动化 dll 的对象之间传递 如果这有什么区别的话 像这
  • 在网格上拖动时拖动图像更改

    我正在 StartDrag 上创建自定义 DragObject 的实例 procedure TForm1 GridStartDrag Sender TObject var DragObject TDragObject begin DragO
  • 无法访问扩展 Symfony\Bundle\FrameworkBundle\Controller\Controller 的控制器中的 Symfony2 容器

    原始问题 我已经阅读了 book http symfony com doc current book service container html 关于服务容器 我仍然感到困惑 因为几乎每次我尝试使用时 事情似乎都随机不起作用 this g
  • 如何将STL容器数据转储到gdb中?

    我无法在 gdb 中转储 STL 无序映射容器值 变量类型是 std unordered map var 我的 gdb 版本 7 7 1 GDB配置 configure host x86 64 linux gnu target x86 64
  • 通过“修改日期”确定文件夹中的哪个文件是最新的?

    我需要扫描特定文件夹中的最新文件 基本上检查修改日期以查看哪个是最新的 但请记住这些文件具有随机名称 这是我到目前为止得到的 procedure TForm1 Button1Click Sender TObject begin ftp Ho
  • 通过 VPN 容器路由 Docker 容器流量

    我在我的上安装了几个容器洛克Pro64 运行 openmediavault 的 ARMv8 处理器 rev 2 v8 版本 4 1 27 1 Arrakis 一切都运转良好 我使用的容器包括 Transmission Jellyfin Ra
  • 如何检查文件是否有备用数据流?

    Delphi 有没有办法检查文件是否有任何备用数据流 看一下 Win32 APIFindFirstStreamW https msdn microsoft com en us library windows desktop aa364424
  • 从不同的形式调用过程

    我正在使用 Lazarus 我有一个名为TForm1单元名称为 Unit 1 在这里我有一个名为mergeDATfile a shortint 这会产生一些东西 顺便说一句 我必须创建另一个名为TForm2里面有按钮 Button1 当它被
  • Vista 中的文本转语音

    我通过在 2000 NT XP 中使用 Delphi 创建 OLE 对象来做到这一点 如下所示 Voice CreateOLEObject SAPI SpVoice Voice speak 但这在 Vista 中不起作用 我怎样才能让我的程
  • 如何使用 IdTCPClient 等待来自服务器的字符串?

    我的 IdTelnet indy 10 1 有问题 我无法以 Unicode 模式从服务器读取数据 现在我想用 IdTCPClient 编写 telnet 终端 服务器有时发送一行 有时发送越来越多的行 但发送之间没有固定的时间 现在我的问
  • 在 XMLDocument 中使用 DocumentElement 时发生访问冲突

    当我尝试使用时 我总是遇到访问冲突DocumentElement of the XMLDocument 我创造XMLDocument基于某些文件的存在 错误信息 项目project1 exe引发异常类EAccessViolation 消息
  • DBX 错误:驱动程序无法正确初始化

    我在跑步德尔福XE3 终极版 MySQL 数据库 这是我点击时收到的错误Test Connection 作为回应 我在 xampp 目录中找到了 libmysql 库 并将其复制到我的 System32 目录中 但这是行不通的 此消息指的是
  • 指针^ 与 s[1]

    在读取数据的函数中 数据含义只字符串 从磁盘 我应该更喜欢哪个 哪个更好 A DiskStream Read Pointer s Count or B DiskStream Read s 1 Count Note 我知道两者都有相同的结果
  • Delphi:如何计算大文件的 SHA 哈希值

    您好 我需要生成 5 Gig 文件的 SHA 您知道有一个非基于字符串的 Delphi 库可以做到这一点吗 你应该使用DCPcrypt v2 http www cityinthesky co uk cryptography html读取缓冲
  • 当 datasnap 服务器中的用户授权失败时,是否可以更改响应代码?

    当用户授权失败时 是否可以更改 DataSnap Delphi XE3 服务器中的 HTTP 响应代码 目前正在回归HTTP 1 1 500 内部服务器错误 这可能发生在许多其他场景中 并且无助于描述问题 按照同样的想法 是否可以更改默认的
  • 如何等到我启动的程序使用完该文件后才删除该文件?

    我一直在寻找一种方法来打开通过 Delphi 应用程序及其适当的应用程序保存到我的计算机上的文件 该文件存储在 SQL 数据库中的 Varbinary 字段中 加载到内存流中 然后通过 TMemoryStream 的 SavetoFile
  • 如何在显示表单之前强制将焦点集中在组件上

    我必须展示 与ShowModal 一个有很多的表格TEdit但我想把注意力集中在TEdit 但并不总是相同 具体取决于上下文 我不能使用SetFocus之前ShowModal 因为表单未激活 并使用该组件Name or Tag在我的应用程序
  • 以高效的方式将字符串转换为十六进制

    我开发了以下函数将字符串转换为十六进制值 function StrToHex const S String String const HexDigits array 0 15 of Char 0123456789ABCDEF var I I
  • 如何安装DBMonitor

    这可能是一个非常简单的问题 但就是这样 我刚刚更新了 Firebird 的 DevArt DBExpress 驱动程序的许可证 帮助文件说我可以使用他们的免费软件 DBMonitor 应用程序 但由于我使用的是 D2006 所以我必须使用以

随机推荐

  • 写入我的临时文件的权限被拒绝

    我正在尝试使用 Python 在 Windows 操作系统上创建并写入临时文件 我已经使用了Python模块tempfile创建一个临时文件 但是当我去写入临时文件时出现错误Permission Denied 我不允许写入临时文件吗 难道我
  • android.database.sqlite.SQLiteException:靠近“Group”:语法错误(代码1):

    Error Caused by android database sqlite SQLiteException near Group syntax error code 1 while compiling create table Grou
  • C#/Native:使用 SCSI PassThrough 读取 HDD 串行

    我编写了三种利用本机的不同方法CreateFile and DeviceIoControl调用以检索 HDD 序列号 而不是型号 第一个使用S M A R T 第二个使用Storage Query第三个使用SCSI PassThrough
  • JSF 标签未呈现[重复]

    这个问题在这里已经有答案了 我正在启动一个 JSF 项目 这是我第一次使用 JSF 并且在呈现标签时遇到问题 我正在 Eclipse 中进行开发并使用 TomCat 作为服务器 我的login jsp 文件 https gist githu
  • 无法加载包“Microsoft.Net.Native.SharedLibrary-x64”

    我要更新Microsoft NETCore UniversalWindowsPlatform但它显示一个错误 Unable to load package Microsoft Net Native SharedLibrary x64 如果我
  • 为什么在销毁对象后使用该对象时没有收到异常?

    下面的代码工作得很好 但它不应该 当我单击 Button1 时 该对象首先被销毁 然后使用其值 并且我没有收到任何访问冲突或其他内容 更重要的是 乘法运算给出了正确的结果 这证明了Obj1没有被毁掉 但话又说回来 这也不是真的 因为当我关闭
  • 将 fileChooserParams 中的 mime 类型转换为 Intent.setType 的正确格式

    我正在尝试使用 Android 中的 WebView 上传文件 This is the code in use TargetApi Build VERSION CODES LOLLIPOP Override public boolean o
  • 在局部变量的嵌套函数内部使用“get”

    我从来没有完全理解嵌套函数和通过引用传递参数 我的策略通常是做类似的事情get variabletopassbyreference 在子函数内部来完成此操作 到目前为止 我一直将全局变量传递给函数 并且效果很好 今天 我尝试在函数内创建局部
  • 使用 JavaScript 将 Excel 转换为 PDF

    如何自动将 Excel 文档 文件 转换为 PDF 我正在尝试调整找到的解决方案here脱颖而出 到目前为止我有这个 var fso new ActiveXObject Scripting FileSystemObject var docP
  • 禁用 freemarker 日志

    我正在使用 Struts 2 0 11 2 但我不知道我的应用程序最近发生了什么变化 我收到了大量的 freemarker 日志 DEBUG 13201 freemark template simple hidden ftl en UTF
  • 如何将 LaTeX/amsmath 与 matplotlib 一起使用?

    当我尝试在 matplotlib 中使用 LaTeX amsmath 包时 出现了一系列难以理解的错误 有没有人能够让这样的事情发挥作用 如果是这样 我很想看一个例子 这是我尝试过的 import matplotlib from matpl
  • iPhone 上的 UIPopoverPresentationController 不产生弹出窗口

    我正在尝试实施新的UIPopoverPresentationController在我的 iPhone 应用程序中 使用 Objective C 我想要的是一个简单的弹出窗口 其中包含从启动按钮发出的表格视图 Edit 这是我的REVISED
  • Python 3.4.0 与 MySQL 数据库

    我已经安装了Python版本 3 4 0我想做一个使用 MySQL 数据库的项目 我下载并尝试安装MySQLdb 但对于这个版本的 Python 来说并不成功 有什么建议可以解决这个问题并正确安装吗 MySQLdb 不支持 Python 3
  • 为什么这个内存地址 %fs:0x28 ( fs[0x28] ) 有一个随机值?

    我编写了一段 C 代码 并将其反汇编并读取寄存器以了解程序在汇编中的工作原理 int test char this char sum buf 6 strncpy sum buf this 32 return 0 我一直在检查的代码片段是测试
  • Python:使用 isin 或 wkn 调用 pandas_datareader 或将其转换为股票代码?

    我有一份包含 ISIN 和 WKN 编号的股票清单 我的目标是使用 pandas datareader 获取该股票的历史数据 我的问题是 该功能例如 import pandas datareader as web stock web Dat
  • Android HttpPost:如何获取结果

    我一直在尝试发送 HttpPost 请求并检索响应 但即使我能够建立连接 我仍然不知道如何获取请求响应返回的字符串消息 HttpClient httpclient new DefaultHttpClient HttpPost httppos
  • 在 PHP 中从 MySQL 创建下拉菜单?

    我对 PHP 和 MySQL 有一定的经验 所以我有点掌握了一些东西 但是我有点试图得到一些可能超出我水平的东西 不太确定这方面的难度级别 基本上 我希望创建 2 个下拉菜单来删除 MySQL 表中用户的访问权限 因此 第一个下拉菜单将用于
  • solr 评分 - fieldnorm

    当我搜索 iphone 时 我有以下记录和分数 记录1 字段名称 显示名称 Iphone FieldName 名称 Iphone 11 654595 MATCH sum of 11 654595 MATCH max plus 0 01 ti
  • 在全屏 3D 应用程序中获取桌面屏幕截图

    使用全屏 3D 应用程序 例如游戏 时是否可以将桌面渲染为屏幕截图 或者游戏运行时Windows会关闭渲染引擎吗 我正在寻找将桌面渲染为游戏中纹理的方法 类似 RDP 的协议可以作为解决方案吗 编辑 为了澄清 是否有任何深层 API 机制可
  • 如何从 TOleContainer 中提取图元文件?

    我有一个带有 TOleContainer 控件的 Delphi BDS 2006 应用程序 它内部有一个 OLE 对象 即 MS Office 2003 中的 MS Equation 公式 名称 Equation 3 如何从公式图像中提取矢