我正在尝试定义TCustomFrame的子类,但我在TabOrder属性上遇到错误。
这些是我遵循的步骤:
答案 0 :(得分:1)
你似乎过于复杂了,我不确定为什么你认为你需要你的第2步。
以下对我来说很好:
从没有项目打开开始,创建一个新框架,在其上粘贴一个或两个组件(我只使用了TListBox),将其重命名为MyFrame并保存。
右键单击框架,选择"添加到调色板"从上下文菜单中,完成随后的对话框以指定它应显示在哪个调色板页面上并再次保存。默认情况下,它会称之为" MyFrameTemplate"。
做一个"全部关闭"然后开始一个新项目。导航到您在步骤2中指定的调色板页面,并像处理任何其他组件一样将TMyFrame实例添加到表单。系统将提示您将框架单元添加到项目中。这就是你应该做的一切。鳍。
上述工作至少可以追溯到D7和西雅图。
如果您重命名框架的DFM文件,然后尝试重新打开使用它的项目,则IDE会抱怨它无法打开DFM,然后无法找到TMyFrame类,并询问是否应从表单中删除它。因此,框架的使用取决于其DFM的存在,并且由于框架上的组件的属性已经流入其DFM,因此很难看出如何防止它们以使用框架的形式进行更改,因为你需要打败通常的蒸汽机制。也许有人知道一种狡猾的方式来做到这一点,但在我看来,如果那是你想要做的事情,那么TFrame就是一个很难开始的地方。
顺便说一句,如果你想防止评论中提到的事情发生变化,我个人将其作为一个新的复合组件,使用GExpert"组件进行编码"为其构造函数生成代码。
答案 1 :(得分:0)
重要的是发布的属性存在于组件所在的设计时包中,以便IDE能够对其进行流式传输。
向项目添加框架时,相应的“dfm”文件包含TFrame
类中发布的属性。这包括TabOrder
和其他人。当您关闭并重新打开项目时,它无法在TabOrder
中找到TCustomFrame
,因此会出错。
为了能够使用更常见的组件进行说明,请在项目中添加表单。将已发布的属性添加到表单中。保存项目,关闭并重新打开。您将不会在对象检查器中看到已发布的属性。如果IDE尝试流式传输您的属性,则会出错。
为了正确操作,您需要做的是在工具选项板中注册组件。您需要在包中编译它,因为您将无法在TCustomFrame
上使用“添加到调色板”快捷方式。有关如何实现这一点的详细信息,请参阅documentation。为方便起见,您可以从包含TFrame
后代的单元开始,但在保存单元之前更改上升后,不要忘记手动删除(Alt + F12)您取消发布的属性。