运行期嵌入ole对象

wm 2000-04-24 08:17:00
请各位高手指点:
我在使用TOleContainer组件在运行期嵌入ole对象时(对象为文件),我用了CreateObjectFromFile方法,编译无错,运行时产生EOleError:80030002,我不知是什么问题,请各位多指教!
...全文
217 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wm 2000-04-28
  • 打赏
  • 举报
回复
929:你说的这几种方法我都试过,实现的不是太好。但现在我已经解决了这个问题,我是先用CreateOleObject函数创建Word对象,将数据库中的相应内容用String变量通过对象的Insert方法传递到Word对象中,再用SaveAs方法保存到一个Word的Doc文件中,以后在OLE容器中就可以用CreateObjectFromFile创建该文件的Ole对象了。
929 2000-04-26
  • 打赏
  • 举报
回复
对于TOLECONTAINER,有方法:
procedure LoadFromStream(Stream: TStream);
procedure SaveToStream(Stream: TStream);
对于TBLOBFIELD,也有方法:
procedure LoadFromStream(Stream: TStream);
procedure SaveToStream(Stream: TStream);

比如:
由BLOB中得到字段所存内容后,可将其转为流
var

MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
try
Query1Images.SaveToStream(MS);
Image1.Picture.Bitmap.LoadFromStream(MS);
finally
MS.Free;
end;

end;
也可从文件或由TOLECONTAINER的SAVETOSTREAM来产生流,然后由TBLOBFIELD读入
var

FS: TFileStream;
begin
if not (Query1.State in [dsInsert, dsEdit]) then Query1.Insert;
FS := TFileStream.Create('c:\Windows\Winlogo.bmp', fmOpenRead);
try
Query1Images.LoadFromStream(FS);
finally
FS.Free;
end;
Query1.Post;

end;
wm 2000-04-25
  • 打赏
  • 举报
回复
929:您的回答很有道理,非常感谢!我是Delphi的初学者,我在程序中首先创建了一个文件,然后企图将其嵌入到TOleContainer组件中,出了错误。如您所说,我在运行期创建的文件,该怎样又在运行期将其在机器上注册为一个对象?能否请您教教我这个Delphi
的新手,非常感谢!
929 2000-04-25
  • 打赏
  • 举报
回复
STG_E_FILENOTFOUND = HRESULT($80030002);
{$EXTERNALSYM STG_E_FILENOTFOUND}
此错误代码代表文件未找到。另外再验证一下所用文件是否已在机器上被注册为一个对象。我在试验时,先在设计时由文件创建了一个对象,然后又由代码创建,没问题。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, OleCtnrs;

type
TForm1 = class(TForm)
OleContainer1: TOleContainer;
OleContainer2: TOleContainer;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
OleContainer2.CreateObjectFromFile('c:\jing\电子讲稿.ppt',false);
end;

end.
wm 2000-04-25
  • 打赏
  • 举报
回复
929:很抱歉,现在才回复您的帖子。我所遇到的问题是这样的,我想在我的程序中用TOleContainer嵌入一个Word文档对象,可以将数据库的某一Text字段的内容在其中编辑,并可将其编辑后的结果再存回数据库当中。因为我不能直接将Ole对象直接存入数据库中,所以我想用临时文件的形式来中介,先将数据库中该字段的内容存入一个新建的临时文件(该文件是我用FileCreate函数创建的,后缀为 .doc),再将该文件嵌入到TOleContainer中编辑,完成后保存。然后,再从该文件中读取内容存入到数据库的Text字段中。我不知我的这种想法是否可行,能否请您在百忙中给予我帮助,我非常感谢您的热心!谢谢!
929 2000-04-25
  • 打赏
  • 举报
回复
在程序中嵌入对象或链接对象不是很容易的,因为一个对象的显示编辑,都需要一个与之联系的服务器程序(OLE SERVER)来完成,TOLECONTAINER只是一个包含对象的容器,它本身不具备显示编辑对象的能力。想在程序中运用OLE,我想可以做一个能够处理这种文件的SERVER程序出来,并且注册。这时在程序中生成文件就可以当做对象进行处理了

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧