运行期嵌入ole对象(200分)

  • 主题发起人 主题发起人 5299
  • 开始时间 开始时间
5

5299

Unregistered / Unconfirmed
GUEST, unregistred user!
请各位高手指点:
我在使用TOleContainer组件在运行期嵌入ole对象时(对象为文件),我用了
CreateObjectFromFile方法,编译无错,运行时产生EOleError:80030002,我
不知是什么问题,请各位多指教!
毕业设计,明天就要交,急!!!!


 
呵呵,没有这么急吧!老师是吓你的。
试试CreateOleObject

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.

由于我这里太慢了,一段一段的来。
 
对于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;
 
再不行试试以下招式:
先用CreateOleObject函数创建Word对象,将数据库中的相应内容用String变量通过
对象的Insert方法传递到Word对象中,再用SaveAs方法保存到一个Word的Doc文件
中,以后在OLE容器中就可以用CreateObjectFromFile创建该文件的Ole对象了。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
674
import
I
I
回复
0
查看
670
import
I
后退
顶部