信息
对于如何管理组件包和安装自定义属性编辑器,我似乎一无所知。我花了大约一周的时间浏览示例和教程,我肯定做错了什么,因为我的属性编辑器从未出现在“对象检查器”中,并且我需要逐步说明来尝试解决此问题。
组件包装
我目前有一个软件包,并且在选项中将其设置为designtime and runtime
。添加到此程序包中的是组件的单位(即MyButton,MyListBox等)-另外,我还有一个包含RegisterComponents
过程的单元。我现在可以构建和安装它,将我的组件添加到新项目中并运行它们而不会出现任何问题。
添加自定义PropertyEditor
现在,我想从上面的包中向我的组件引入一个属性编辑器,这让我感到棘手和困惑。
例如,TMyButton是具有我自己的绘制方法的自定义按钮,它已经具有发布的属性以允许更改按钮的外观-此外,还存在一个发布的列表以允许选择预设的外观设置,例如:TMyButtonStyle = (bsStyle1, bsStyle2, bsStyle3)
我想删除预设样式的列表,而是将一个名为“ PresetStyles”的属性添加到对象检查器中。此属性将是paDialog的,我想显示一个窗体,在其中可以直观地看到不同的按钮样式-一种从图形列表中选择预设样式的图形化方式。
我需要哪些包裹
据我了解,您需要拆分designtime
软件包和runtime
软件包吗?
这是否意味着我需要两个寄存器单元,一个用于组件,一个用于属性编辑器?
我不确定如何处理此问题,因为我说我当前的软件包是designtime and runtime
,所以我不确定应该将其划分为哪种软件包类型。如果我为属性编辑器创建了一个新的designtime程序包,而仅使另一个程序包runtime
丢失了安装按钮。即使现在写这篇文章也让我感到困惑。
安装PropertyEditor
我尝试关注的文章之一是此页面中的一篇:http://www.delphisources.ru/pages/faq/master-delphi-7/content/LiB0097.html
我唯一更改的是添加我自己的对话框表单,并更改了以下代码:RegisterPropertyEditor(TypeInfo(string), TMdSoundButton, 'SoundUp', TSoundProperty);
至RegisterPropertyEditor(TypeInfo(string), TMyButton, 'PresetStyles', TSoundProperty);
我知道它仍然说TSoundProperty,我只是这样保留它,直到我可以使其工作,然后我才更改类名。
结论
在实际组件和设计端(即PropertyEditor)之间拆分/管理包的正确方法是什么?
PropertyEditor永远不会出现在Object Inspector的TMyButton上,我感觉这一定与未正确配置软件包有关。
在这里,我将非常感谢您提供的某种帮助,甚至是指向非常好的教程指南的链接,或者即使我使用很多示例都不适合我,但我正在做的任何事情似乎都没有用。
最佳答案
我目前有一个软件包,并且在选项中将其设置为designtime和runtime。
要实现自定义属性/组件编辑器,必须将代码分成两个包-一个runtime only
包仅包含组件本身的实现代码,另一个designtime only
包仅包含组件注册和自定义的实现代码编辑器。 designtime程序包需要在其designide
列表中指定运行时程序包和Requires
程序包。运行时程序包是编译为可执行文件的程序包。 IDE使用designtime包来使您的组件出现在“组件面板”和“表单设计器”中并与它们交互。
这是否意味着我需要两个寄存器单元,一个用于组件,一个用于属性编辑器?
否。运行时程序包应该根本没有注册。而是属于designtime包。您可以在designtime包中只有一个Register()
函数来注册所有内容。
如果我为属性编辑器创建了一个新的designtime程序包,而仅使另一个程序包运行时,我将失去安装按钮。
您不能将运行时程序包安装到IDE中,只能安装设计时程序包。
我尝试关注的文章之一是此页面中的一篇:http://www.delphisources.ru/pages/faq/master-delphi-7/content/LiB0097.html
我唯一更改的是添加我自己的对话框表单,并更改了以下代码:
RegisterPropertyEditor(TypeInfo(string),TMdSoundButton,'SoundUp',TSoundProperty);
至
RegisterPropertyEditor(TypeInfo(string),TMyButton,'PresetStyles',TSoundProperty);
您的TMyButton
组件是否实际上定义了PresetStyles
类型的String
属性?您不能为不存在的属性定义属性编辑器。
在不完全了解组件本身中如何实现PresetStyles
属性以及它表示什么的情况下,为String
属性调用弹出对话框可能没有多大意义(也许不包括文件名之类的东西)。根据您的描述,可能更有意义的是实现组件编辑器而不是属性编辑器,而保留现有的TMyButtonStyle
属性以将IDE的默认编辑器用于枚举属性。要调用您的弹出对话框,组件编辑器将允许用户右键单击组件本身,然后从弹出菜单中选择“编辑”(或您决定为其命名的任何其他字符串值),或者只需双击组件,在窗体设计器中。然后,您可以根据需要显示和编辑组件,并在关闭对话框时将所有更改分配给组件。
PropertyEditor永远不会出现在Object Inspector的TMyButton上,我感觉这一定与未正确配置软件包有关。
由于您尚未显示任何实际代码,因此很难确定。