CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  VCL组件使用和开发

自编控件编译通过,程序中运行通不过

楼主sie()2003-12-02 22:55:08 在 C++ Builder / VCL组件使用和开发 提问

我自编了一个控件,采用控件向导从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

相关问题

  • vb做的控件,编译成.dll以后不能运行。
  • 使用了控件、数据库(ado访问MDB)后为何静态编译的exe运行有问题?
  • 加入VC6里的ActiveX控件,Win98,WinXP下静态编译Release版能正确运行,WinMe却不行?
  • 帮我看看这些代码,编译运行后ListCtrl控件中什么都没有。
  • 怎么编译activex控件?
  • 控件如何重编译
  • 如何不运行编译?
  • 编译不能运行
  • java编译运行问题
  • servlet的编译及运行

关键词

  • 编译
  • 控件
  • null
  • tmenubar
  • ttoolbar
  • fmenu
  • tmainmenu
  • 程序
  • 通过
  • fastcall

得分解答快速导航

  • 帖主:sie

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo