如何从流中载入EMF文件(50分)

  • 主题发起人 主题发起人 lb3141
  • 开始时间 开始时间
L

lb3141

Unregistered / Unconfirmed
GUEST, unregistred user!
将EMF文件存入数据库某个字段中,但如何从该字段的流中载入EMF文件,获取HENHMETAFILE[:(]
 
var
Metafile : TMetafile;
BlobStream : TBlobStream;
begin
Metafile := TMetafile.Create;
BlobStream := TBlobStream.Create(
TBlobField(DataSet.FieldByName('Data'), bmRead);
Metafile.LoadFromStream(BlobStream);
BlobStream.Destroy;
//Metafile.Handle
Metafile.Destroy;
 
Metafile.LoadFromStream(BlobStream)出错,‘metafile is not voild'
 
不能LoadFromStream,用Assign:
例如Metafile.Assign(DataSet.FieldByName('Data'))。
 
可能是WMF格式的吧.這樣吧.
var
BlobStream : TBlobStream;
MemStream : TMemoryStream;
h : HMETAFILE;
begin
{DataSet.Append;
TBlobField(DataSet.FieldByName('Data')).LoadFromFile('c:/windows/system/SPBANNER.WMF');
DataSet.Post;}
BlobStream := TBlobStream.Create(
TBlobField(DataSet.FieldByName('Data')), bmRead);
MemStream := TMemoryStream.Create;
MemStream.CopyFrom(BlobStream, BlobStream.Size);
BlobStream.Destroy;
h := SetMetaFileBitsEx(MemStream.Size, MemStream.Memory);
if h <> 0 then
DeleteMetaFile(h);
MemStream.Destroy;

//SetEnhMetaFileBits 處理Emf
 
To:amli
加上BlobStream.Position :=0 就好了
不过,谢谢!
给你加分了。
 
多人接受答案了。
 
后退
顶部