首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

请教ActiveFormX和TActiveFormXImpl的关系是什么

2012-03-09 
请问ActiveFormX和TActiveFormXImpl的关系是什么?最近刚学ActiveX,对于很多细节不了解,特别是ActiveFormX

请问ActiveFormX和TActiveFormXImpl的关系是什么?
最近刚学ActiveX,对于很多细节不了解,特别是ActiveFormX和TActiveFormXImpl的关系是什么?

我在IActiveFormX中增加了一个函数Test(),里面的实现很简单就是执行ActiveFormX中的Button1Click()函数,

STDMETHODIMP   TActiveFormXImpl::Test()
{
    try
    {
                  if   (::ActiveFormX   !=   NULL)   {
                                  ::ActiveFormX-> Button1Click(NULL);
                  }   else   {
                                MessageBox(Application-> Handle,   "ActiveFormX   is   NULL ",   "Message ",   MB_OK);
                  }
    }
    catch(Exception   &e)
    {
return   Error(e.Message.c_str(),   IID_IActiveFormX);
    }
    return   S_OK;
};

执行结果发现ActiveFormX为NULL,请问,在TActiveFormXImpl中如何调用AcitveFormX中的代码呢?

还有如果上面的代码中把::去掉,编译会出错,提示AcitveFormX有二义性,Project1_tlb中也有一个ActiveFormX,这是为什么呢?我看了代码,没找Project1_tlb中关于ActiveFormX的声明啊

还有一个功能我不知道怎么实现。如果在ActiveForm上有一个按钮,用户按了以后,我想让控件出发一个事件,这个该怎么做?

有谁对这方面比较了解的请告知一二,或者告诉我哪里可以找到这方面的资料也好,谢谢!

[解决办法]
简单说,TActiveFormXImpl把ActiveFormX包装成ActiveX,
ActiveFormX 其实基本上就是普通的VCL form,TActiveFormXImpl是个ActiveX“外壳”。

上面的代码,在Test()中正确的使用ActiveFormX应该用 m_VclCtl,它是TActiveFormXImpl的成员变量。

想让控件发出事件,可以在“Type Library”编辑器中“IxxxxEvents”下添加事件...(以下省去3万字)

热点排行