如何正确定义TCustomFrame的子类?

时间:2016-11-11 09:07:26

标签: delphi delphi-2007

我正在尝试定义TCustomFrame的子类,但我在TabOrder属性上遇到错误。

这些是我遵循的步骤:

  1. 向表单添加新的TFrame后代(右键单击项目,添加新的,其他,框架)。 enter image description here
  2. 将父类从TFrame切换到TCustomFrame。

    TMyFrame = class(TCustomFrame)

  3. 检查TFrame定义并发布完全相同的属性(这样做,TMyFrame应该与TFrame相同,对吧?)。

  4. 保存并关闭。
  5. 打开定义了TMyFrame的单位。
  6. 它出现错误,表明TabOrder属性不存在。 enter image description here

    有人可以澄清我做了什么以及如何正确创建TCustomFrame的子类错误吗?

2 个答案:

答案 0 :(得分:1)

你似乎过于复杂了,我不确定为什么你认为你需要你的第2步。

以下对我来说很好:

  1. 从没有项目打开开始,创建一个新框架,在其上粘贴一个或两个组件(我只使用了TListBox),将其重命名为MyFrame并保存。

  2. 右键单击框架,选择"添加到调色板"从上下文菜单中,完成随后的对话框以指定它应显示在哪个调色板页面上并再次保存。默认情况下,它会称之为" MyFrameTemplate"。

  3. 做一个"全部关闭"然后开始一个新项目。导航到您在步骤2中指定的调色板页面,并像处理任何其他组件一样将TMyFrame实例添加到表单。系统将提示您将框架单元添加到项目中。这就是你应该做的一切。鳍。

  4. 上述工作至少可以追溯到D7和西雅图。

    如果您重命名框架的DFM文件,然后尝试重新打开使用它的项目,则IDE会抱怨它无法打开DFM,然后无法找到TMyFrame类,并询问是否应从表单中删除它。因此,框架的使用取决于其DFM的存在,并且由于框架上的组件的属性已经流入其DFM,因此很难看出如何防止它们以使用框架的形式进行更改,因为你需要打败通常的蒸汽机制。也许有人知道一种狡猾的方式来做到这一点,但在我看来,如果那是你想要做的事情,那么TFrame就是一个很难开始的地方。

    顺便说一句,如果你想防止评论中提到的事情发生变化,我个人将其作为一个新的复合组件,使用GExpert"组件进行编码"为其构造函数生成代码。

答案 1 :(得分:0)

重要的是发布的属性存在于组件所在的设计时包中,以便IDE能够对其进行流式传输。

向项目添加框架时,相应的“dfm”文件包含TFrame类中发布的属性。这包括TabOrder和其他人。当您关闭并重新打开项目时,它无法在TabOrder中找到TCustomFrame,因此会出错。

为了能够使用更常见的组件进行说明,请在项目中添加表单。将已发布的属性添加到表单中。保存项目,关闭并重新打开。您将不会在对象检查器中看到已发布的属性。如果IDE尝试流式传输您的属性,则会出错。

为了正确操作,您需要做的是在工具选项板中注册组件。您需要在包中编译它,因为您将无法在TCustomFrame上使用“添加到调色板”快捷方式。有关如何实现这一点的详细信息,请参阅documentation。为方便起见,您可以从包含TFrame后代的单元开始,但在保存单元之前更改上升后,不要忘记手动删除(Alt + F12)您取消发布的属性。