如何在设计时将Imagelist属性与Objectinspector中的ImageIndex属性相关联?

时间:2010-09-01 20:11:14

标签: c# delphi

你肯定知道在ImageList和ImageIndex属性的设计时对象检查器中的简单操作。分配Imagelist后,您可以单击ImageIndex属性,并显示带有索引的图像的良好列表。 我正在尝试制作自己的控件,它具有imagelist和imageindex属性。但我想知道,我怎样才能让对象检查员“知道”(或让它知道),我应该从组合框中拾取我定义的imageindex属性。 (内置于对象检查器本身) 有人知道这个伎俩吗?

非常感谢

3 个答案:

答案 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)也无法将TImageIndexInteger区分开来。现在它们是两种不同的类型,但当然是与赋值兼容的类型。)

答案 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示例。