自定义的Ole对象实例插入RichEdit后,无法拖动、粘贴、复制,是怎么回事?我的Ole对象实现了以下接口:
TMyOleObject = class(TInterfacedObject, IOleObject, IViewObject2, IViewObject, IDataObject)
...
end;插入RichEdit的代码是:
function InsertMyObject(hRichEdit: THandle): Boolean;
var
ReOle: IRichEditOle;
MyOle: TMyOleObject;
OleSite: IOleClientSite;
OleObject: IOleObject;
ReObj: TReObject;
begin
ReOle := GetRichEditOle(hRichEdit);
Assert(ReOle <> nil, 'RichEditOle is null!');
MyOle := TMyOleObject.Create();
try
ReOle.GetClientSite(OleSite); MyOle.GetOleObject(OleSite, OleObject);
OleCheck(OleSetContainedObject(OleObject, True)); FillChar(ReObj, Sizeof(ReObj), 0);
ReObj.cbStruct := Sizeof(ReObj);
OleCheck(OleObject.GetUserClassID(ReObj.clsid));
ReObj.cp := REO_CP_SELECTION;
ReObj.dvaspect := DVASPECT_CONTENT;
ReObj.poleobj := OleObject;
ReObj.polesite := OleSite;
ReObj.dwFlags := REO_READWRITEMASK and not(REO_RESIZABLE); ReOle.InsertObject(ReObj);
Result := True;
finally
//,,,
end;
end;
TMyOleObject = class(TInterfacedObject, IOleObject, IViewObject2, IViewObject, IDataObject)
...
end;插入RichEdit的代码是:
function InsertMyObject(hRichEdit: THandle): Boolean;
var
ReOle: IRichEditOle;
MyOle: TMyOleObject;
OleSite: IOleClientSite;
OleObject: IOleObject;
ReObj: TReObject;
begin
ReOle := GetRichEditOle(hRichEdit);
Assert(ReOle <> nil, 'RichEditOle is null!');
MyOle := TMyOleObject.Create();
try
ReOle.GetClientSite(OleSite); MyOle.GetOleObject(OleSite, OleObject);
OleCheck(OleSetContainedObject(OleObject, True)); FillChar(ReObj, Sizeof(ReObj), 0);
ReObj.cbStruct := Sizeof(ReObj);
OleCheck(OleObject.GetUserClassID(ReObj.clsid));
ReObj.cp := REO_CP_SELECTION;
ReObj.dvaspect := DVASPECT_CONTENT;
ReObj.poleobj := OleObject;
ReObj.polesite := OleSite;
ReObj.dwFlags := REO_READWRITEMASK and not(REO_RESIZABLE); ReOle.InsertObject(ReObj);
Result := True;
finally
//,,,
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货