今天在找如何在Delphi2010下向TRxRichEdit空间中插入PNG图的时候,找到了一段关于想TRxRichEdit空间中插入OLE对象的代码。自己测试了一下,使用正常。现在贴出来与大家分享。

Uses
    activex, richedit, comobj

type
  IRichEditOle = interface(IUnknown)     ['{00020d00-0000-0000-c000-000000000046}']
    function GetClientSite(out clientSite: IOleClientSite): HResult; stdcall;
    function GetObjectCount: HResult; stdcall;
    function GetLinkCount: HResult; stdcall;
    function GetObject(iob: Longint; out reobject: TReObject;         dwFlags: DWORD): HResult; stdcall;
    function InsertObject(var reobject: TReObject): HResult; stdcall;
    function ConvertObject(iob: Longint; rclsidNew: TIID;         lpstrUserTypeNew: LPCSTR): HResult; stdcall;
    function ActivateAs(rclsid: TIID; rclsidAs: TIID): HResult; stdcall;
    function SetHostNames(lpstrContainerApp: LPCSTR;         lpstrContainerObj: LPCSTR): HResult; stdcall;
    function SetLinkAvailable(iob: Longint; fAvailable: BOOL): HResult; stdcall;
    function SetDvaspect(iob: Longint; dvaspect: DWORD): HResult; stdcall;
    function HandsOffStorage(iob: Longint): HResult; stdcall;
    function SaveCompleted(iob: Longint; const stg: IStorage): HResult; stdcall;
    function InPlaceDeactivate: HResult; stdcall;
    function ContextSensitiveHelp(fEnterMode: BOOL): HResult; stdcall;
    function GetClipboardData(var chrg: TCharRange; reco: DWORD;         out dataobj: IDataObject): HResult; stdcall;
    function ImportDataObject(dataobj: IDataObject; cf: TClipFormat;         hMetaPict: HGLOBAL): HResult; stdcall;
  end;
const
  REO_CP_SELECTION    = ULONG(-1);
  REO_RESIZABLE       = $00000001;
  IID_IOleObject: TGUID = (       D1: $00000112;D2: $0000;D3: $0000;D4: ($C0,$00,$00,$00,$00,$00,$00,$46));

procedure InsertOleObjectFromFile(RichEdit: TRxRichEdit; FileName: string);
var
RichEditOle: IRichEditOle;
LockBytes: ILockBytes;
Storage: IStorage;
FormatEtc: TFormatEtc;
ClientSite: IOleClientSite;
OleObject: IOleObject;
ClassID: TCLSID;
ReObject: TReObject;
begin
SendMessage(RichEdit.Handle, EM_GETOLEINTERFACE, 0, Longint(@RichEditOle));
if not Assigned(RichEditOle) then
  raise EOleError.Create('Failed to retrieve IRichEditOle');
OleCheck(CreateILockBytesOnHGlobal(0, True, LockBytes));
OleCheck(StgCreateDocfileOnILockBytes(LockBytes,       STGM_SHARE_EXCLUSIVE or STGM_CREATE or STGM_READWRITE, 0, Storage));
LockBytes := nil;
OleCheck(RichEditOle.GetClientSite(ClientSite));
FillChar(FormatEtc, SizeOf(FormatEtc), 0);
FormatEtc.dwAspect := DVASPECT_CONTENT;
FormatEtc.lIndex := -1;
OleCheck(OleCreateFromFile(GUID_NULL, PWideChar(WideString(FileName)),       IID_IOleObject, OLERENDER_DRAW, @FormatEtc, ClientSite, Storage,       OleObject));
OleCheck(OleSetContainedObject(OleObject, True));
OleCheck(OleObject.GetUserClassID(ClassID));
FillChar(ReObject, SizeOf(TReObject), 0);
ReObject.cbStruct := SizeOf(TReObject);
ReObject.cp := REO_CP_SELECTION;
ReObject.clsid := ClassID;
ReObject.poleobj := OleObject;
ReObject.pstg := Storage;
ReObject.polesite := ClientSite;
ReObject.dvAspect := DVASPECT_CONTENT;
ReObject.dwFlags := REO_RESIZABLE;
OleCheck(RichEditOle.InsertObject(ReObject));
end;

调用方式
procedure TMainFrm.Button1Click(Sender: TObject);
begin
  InsertOleObjectFromFile(ActionRich, 'C:\1111.xls');
end;

Delphi2010中向TRxRichEdit控件中插入OLE对象。相关推荐

  1. 关于从页面中获取用户控件中的其它控件(如DropDownList)事件的方法

    在项目中经常把一些经常使用的代码做成用户控件以提高代码的可重用性, 一个经常遇到的就是在页面中调用用户控件中的服务器控件的事件,下面给出简单的代码示列. 我们在一个用户控件(MaterialRepor ...

  2. VB 控件分类----内部控件;ActiveX 控件;可插入的对象

    控件分类,控件概述 时间:2009-6-18 20:19:33 点击:1158 控件分类 在Visual Basic中,控件可分成三类: 1.内部控件,例如 CommandButton 和 Frame ...

  3. ASP.Net中的TreeView控件中对节点的上移和下移操作

    Web中的TreeView中的没有PreNode和NextNode属性. 但它的集合属性中有一个IndexOf属性,从而能够找到它的前一个节点知后一个节点. TreeView中要么只有一个根节点:要么 ...

  4. asp.net 开发过程中关于image控件中图片点击后地址乱码的问题

    前台页面是这样的: <%-- 图片展示20140705add --%>     <div id="imgShowDiv" style="left:550 ...

  5. VB.net实现从ListView控件中异地获取文本内容源代码

    对于一些VB6工程代码来说,需要完成从VB到VB.net的转换,在转换过程中需要注意很多内容,利用VB.net的直接转换功能很少能完全成功,需要我们付出很大的努力. 下面的VB.net代码实现从其他应 ...

  6. delphi RichEdit控件中插入GIF动画表情

    delphi在RichEdit控件中插入GIF动画表情 在UDP即时通讯软件中实现类似于QQ的动画表情,在richEdit控件中插入gif动画表情. 发送的时候将表情转为命令,接收之后,再将命令转换为 ...

  7. 在ListCtrl控件中插入图标

    在ListCttrl控件(Report风格)的使用上,有时需要向子列中插入图标,例如要制作一个下载软件,我们计划在控件的第一列用图标的形式显示下载状态:排队.下载中.出错等等,第二列计划用图标显示下载 ...

  8. 想在PPT中插入swf文件,但是在其他控件中找不到shockwave falsh object,怎么办?(win7)

    经过我的一些探索之路,我终于发现了我的win7电脑的问题所在,没有安装Adobe flash player,如果有相同问题的同学可以继续往下看. 1.下载安装Adobe flash player 为了 ...

  9. [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十三:在DetailsView控件中使用TemplateField...

    导言 比起BoundField.CheckBoxField.HyperLinkField以及其他的那些数据字段控件(data field controls)来说,TemplateField提供了一种高 ...

  10. 在 .NET Compact Framework 2.0 中宿主 ActiveX 控件

    适用于: ActiveX Microsoft .NET Compact Framework 版本 2.0 摘要:了解如何在使用 .NET Compact 的应用程序中宿主 ActiveX 控件.本文提 ...

最新文章

  1. python心得体会300字_有没有简单一点的 Python 小例子或小项目?
  2. 自定义装点博客的“门面”
  3. 2.4g 无线键鼠对码软件_无线路由器的2.4G和5G同时开速度有影响吗?
  4. 小括号教学设计导入_【教资面试】语文政治历史地理教学设计答题技巧!
  5. 团队行为心理学读书笔记(8)绩效考核背后的行为心理学
  6. 细思极恐丨几个有趣的科学实验
  7. SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用
  8. java c3p0 存储过程_JAVA Spring 连接池 调用 Oracle 存储过程的问题?
  9. 试用期间,云服务器操作系统可以更换吗?
  10. bzoj 1640 bzoj 1692: [Usaco2007 Dec]队列变换(后缀数组)
  11. Fade out transition effect using CSS3
  12. 差分进化算法matlab代码_差分进化算法
  13. pandas读取csv文件数据并使用matplotlib画折线图和饼图
  14. winrar去弹窗广告激活办法!!
  15. 动态网站开发技术学习2:VS 2010制作作第一个简单示例网站
  16. 第10章 项目沟通管理
  17. 郑州大学计算机考研944,2020年郑州大学944计算机技术专业基础综合考研复习资料...
  18. http与htpps的区别
  19. 计算机软件图标乱码,Win7系统桌面快捷图标名称显示乱码如何解决
  20. CSS 的弹性布局(flex) ,是什么?

热门文章

  1. vrrp 的mac是怎么算出来的_宇宙总质量约10^55kg,与大家掰一掰是怎么算出来的
  2. 远程连接ubuntu中mysql的数据库
  3. 蓝桥杯2017年第八届C/C++省赛B组第四题-方格分割
  4. win10安装mysql报错——无法项识别为 cmdlet、函数、脚 本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
  5. Ubuntu 更改文件夹权限
  6. 分寸:切记别把话说得太死 — 《别输在不会表达上》
  7. Linux版本的tomcat安装包
  8. Eclipse自动生成get和set方法
  9. 7-8 评委打分 (5 分)
  10. ubuntu下搭建tftp服务器并且验证功能