自编控件编译通过,程序中运行通不过
我自编了一个控件,采用控件向导从TToolBar继承下来,编译通过,安装没有问题,放在应用程序窗体上修改各属性也没有问题,应用程序编译成功,但运行生成的程序报告类错误,找不到类TToolBar,这是什么原因,哪位高手能帮帮我 问题点数:0、回复次数:5Top
1 楼dajianshi(拔剑四顾心茫然)回复于 2003-12-02 23:23:03 得分 0
是指在完成编译的机器上吗?Top
2 楼fatwave(风中的雨)回复于 2003-12-03 09:00:35 得分 0
应该不会有问题的!!都已经编译过了??用全编译试试!
帖出代码看看!Top
3 楼TangSe(void_onering)回复于 2003-12-03 16:11:31 得分 0
就是EClassNotFound错误,是因为程序并没有向系统注册该类RegisterClass。一般原因是窗体上有该组件,但是却从声明中去掉了,比如你防一个TButton,然后在.h中屏蔽掉//TButton *Button1;编译能通过,但是运行就会出现EClassNotFoun异常。这个是一般的简单的情况,你的情况我也不知道,正在烦恼中。Top
4 楼geniusdhc(为了东京大屠杀,努力奋斗+抵制日货)回复于 2003-12-03 19:24:00 得分 0
没遇到过.
帖出代码看看!Top
5 楼sie()回复于 2003-12-03 22:10:05 得分 0
写错了,不是找不到类TToolBar,是找不到类TToolButton;
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MenuBar.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TMenuBar *)
{
new TMenuBar(NULL);
}
//---------------------------------------------------------------------------
__fastcall TMenuBar::TMenuBar(TComponent* Owner)
: TToolBar(Owner)
{
TToolBar::TToolBar(Owner);
Flat=true;
FMenu=NULL;
ShowCaptions = true;
EdgeBorders.Clear();
ControlStyle <<csCaptureMouse<<csClickEvents<<csDoubleClicks<<csMenuEvents<<csSetCaption;
}
void __fastcall TMenuBar::SetMenu(TMainMenu * Value)
{
int i;
if(FMenu==Value) return;
if(FMenu!=NULL)
for(i=ButtonCount-1;i>=0;i--)
delete Buttons[i];
FMenu=Value;
if(FMenu==NULL) return;
for(i=ButtonCount;i<FMenu->Items->Count;i++)
{
try
{
Button=new TToolButton(this);
Button->AutoSize=true;
Button->Grouped=true;
Button->Parent=this;
Buttons[i]->MenuItem=FMenu->Items->Items[i];
}
catch(...)
{
delete Button;
}
}
for(i=0;i<FMenu->Items->Count;i++)
Buttons[i]->MenuItem=FMenu->Items->Items[i];
}
//---------------------------------------------------------------------------
namespace Menubar
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TMenuBar)};
RegisterComponents("Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
头文件
//---------------------------------------------------------------------------
#ifndef MenuBarH
#define MenuBarH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ToolWin.hpp>
//---------------------------------------------------------------------------
class PACKAGE TMenuBar : public TToolBar
{
private:
TMainMenu *FMenu;
TToolButton * Button;
void __fastcall SetMenu(TMainMenu * Value);
protected:
public:
__fastcall TMenuBar(TComponent* Owner);
__published:
__property TMainMenu * Menu = {read=FMenu,write=SetMenu,default=NULL};
//__property EdgeBorders ;
};
//---------------------------------------------------------------------------
#endif
Top




