你肯定知道在ImageList和ImageIndex属性的设计时对象检查器中的简单操作。分配Imagelist后,您可以单击ImageIndex属性,并显示带有索引的图像的良好列表。 我正在尝试制作自己的控件,它具有imagelist和imageindex属性。但我想知道,我怎样才能让对象检查员“知道”(或让它知道),我应该从组合框中拾取我定义的imageindex属性。 (内置于对象检查器本身) 有人知道这个伎俩吗?
非常感谢
答案 0 :(得分:3)
我从未试图这样做,但我怀疑这会奏效:
在您的组件中,将ImageIndex
属性声明为integer
,而不是TImageIndex
。
即写(例如)
private
FImageIndex: TImageIndex;
published
property ImageIndex: TImageIndex read FImageIndex write SetImageIndex default -1;
而不是
private
FImageIndex: integer;
published
property ImageIndex: integer read FImageIndex write SetImageIndex default -1;
TImageIndex
定义为
type
TImageIndex = type Integer;
所以它实际上是一个整数,但是不同的类型。
(作为脚注,如果定义是
type
TImageIndex = Integer;
然后TImageIndex
只是Integer
的另一个名称,因此没有人(甚至IDE)也无法将TImageIndex
与Integer
区分开来。现在它们是两种不同的类型,但当然是与赋值兼容的类型。)
答案 1 :(得分:0)
比安德烈亚斯建议的要复杂一点。您可以研究Jedi VCL处理此问题的方式。在Design文件夹中搜索 TJvDefaultImageIndexProperty 作为开头。
答案 2 :(得分:0)
要允许Object Inspector知道,您必须在设计包中注册Property Editor。
如果您正在使用jvcl,请查看jvcl \ design \ JvDsgnEditors中定义的TJvDefaultImageIndexProperty类。
拥有它后,在你的注册程序中调用RegisterPropertyEditor,如下所示:
begin
RegisterPropertyEditor(TypeInfo(TImageIndex), TMyComponent, 'ImageIndex',TJvDefaultImageIndexProperty);
end;
为了澄清,请查看jvcl \ design \ JvStdCtrlsReg.pas或google for Delphi OTA示例。