加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何从TOleContainer中提取元文件?

发布时间:2020-12-15 09:26:59 所属栏目:大数据 来源:网络整理
导读:我有一个带有TOleContainer控件的Delphi(BDS 2006)应用程序.它有一个OLE对象,来自MS Office 2003的MS Equation公式(名称’Equation.3′). 如何从公式图像中提取矢量图元文件以将其插入到网页或其他没有OLE支持的文档中? TOleContainer里面只有’Equation.3
我有一个带有TOleContainer控件的Delphi(BDS 2006)应用程序.它有一个OLE对象,来自MS Office 2003的MS Equation公式(名称’Equation.3′).

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

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

解决方法

OLE容器具有您可以访问的基础IOLEObject接口.您可以使用自己的画布将其传递给 OLEDraw函数.您可以使用Bitmap或Metafile画布,然后以您需要的格式保存图像.

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,LOGPIXELSY),2540);
    ReleaseDC(0,DC);

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

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

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

end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读