作属性的时候,需要做一个Property1属性,赋值和读取的代码大致如下:
long Property1Value;
......
STDMETHODIMP TMyOCX::get_Property1(long* Value)
{
*Value = m_Property1Value;
}STDMETHODIMP TMyOCX::set_Property1(long Value)
{
m_Property1Value = *Value;
}但是这样只能在运行时通过代码来给该属性赋值,如果在CBuilder的IDE的控件属性页里设置Property1 = 1,在CBuilder的IDE关闭后再打开,Property1在属性页里又变成0了。请问,如何让ActiveX保存IDE设计时的值?请求标准做法。谢谢

解决方案 »

  1.   

    BCB中的语法规则应该和Delphi中一样的,但语法形式可能需要你自己查找相关资料(猜测)。
    在Delphi中,当你声明属性的时候,有两种情况可以让你将属性值保存到.DFM中:
    1. 将stored值设为true:
    property ClothColor : read GetClothColor write SetClothColor stored true;
    2. 将stored值设为true,指定default限定符并且修改后的值与默认值不相同(与上面的情况其实相同,只是判断修改后的值是否与原值相同,避免不必要的操作):
    property ClothColor : read GetClothColor write SetClothColor stored true default clRed;
      

  2.   

    关注。
    楼主问的到底是什么?
    制作ACTIVEX时的属性,
    和IDE使用ACTIVEX设置的值是两回事。
    ACTIVEX控件它使用时的属性值都是因它环境保存的。
    比如你拖一个ACTIVEX到FORM上,在IDE里面设置它的属性,这时候,这些属性就
    保存在这个FORM的DFM文件里,ACTIVEX本身是不会自动去保存这些东西的。当然,你会想,要在某台机子里面让ACTIVEX共有一套属性,
    可以试试这样,实现ACTIVEX的时候,set_XXX方法里面把属性值写入注册表。
      

  3.   

    回:creativepeter(头皮屑)
        你说的只是VCL的属性制作方法,不是OCX的,本质不同的
    回:halfdream(哈欠) 
        我不知道为什么IDE里,把我做的OCX放到FRM上,为什么关闭IDE后FRM没有把OCX的属性保存下来,反正每次重新打开这个FRM,OCX属性的属性都回到默认值了。写注册表是不可能的,难道把源代码移交出去的时候,还要带个.reg文件吗?
      

  4.   

    ActiveX 当然不能保存状态解决方法:设定全局变量         将属性先传递给全局变量  然后再取回来
      

  5.   

    你说FORM没有把ACTIVEX属性保存下来。。那估计是你的ACTIVEX实现上有点问题。。
      

  6.   

    检查一下ACTIVEX的IPersistStorage实现上有问题没有。
      

  7.   

    回halfdream(哈欠):
    如果我直接加入public IPersistStorageImpl<TActiveFormXImpl>,编译错误:cannot cast from 'TActiveFormXImpl *' to 'IPersistStorageImpl<TActiveFormXImpl> *',但是这句话在VC里应该是正确的,即使加入COM_INTERFACE_ENTRY_IMPL(IPersistStorage)或者COM_INTERFACE_ENTRY(IPersistStorage)也同样错误,请指点。
      

  8.   

    回halfdream(哈欠):问题已解决,你说的是正解。谢谢,给分!