求助:ole控件对流和文件的操作(内详)(50分)

  • 主题发起人 主题发起人 gtogtx
  • 开始时间 开始时间
G

gtogtx

Unregistered / Unconfirmed
GUEST, unregistred user!
var
s:Tstream;
begin
s:= query1.CreateBlobStream(query4.FieldByName('tznr'),bmread);
ole1.LoadFromStream(s);
end;
错误:invalid stream format!
用 ole1.CreateObjectFromFile('c:/1.bmp',false);是成功的,
但用 ole1.LoadFromFile('c:/1.bmp'); 报同样的错误。
请问怎样把字段里的信息通过流在OLE上显示啊?字段里的内容是图形和文字的混合体,需用画图板进行编辑。
 
错误的原因是因为LoadFromFile和LoadFromStream里面没有对象类型等信息,当然不能实例化,所以报错。CreateObjectFromFile通过文件扩展名系统可以创建自动化服务器。
通过解析Ole控件SaveToFile的文件格式不难发现,其文件格式是一个结构化存储的文件,其中前12字节是文件头信息,后面的内容纯粹是一个结构化存储的文件,关于结构化存储的文件你可以参考《Delphi COM 深入编程》一书,里面有介绍,其中结构化存储文件中包涵了三个流:Ole、CompObj、Ole10Native,其中CompObj中包涵了类型信息, Ole10Native里面包涵了图片的数据。
通过简单的分析
一种解决办法是自己按照Ole控件的存储格式自己存一个流,然后再调用LoadFromStream
另一种解决办法是你先把图片从Blob字段中Save成文件,然后再调用Ole控件的CreateObjectFromFile,这种方法最简单。
 
后退
顶部