1:定义流的header , OleContainer要求流中要有Header
type

//流Header的结构

TStreamHeader = record

Signature: Integer; //$434F4442

DrawAspect: Integer; //1

DataSize: Integer; //stream.size;

end;

注:OleContainer要求的流=header + 内存流

2:从数据库中取出字段到内存流:

TBlobField(FADOQuery3.FieldByName('FContent')).SaveToStream(AMemoryStream);

保存:

TBlobField(FADOQuery3.FieldByName('FContent')).LoadFromStream(AMemoryStream);

3:从流中读出并显示:

procedure TFrameWord.DispFileContent(AMStream: TMemoryStream);

var

ft: string;

ms: TMemoryStream;

oMemoryStream : TMemoryStream;

Header : TStreamHeader;

begin

ms := AMStream;

if (ms = nil) or (ms.Size = 0) then Exit;

ms.Position := 0;

oMemoryStream := TMemoryStream.Create;

try

with Header do

begin

Signature := $434F4442;

DrawAspect := 1;

DataSize := ms.Size;

end;

ms.Position := 0;

oMemoryStream.WriteBuffer(Header,SizeOf(Header));

oMemoryStream.CopyFrom(ms, 0);

oMemoryStream.Position := 0;

OleContainer.LoadFromStream(oMemoryStream);

OleContainer.DoVerb(ovPrimary);

finally

oMemoryStream.Free;

end;

end;

4: 从文件中读出:

OleContainer.CreateObjectFromFile('D:\work\BidBuild_Client\doc\实用ASP组件介绍.DOC', False);

OleContainer.DoVerb(ovPrimary);

5:设置只读,并隐藏工具菜单和屏蔽右键菜单中的编辑功能:

Word文档:

OleContainer.OleObject.Application.ActiveDocument.Protect(2);

OleContainer.OleObject.application.CommandBars['Standard'].Visible:=false;

OleContainer.OleObject.application.CommandBars['Formatting'].Visible:=false;

OleContainer.OleObject.application.CommandBars['Reviewing'].Visible:=false;

或:

OleContainer.OleObject.Application.ActiveDocument.Protect(2);

OleContainer.OleObject.Application.ActiveWindow.ActivePane.DisplayRulers := False;

Excel文档:

OleContainer.OleObject.Application.ActiveSheet.Protect;

OleContainer.OleObject.application.CommandBars['Standard'].Visible:=false;

OleContainer.OleObject.application.CommandBars['Formatting'].Visible:=false;

OleContainer.OleObject.application.CommandBars['Reviewing'].Visible:=false;

注:以上代码放到OleContainer.DoVerb(ovPrimary)之后

6:关闭

if OleContainer.State <> osEmpty then

OleContainer.Close;

7:OLEContainer 控件的主要属性和方法

1) AllowInPlace property AllowInPlace:Boolean;

这个属性用于决定启动OLE对象服务程序的方式,如果为假,那么运行其间激活OLE对象时,打开整个OLE服务程序,即单独

开一个窗口,而为真时, 则把服务的菜单合并到应用程序中.

2) AutoActive type TAutoActivate=(aaManual,aaGetFocus,aaDoubleClick);

property AutoActivate: TAutoActivate;

找开方式. 其中aaManual时,要激活OLE对象,必须在程序中调用方法DoVerb(OnShow)

3) CanPaste property CanPaste:Boolean;

只读属性,如果剪贴板中的内容适合粘贴到一个OLE对象,则为true, 否则为false

4) CopyOnsave property CopyOnsave:boolean;

为真则表示把OLE对象临时写到一个文件中,反之表示全部留在内在中.

5) Iconic property Iconic:Boolean;

是否以图标方式显示以节省屏幕上的空间

6) Linked property Linked:Boolean;

只读属性,返回真表示OLE对象是连接到文档中,返回假表示OLE对象是嵌入到文档中.

7) Modify property modified:Boolean;

当OLE对象发生了变化时(包括这个对象被删除或被其他OLE对象所替代),这个属性被设置为真

8) NewInserted property NewInserted:Boolean;

只读,如果刚刚调用的InsertObjectDialog函数插入了一个OLE对象,返回真.这时可调用Doverb(OvShow)激活这个OLE对

象.

9) OleClassName property OleClassName:string;

只读. 返回OLE对象的类名, 当程序中有多个OLE对象时,可以用这个属性作为它们各自的标签.

10)OleObject property oleobject:Variant;

只读, 返回OLE容器中的OLE对象, 这个属性很重要,通过这个属性可以访问OLE服务程序.

11) OleObjectInterface property OleObjectInterface:IOleObject;

只读. 返回OLE对象的OleObject接口,在直接调用OLE的API需要用到这个接口.

12) OldStreamFormat property OldStreamFormat:Boolean;

如果为真, OLE对象就以OLE1的格式存储, 为假就以OLE2的格式存储.

13) PrimaryVerb property PrimaryVerb: integer;

只读. 返回OLE对象可进行的操作中主操作的索引号(序号)

14) SizeMode type TSizeMode = (smClip, smCenter, smScale, smStretch, smAutoSize);

property SizeMode:TSizeMode;

smClip, 超过容器的部分将被裁减.

smCenter, 中间.

smScale, 自动适应容器的大小

smStretch, 自动撑满

smAutoSize, 容器自动调整, 以适应OLE的大小.

15) State type TObjectState=(osEmpty,osLoaded,osRunning,osOpen,osInPlaceActive,osUIActive);

property State: TObjectState;

只读, 返回OLE对象的状态,可以是以下值.

osEmpty,容器中没有OLE对象.

osLoaded,容器中有OLE对象.但OLE服务程序没有运行.

osRunning,服务器正在运行.

osOpen,对象正在运行,OLE服务程序单独运行.

osInPlaceActive,对象正在运行,OLE服务程序菜单将要被合并到客户程序中运行.

osUIActive,对象正在运行,OLE服务程序菜单已经被合并到客户程序中运行.

OLEContainer 控件的主要方法

1) ChangeIconDialog function ChangeIconDialog:Boolean;

调用这个函数将打开一个更改图标的对话框. 当OLE对象以图标显示时,就以用户选择的图标显示.

2) Close 过程 procedure Close;

关闭. 如果OLE对象已修改,调用Close将首先保存OLE对象.

3) Copy 过程 procedure copy;

把OLE对象复制到剪贴板中

4) CteateLinkToFile方法 procedure CreateLinkToFile(FileName:string; Iconic:Boolean);

创建一个OLE对象,其内容从指定的文件中读取,创建的OLE对象链接到OLE容器中. 如果OLE容器中已经有一个OLE对象, 这个已有的OLE对象将被删除,未保存的修改也被作废. Iconic参数设为True表示OLE对象以图标显示.

5) CreateObject 过程. procedure CreateObject(const OleClassName:string;Iconic:Boolean);

这个过程用于创建一个OLE对象,OleClassName参数指定对象的识别名,创建后的OLE对象嵌入到OLE容器中,如果OLE容器中已经有一个OLE对象, 这个已有的OLE对象将被删除,未保存的修改也被作废. Iconic参数设为True表示OLE对象以图标显示.

6) CreateObjectFromFile 过程 procedure CreateObjectFromFile(const FileName:string; Iconic:Boolean);

创建一个OLE对象,其内容从指定的文件中读取,创建的OLE对象嵌入到OLE容器中. 如果OLE容器中已经有一个OLE对象, 这个已有的OLE对象将被删除,未保存的修改也被作废. Iconic参数设为True表示OLE对象以图标显示.

7) CreateObjectFromInfo 方法, procedure CreateObjectFromInfo(const CreateInfo:TCreateInfo);

创建一个OLE对象,其内容从CreateInfo参数年指定的记录中读取(这个参数是个记录类型,包含了创建OLE对象所需要的信息)

8) DoVerb 方法. procedure DoVerb(Verb:Integer);

用于对OLE对象进行操作,verb参数指定操作类型.

9) ObjectPropertiesDialog函数 function objectPropertiesDialog:Boolean;

用来打开Windows OLE对象属性对话框,用于修改OLE对象的属性.

10) Run 方法.procedure Run;

用于运行OLE服务程序,但并不激活OLE对象本身,当服务程序处于运行状态后激活OLE对象将非常快.

11) PasteSpecialDialog方法 function PasteSpecialDialog:Boolean;

该方法打开Windows的选择性粘贴对话框.

8:OLE方式Word中插入图片

我是在delphi中用olecontainer操作word,要向其中插入图片,使用粘贴板。但是图片放入后位置是这一行的开始位置,如下:

{ 将一副图片粘贴到word中 }

ClipBoard.Assign(aImage.Picture);

{ 以下为vba代码--可在word中利用录制宏的功能取得--------------------bagin }

{ 使用vba之前加 x.OleObject.application 例如:excel添加工作表 }

{ oc.OleObject.application.sheets.Add; }

intInlineShapesIndex:=ocDoc.OleObject.application.ThisDocument.InlineShapes.Count+1;

intShapesIndex:=ocDoc.OleObject.application.ThisDocument.Shapes.Count+1;

//从剪贴板添加一个图片

ocDoc.OleObject.application.Selection.Paste;

//转换为图形

ocDoc.OleObject.application.ThisDocument.InlineShapes(intInlineShapesIndex).ConvertToShape;

//设置文字环绕方式

ocDoc.OleObject.application.ThisDocument.Shapes(intShapesIndex).WrapFormat.Type := 'wdWrapThrough';

//将图片中的白色设为透明色

ocDoc.OleObject.application.Selection.InlineShapes(intShapesIndex).PictureFormat.TransparentBackground := 'msoTrue';

ocDoc.OleObject.application.Selection.InlineShapes(intShapesIndex).PictureFormat.TransparencyColor:='RGB(255,255,255)';

ocDoc.OleObject.application.Selection.InlineShapes(intShapesIndex).Fill.Visible := 'msoFalse';

{ 以上为vba代码--可在word中利用录制宏的功能取得----------------------end }

delphi中OleContainer的使用总结的更多相关文章

  1. DELPHI中四种EXCEL访问技术实现

    一.引言 EXCEL在处理中文报表时功能非常强大,EXCEL报表访问也是信息系统开发中的一个重要内容,本文总结以往开发中所用到的几中EXCEL文件访问方法,在实际工作中也得到了很好的验证,本文列举了其 ...

  2. Delphi中stringlist分割字符串的用法

    Delphi中stringlist分割字符串的用法 TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 1.CommaT ...

  3. delphi中exit,abort,break,continue 的区别

    from:http://www.cnblogs.com/taofengli288/archive/2011/09/05/2167553.html delphi中表示跳出的有break,continue ...

  4. Delphi中使用比较少的一些语法

    本文是为了加强记忆而写,这里写的大多数内容都是在编程的日常工作中使用频率不高的东西,但是又十分重要. ---Murphy 1,构造和析构函数: a,构造函数: 一般基于TComponent组件的派生类 ...

  5. 如何在 Delphi 中静态链接 SQLite

    搞了我几个小时,终于成功在 Delphi 中静态链接了 SQLite (v3.5.4),下一步就是研究加密了,呵呵中间其实遇到很多问题,今天累了,就不说了,改天补上 下载测试工程 下面说说方法 1.当 ...

  6. 翻箱倒柜,《Delphi中建议使用的语句》

    (*//标题:Delphi中建议使用的语句整理:Zswang连接:http://www.csdn.net/Expert/TopicView1.asp?id=724036日期:2002-06-22支持: ...

  7. delphi中break,continue, exit,abort, halt, runerror的异同

    delphi中表示跳出的有break,continue, exit,abort, halt, runerror. 1.break 强制退出循环(只能放在循环中),用于从For语句,while语句或re ...

  8. delphi中midas是什么

    Delphi中MIDAS到底是什么呢?和他相关组件是什么呢?   MIDAS(Multitiered Distributed Application Services)多层分布式应用服务.   Del ...

  9. Delphi中window消息截获的实现方式(2)

    Delphi是Borland公司提供的一种全新的WINDOWS编程开发工具.由于它采用了具有弹性的和可重用的面向对象Pascal(object-orientedpascal)语言,并有强大的数据库引擎 ...

随机推荐

  1. 20172325 2018-2019-2 《Java程序设计》第五周学习总结

    20172325 2018-2019-2 <Java程序设计>第五周学习总结 教材学习内容总结 本次学习第九章内容,主要学习查找和排序. 查找 查找的定义:是一个过程,即在某个项目组中寻找 ...

  2. apicloud模块开发知识点

    1. 没有加模块的时候dex里面的包 \android\support\annotation \android\support\v4 \com\uzmap\pkg \compile 2. 不能混淆的类 ...

  3. centos php 运行环境搭建

    一.安装apache httpd rpm -qa|grep httpd //检查是否安装apache rpm -e 包名 --nodeps //若有则删除 PS:我没有删除,直接用的服务器原来的. y ...

  4. AX_Args

    Args args; FormRun formRun; ; args = new Args(); args.name(formstr(FormName)); args.caller(); args.r ...

  5. putty中查询乱码问题

    我们在putty连接Linux时候,有时候查询会出现乱码问题...如下图 这个是因为putty中设置编码字符集的原因..将此换为utf8格式的即可解决 解决后查询如下:

  6. Scrapy的安装和基本使用方法

    Scrapy的安装 1. Windows下安装流程: 方法一: 命令行执行pip install scrapy 安装scrapy 注意:如果有anaconda,也可以打开“Anaconda promp ...

  7. spring学习 十 schema-based 异常通知,和环绕通知

    一 schema-based异常通知 第一步:创建通知类 :新建一个类实现 throwsAdvice 接口,throwsAdvice接口只是标记接口里面并没有任何方法,必须自己写方法,且必须叫 aft ...

  8. 2019.01.14 bzoj5343: [Ctsc2018]混合果汁(整体二分+权值线段树)

    传送门 整体二分好题. 题意简述:nnn种果汁,每种有三个属性:美味度,单位体积价格,购买体积上限. 现在有mmm个询问,每次问能否混合出总体积大于某个值,总价格小于某个值的果汁,如果能,求所有方案中 ...

  9. 2019.01.02 NOIP训练 三七二十一(生成函数)

    传送门 生成函数基础题. 题意简述:求由1,3,5,7,9这5个数字组成的n位数个数,要求其中3和7出现的次数都要是偶数. 考虑对于每个数字构造生成函数. 对于1,5,9:∑nxnn!=ex\sum_ ...

  10. 2018.12.18 bzoj2242: [SDOI2011]计算器(数论)

    传送门 数论基础题. 对于第一种情况用快速幂,第二种用exgcdexgcdexgcd,第三种用bsgsbsgsbsgs 于是自己瞎yyyyyy了一个bsgsbsgsbsgs的板子(不知道是不是数据水了 ...