3 delphi custom-controls custom-component delphi-xe
信息
关于如何管理组件包和安装自定义属性编辑器,我似乎无能为力.我花了大约一个星期左右查看示例和教程,我必须明确做错了,因为我的属性编辑器从未出现在Object Inspector中,我需要一步一步的指示来尝试解决这个挫败感.
组件包
我目前有一个包,它designtime and runtime在选项中设置.添加到这个包是我的组件的单位(即,MyButton,MyListBox等) - 另外我有一个包含该RegisterComponents过程的单元.我现在可以构建和安装它,将我的组件添加到一个新项目并运行它们没有任何问题.
添加自定义PropertyEditor
现在,我想从上面的包中向我的组件引入属性编辑器,这让我变得棘手和困惑.
例如,TMyButton是一个带有我自己的绘制方法的自定义按钮,它已经发布了属性以允许更改按钮的外观 - 此外,还有一个已发布的列表允许选择预设外观设置,例如:
TMyButtonStyle = (bsStyle1, bsStyle2, bsStyle3)
我想删除预设样式列表,而是在Object Inspector中添加一个名为'PresetStyles'的属性.这个属性将是paDialog,我想要一个表单,在那里我可以直观地看到不同的按钮样式 - 从简单列表中选择预设样式的更加图形化的方式.
我需要哪些包裹
如果我明白,你需要拆分designtime包和runtime包吗?
这是否意味着我需要两个寄存器单元,一个用于组件,一个用于属性编辑器?
我不完全确定如何管理这个,正如我所说的当前包designtime and runtime,我不知道我应该将它分成什么包类型.如果我为Property Editors创建一个新的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,我只是把它留下来,直到我能让它工作然后我会改变类名.
结论
在实际组件和设计方(即PropertyEditors)之间拆分/管理包的正确方法是什么?
PropertyEditor永远不会出现在Object Inspector中的TMyButton上,我觉得它必须与未正确配置包或其他东西有关.
我真的很感激这里的一些帮助,甚至是一个非常好的教程指南的链接或者我正在做的事似乎工作,即使使用很多例子也不适合我.
我目前有一个包,它在选项中设置为设计时和运行时.
要实现自定义属性/组件编辑器,必须将代码分成两个包 - 一个runtime only包只包含组件本身的实现代码,另一个designtime only包只包含组件注册和自定义编辑器的实现代码.designtime包需要designide在其Requires列表中指定运行时包和包.运行时包是编译成可执行文件的内容.designtime包是IDE用于使组件显示在Component Palette和Form Designer中并与之交互的内容.
这是否意味着我需要两个寄存器单元,一个用于组件,一个用于属性编辑器?
不可以.运行时包应该没有注册.这属于designtime包而不是.您可以Register()在designtime包中使用一个函数来注册所有内容.
如果我为Property Editors创建一个新的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上,我觉得它必须与未正确配置包或其他东西有关.
由于您尚未显示任何实际代码,因此很难确定.
如果我理解,您需要拆分设计时包和运行时包吗?
这是否意味着我需要两个寄存器单元,一个用于组件,一个用于属性编辑器?
没有.注册两个组件和属性编辑器的注册单元就足够了,只要该注册单元不在运行时使用(通常不是).这也适用于包含属性编辑器的单元.防止DesignEditors.pas在运行时使用,然后你没事.
| 归档时间: |
|
| 查看次数: |
812 次 |
| 最近记录: |