OLE字段调用画笔程序,但是保存为文件时失败(100分)

  • 主题发起人 主题发起人 KenLee
  • 开始时间 开始时间
K

KenLee

Unregistered / Unconfirmed
GUEST, unregistred user!
以下代码保存其他OLE字段均正常,是否图形文件需要特殊的保存方法?
FresourceTpp1.savedialog1.defaultExt:=
ppTypeFileExtensions[ord(ppx.pptype)];
FresourceTpp1.savedialog1.filter:=
ppTypeOpenSaveDialogOptions[ord(ppx.pptype)];
if FresourceTpp1.savedialog1.execute then
begin
try
ole1.SaveAsDocument(FresourceTpp1.savedialog1.filename);
except
showInfo1('载入文件资料出现错误。');
try
ole1.CreateObject(ppTypeOleClassNames[ord(ppx.pptype)],false);
except
errMessage;
end;
end;
end;
 
你怎么能说保存其他OLE字段均正常呢?
对我而言好像只有保存BMP文件才有效,
SaveAsDocument方法简直就是一个Bug!

var
Data: IDataObject;
SM: TStgMedium;
FormatEtc: TFormatEtc;
Bmp: TBitmap;
begin
Data := OleContainer1.OleObjectInterface as IDataObject;
FormatEtc.cfFormat := CF_BITMAP; //ClipBoard
FormatEtc.tymed := TYMED_GDI;
FormatEtc.ptd := nil;
FormatEtc.dwAspect := DVASPECT_CONTENT;
FormatEtc.lindex := -1;
Bmp := TBitmap.Create;
try
OleCheck(Data.GetData(FormatEtc, SM));
try
Bmp.LoadFromClipboardFormat(CF_BITMAP, SM.hBitmap, 0);
Bmp.SaveToFile(Action_FileExport.Dialog.FileName);
finally
ReleaseStgMedium(SM);
end;
finally
Bmp.Free;
end;
end;
 
谢谢。
“你怎么能说保存其他OLE字段均正常呢?
对我而言好像只有保存BMP文件才有效,
SaveAsDocument方法简直就是一个Bug!”
不会吧,我用那段代码可以正常对付Word和Excel啊
OleCheck(Data.GetData(FormatEtc, SM));
这一句出错,提示“需要运行对象执行操作”,什么意思??
 
针对所谓“需要运行对象执行操作”的问题,在保存图片之前需执行如下指令:
OleContainer1.DoVerb(ovShow);
OleCheck(Data.GetData(FormatEtc, SM));

SaveAsDocument所产生的文档虽与原始文档不同但是Word和Excel仍然可以识别(甚至WinRAR文档也可以),只是这样反复多次以后必然导致文件尺寸增大。
 
To Jifee,
不好意思,好多天忙另外更急的事情,你说OleContainer1.DoVerb(ovShow);我还没试,至于
“SaveAsDocument所产生的文档虽与原始文档不同但是Word和Excel仍然可以识别(甚至WinRAR文档也可以),只是这样反复多次以后必然导致文件尺寸增大。”
是不是最好也改成这种保存方法,对应的Bmp: TBitmap;应该改什么?
试过后再给你分
 
接受答案了.
 
后退
顶部