打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
不调用InsertObjectDialog而插入一个对象
不调用InsertObjectDialog而插入一个对象
 

附件中是修改过的RxRichEdit控件,这个可以随意使用。

特别鸣谢:杨进宝

/////////////////////////////////

{/*********************************************************************

// 单元名称:RxRichEd

// 单元描述:

// 编码人: xjx Email:x7x@263.net

// 交付时间:2002-7-23 12:32:04

// 版本号: 0.01 ( 每修改一次加1)

// 修正记录:

//*********************************************************************

// 时间 修正人 备注

//----------------------------------------------------------------------

20020723 xjx 添加了InsertObject过程实现在RxRichEdit

中插入Ole对象功能

例子:reole.InsertObject('PBrush');

reOle 为TRxRichEdit 类的实例

//***********************************************************************}

{*******************************************************}

{ }

{ Delphi VCL Extensions (RX) }

{ }

{ Copyright (c) 1998 Master-Bank }

{ }

{*******************************************************}

procedure TRxCustomRichEdit.InsertObject(const AOleClassName: string);

var

//Data: TOleUIInsertObject;

NameBuffer: array[0..255] of Char;

OleClientSite: IOleClientSite;

Storage: IStorage;

OleObject: IOleObject;

ReObject: TReObject;

IsNewObject: Boolean;

Selection: TCharRange;

begin

{TODO -c扩展-oxjx:加入InsertObject过程的实现}

//FillChar(Data, SizeOf(Data), 0);

FillChar(NameBuffer, SizeOf(NameBuffer), 0);

FillChar(ReObject, SizeOf(TReObject), 0);

if Assigned(FRichEditOle) then begin

IRichEditOle(FRichEditOle).GetClientSite(OleClientSite);

Storage := nil;

try //try1

CreateStorage(Storage);

try //try2 Data.dwFlags and

IsNewObject := IOF_SELECTCREATENEW = IOF_SELECTCREATENEW;

OleCheck(OleCreate(ProgIDToClassID(AOleClassName), IOleObject, OLERENDER_DRAW, nil, // ClassID

OleClientSite, Storage, OleObject));

with ReObject do begin

cbStruct := SizeOf(TReObject);

cp := REO_CP_SELECTION;

clsid := ProgIDToClassID(AOleClassName);

poleobj := OleObject;

pstg := Storage;

polesite := OleClientSite;

dvAspect := DVASPECT_CONTENT;

dwFlags := REO_RESIZABLE;

if IsNewObject then dwFlags := dwFlags or REO_BLANK;

OleCheck(OleSetDrawAspect(OleObject,

IOF_SELECTCREATENEW {Data.dwFlags} and IOF_CHECKDISPLAYASICON <> 0,

0 {Data.hMetaPict}, dvAspect));

end;

SendMessage(Handle, EM_EXGETSEL, 0, Longint(@Selection));

Selection.cpMax := Selection.cpMin + 1;

OleCheck(IRichEditOle(FRichEditOle).InsertObject(ReObject));

SendMessage(Handle, EM_EXSETSEL, 0, Longint(@Selection));

SendMessage(Handle, EM_SCROLLCARET, 0, 0);

IRichEditOle(FRichEditOle).SetDvaspect(

Longint(REO_IOB_SELECTION), ReObject.dvAspect);

if IsNewObject then OleObject.DoVerb(OLEIVERB_SHOW, nil,

OleClientSite, 0, Handle, ClientRect);

finally

ReleaseObject(OleObject);

end; //try2

finally

ReleaseObject(OleClientSite);

ReleaseObject(Storage);

end; //try1

end;

end;

 

附件>>>   RxRichEd.rar

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ActiveX Support In SWT-dev
delphi webbrower的滚动条控制
JAVA.SWT/JFace: SWT高级控件之SWT的高级应用
在Excel Vba中使用API函数playSound播放声音
Richedit中插入图片
delphi 模拟自动登录网页
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服