Delphi 2009:使用组件包时出现“找不到类”的错误

6

我有一个自定义组件包,编译和安装都没有问题。该包的源文件位于我的库路径中,生成的 bpl 文件位置也在其中。 安装后,该包和组件将正确显示在“设计包”列表中,但是它们不会出现在“工具箱”中。

但是,每当我打开包含其中一个组件的窗体时,就会出现“类未找到”错误,并且 dfm 文件无法打开。 项目可以编译成功,可以查看所有 pas 文件,但窗体设计器中不会显示。

我在这里做错了什么? 我该如何让组件在窗体设计器中正确显示?

以下是我的组件注册代码:

  RegisterComponents('QuoteSystem', [
    TFnpLabelNumericEdit,
      TPBxCheckBox,
      TPBxCheckBoxSub,
      TPBxComboBoxSub,
      TPBxListBoxSub,
      TPBxRadioItemSub,
      TFnpNumericEdit,
      TQGlobals,
      TPBItem,
      TPBxCheckListBox,
      TPBxCheckListBox,
      TPBxComboBox,
      TPBxDateEdit,
      TPBxDescList,
      TPBxEdit,
      TpbxInteger,
      TPBxLabel,
      TPBxLabeledEdit,
      TPBxLabelNumericEdit,
      TPBxListBox,
      TPBxMemo,
      TPBxNumericEdit,
      TPBxQuoteElement,
      TPBxRadioGroup,
      TPBxRadioItem,
      TPBxRichEdit,
      TPBxSpinEdit,
      TpbxSummaryGlobals,
      TAlignEdit
]);

你的搜索路径中是否有dcu文件? - Toon Krijthe
它们在Delphi的库路径中... - croceldon
编译后程序能否正确启动?请在独立的文本编辑器中查看.dfm文件是否存在任何异常。 - jszpilewski
如果组件在调色板上不显示,则设计时包注册可能没有成功。这可能与某个配置文件中的不同Delphi版本设置有关。如果它们不知道当前使用的Delphi版本,那么一些定义可能会使代码非常糟糕。 - jszpilewski
@croceldon 请您能否发布名为Register的例程的完整代码,该例程调用了RegisterComponents - David Heffernan
显示剩余3条评论
3个回答

2

这种情况发生的典型错误是在接口部分或实现部分中使用小写字母或任何其他大小写形式来编写 Register

错误示例:

procedure register;

implementation

procedure register;

正确:

procedure Register;

implementation

procedure Register;

这里并非如此。我已经正确大写了 Register。 - croceldon
2
还是个好建议。我曾经因为这个问题浪费了几个小时才解决。 - Wouter van Nifterick

0

你需要像这样注册你的组件

RegisterComponents ('Custom', [TMyCustomComp1, TMyCustomComp2]);

否则,集成开发环境将无法在表单设计器中创建组件。

0
说服自己将包文件/项目源代码中的注册代码添加到“包含”部分中的单元中。

我不太确定你的意思。我有一个运行时包 - qteSys.bpl,和一个设计包 - qteSysDesign.bpl。注册码包含在设计包中。 - croceldon
通常, 注册代码(即 procedure Register )位于独立的单元中。一个人很容易忘记将该单元添加到 .DPK 项目源文件的contains部分中。 - NGLN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接