怎么将非可视化的组件封装为Activex控件?急求

呆瓜西西 2016-08-03 05:21:33
需要将一非可视化的控件(和TTable功能类似)封装为Activex控件。
(这里我是模仿这个教程做的http://blog.csdn.net/jaminwm/article/details/463953)
对C++builder不熟悉,自己摸索着弄。按照搜索的例子,模仿着实验将TTable封装为Activex控件,步骤如下:

⑴打开bcb6,打开File/New/ActiveX项目页,选择ActiveX Library;
⑵继续添加,打开File/New/ActiveX属性页,选择Automation Object,命名为TMyTable
我不知道怎么讲TTable类封装这里边。
希望能帮助看看,实现具体的封装方法!
在TMyTableImpl.h下,我原本想,让这个类直接继承TTable类,但是不行
TMyTableImpl.h文件:

// MYTABLEIMPL.H : Declaration of the TMyTableImpl

#ifndef MyTableImplH
#define MyTableImplH

#define ATL_APARTMENT_THREADED
#include <atl\atlvcl.h>

#include "Project1_TLB.H"
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <DB.hpp>
#include <DBTables.hpp>

/////////////////////////////////////////////////////////////////////////////
// TMyTableImpl Implements IMyTable, default interface of MyTable
// ThreadingModel : Apartment
// Dual Interface : TRUE
// Event Support : FALSE
// Default ProgID : Project1.MyTable
// Description :
/////////////////////////////////////////////////////////////////////////////
class ATL_NO_VTABLE TMyTableImpl :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<TMyTableImpl, &CLSID_MyTable>,
public IDispatchImpl<IMyTable, &IID_IMyTable, &LIBID_Project1>
{
public:
TMyTableImpl()
{
}

// Data used when registering Object
//
DECLARE_THREADING_MODEL(otApartment);
DECLARE_PROGID("Project1.MyTable");
DECLARE_DESCRIPTION("");

// Function invoked to (un)register object
//
static HRESULT WINAPI UpdateRegistry(BOOL bRegister)
{
TTypedComServerRegistrarT<TMyTableImpl>
regObj(GetObjectCLSID(), GetProgID(), GetDescription());
return regObj.UpdateRegistry(bRegister);
}


BEGIN_COM_MAP(TMyTableImpl)
COM_INTERFACE_ENTRY(IMyTable)
COM_INTERFACE_ENTRY2(IDispatch, IMyTable)
END_COM_MAP()

// IMyTable
public:

STDMETHOD(set_Active(VARIANT_BOOL Param1));
STDMETHOD(set_DatabaseName(BSTR Param1));
STDMETHOD(Open());
STDMETHOD(Close());
STDMETHOD(set_TableName(BSTR Param1));
STDMETHOD(get_Active(VARIANT_BOOL* Value));
private:
TTable* m_Table;
};

#endif //MyTableImplH


TMyTableImpl.cpp文件
// MYTABLEIMPL : Implementation of TMyTableImpl (CoClass: MyTable, Interface: IMyTable)

#include <vcl.h>
#pragma hdrstop
#include <atl\atlvcl.h>
#include "MYTABLEIMPL.H"

/////////////////////////////////////////////////////////////////////////////
// TMyTableImpl
#pragma package(smart_init)
STDMETHODIMP TMyTableImpl::set_Active(VARIANT_BOOL Param1)
{
try
{
//m_Table->Active = Param1;

m_Table->Active = Param1;
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IMyTable);
}
return S_OK;
};


STDMETHODIMP TMyTableImpl::set_DatabaseName(BSTR Param1)
{
try
{
//m_Table->DatabaseName = Param1;


m_Table->DatabaseName = "db.mdb";
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IMyTable);
}
return S_OK;
};


STDMETHODIMP TMyTableImpl::Open()
{
m_Table->Open();
}


STDMETHODIMP TMyTableImpl::Close()
{
m_Table->Close();
}


STDMETHODIMP TMyTableImpl::set_TableName(BSTR Param1)
{
try
{
//m_Table->TableName=Value;

m_Table->TableName="tb_user";
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IMyTable);
}
return S_OK;
};





STDMETHODIMP TMyTableImpl::get_Active(VARIANT_BOOL* Value)
{
try
{
*Value=m_Table->Active;
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IMyTable);
}
return S_OK;
};


...全文
2132 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2016-08-11
  • 打赏
  • 举报
回复
放弃ActiveX吧,这个技术现在不值得学习了。
呆瓜西西 2016-08-10
  • 打赏
  • 举报
回复
顶啊 希望有人帮帮忙!
我不懂电脑 2016-08-05
  • 打赏
  • 举报
回复
控件做好后,要添加到BCB的ide的组件面板上,这样就可以直接在设计器里拖进来。
呆瓜西西 2016-08-05
  • 打赏
  • 举报
回复
引用 1 楼 wewaa 的回复:
控件new出来就成了。
应该在哪里new出来,我在接口方法哪里,用TTable* tab=new TTable(NULL)一个,在使用的时候报错。
laowang2 2016-08-04
  • 打赏
  • 举报
回复
控件new出来就成了。
html,css,按钮 精选按钮样式设计美学与交互体验全解析 在数字产品的交互设计中,按钮作为连接用户与功能的关键桥梁,其样式设计直接影响用户体验与界面质感。本页面基于buttons.css样式库,精心呈现了一系列兼具美学价值与实用功能的按钮设计方案,为开发者与设计师提供直观的视觉参考与代码借鉴。 按钮设计看似简单,实则融合了视觉心理学、交互逻辑与品牌调性的多重考量。从极简的单色按钮到富有层次感的立体按钮,从静态的基础样式到带有hover动效的交互反馈,每一款设计都兼顾了视觉吸引力与操作清晰度。例如页面中展示的药丸反色按钮,通过圆润的边角处理(button-pill类)与高对比度的色彩反转(button-inverse类),既强化了视觉焦点,又在移动端场景中提升了触控识别度,尤其适合作为主要操作按钮使用。 页面采用简洁明快的布局逻辑,浅色背景与高对比度按钮形成鲜明视觉层次,每个按钮示例均搭配详细说明,清晰标注样式类名与适用场景。这种设计不仅便于开发者快速定位所需样式,更能帮助设计初学者理解"样式类组合"的设计思路——通过基础类与修饰类的灵活搭配,可衍生出海量符合不同场景需求的按钮样式,大幅提升开发效率。 无论是电商平台的购买按钮、社交应用的交互按钮,还是工具类产品的功能按钮,本页面展示的设计方案均遵循"一致性与差异性平衡"的原则:基础样式保持统一的视觉语言,确保界面整体性;特殊场景按钮通过色彩、形状或动效的微调,实现功能区分与重点突出。此外,所有按钮样式均基于标准化CSS类实现,便于开发者直接复用或根据品牌调性进行二次定制,兼顾了设计美感与开发实用性。 对于追求高效开发的团队而言,这样的样式库不仅能减少重复劳动,更能保障产品界面的设计一致性;对于设计师而言,这些经过实践验证的按钮样式可作为创意起点,在此基础上探索更具个性的设计表达。浏览本页面时,建议结合实际产品场

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧