起步软件技术论坛-X3

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: dupit

【结贴】officeControl 控件导入问题?**

[复制链接]
发表于 2008-9-9 11:02:52 | 显示全部楼层
5楼的代码跟OfficeControl没有关系啊。
看你代码是在操作Blob字段吧。
操作Blob字段的代码在论坛里有参考的,不一定非要用5楼的方式对指针做操作。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-9 11:07:56 | 显示全部楼层
下面是OfficeControl 打开数据库文档的代码,在平台中如何实现?
Var
  DocData :OleVariant;
  DocSize ongInt;
  lBlobField: TBlobField;
  memStream : TMemoryStream;
begin
  TVarData(DocData).VType := varByRef or varByte;
  TVarData(DocData).VPointer := nil;

  memStream := TMemoryStream.Create;
  lBlobField := TBlobField(ADOTable.FieldByName(Field));
  lBlobField.SaveToStream(memStream);

  DocSize := memStream.Size;
  if Not (DocSize = 0) then
  begin
    TVarData(DocData).VPointer := AllocMem(DocSize);
    memStream.Position := 0;
    memStream.Read(TVarData(DocData).VPointer^,DocSize);
  end;

  if((Not (TVarData(DocData).VPointer = nil)) and
     (Not (DocSize = 0)) )then
  begin
    OfficeControl.OpenFromVariant(DocData,DocSize);
  end;

  //释放内存
  memStream.Free;
  if (Not (TVarData(DocData).VPointer = nil)) then
  begin
    FreeMem(TVarData(DocData).VPointer);
    TVarData(DocData).VPointer := nil;
  end;
end;
回复 支持 反对

使用道具 举报

发表于 2008-9-9 11:24:25 | 显示全部楼层
DocSize := memStream.Size;
  if Not (DocSize = 0) then
  begin
    TVarData(DocData).VPointer := AllocMem(DocSize);
    memStream.Position := 0;
    memStream.Read(TVarData(DocData).VPointer^,DocSize);
  end;
把这段在delphi里封装成函数,作为第三方控件导入到平台中调用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-9 13:42:02 | 显示全部楼层
按楼上方法实现 ,结贴
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-22 02:18 , Processed in 0.036727 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表