请教高手:ChemDraw ActiveX控件中Data的数据绑定,和存取(100分)

  • 主题发起人 主题发起人 charlesken2000
  • 开始时间 开始时间
C

charlesken2000

Unregistered / Unconfirmed
GUEST, unregistred user!
入门级新手,问题比较长,请给点耐心看完并指点,谢谢!

我是做有机化学的,做了一个数据库管理实验及相关数据。
数据库中一个字段(ReactionScheme)保存的是ChemDraw ActiveX(定义: var MyChemDrawCtl: TChemDrawCtl)的数据。
Delphi下默认的数据绑定是将该字段与MyChemDrawCtl.Data[7]绑定(唯一可选的绑定),但是,这个绑定是不对的,正确的应该是与MyChemDrawCtl.DefaultInterface.Data['chemical/x-cdx']绑定。我不知道如何修改,所以,使用了文件作为中介,实现数据的存取:
//save ChemDraw ActiveX data to table
......
MyChemDrawCtl.SaveAs(MyCDXfile);
//ChemDraw ActiveXdo
es not support stream
TBlobField(MyTable.FieldByName('ReactionScheme')).LoadFromFile(MyCDXfile);
......
//read ChemDraw data from table to corresponding ChemDraw activeX control
......
TBlobField(MyTable.FieldByName('ReactionScheme')).SaveToFile(MyCDXfile);
MyChemDrawCtl.Open(MyCDXfile, false);
//true is also ok
......
尝试不使用文件操作:
......
MyTable.FieldByName('ReactionScheme').AsVariant := MyChemDrawCtl.DefaultInterface.Data['chemical/x-cdx'];
......
保存的数据是一个只有7个字节的值,显然不对。
//ChemDrawCtl.DefaultInterface.Data[MIME]中保存了所编辑的分子结构等数据,MIME用来指明读写的数据结构,可选的有20多种,效果都一样
试着在两个ChemDraw ActiveX控件之间传递数据:
var
newdata: OleVariant;
......
newdata := MyChemDrawCtl1.DefaultInterface.Data['chemical/x-cdx'];
MyChemDrawCtl2.DefaultInterface.Data['chemical/x-cdx'] := newdata;
......
这段代码OK,MyChemDrawCtl2能够正确显示MyChemDrawCtl1中的数据(分子式),但是用ShowMessage显示newdata,也是一个7字节的值(和写入数据库时的值相同)。这个值在不同程序中查看都是一样的。
希望不使用文件,在ChemDrawActiveX控件和数据库之间传递数据,恐怕要有正确的数据绑定,或者直接存取ChemDrawActiveX控件中的数据。该怎么做?那个newdata的值是什么含义?如何正确读取?

恳请高手帮忙,不胜感激!希望可以同时将解决方案发到我的Mail中,谢谢!
mail: kangcq1751@yahoo.com

关于ChemDraw ActiveX Control,请参考http://sdk.cambridgesoft.com,
或直接到这个地址: http://www.cambridgesoft.com/services/documentation/sdk/chemdraw/ActiveX7.0/index.htm
 
后退
顶部