Как связать свойство Imagelist со свойством ImageIndex в Objectinspector во время разработки? - PullRequest
1 голос
/ 02 сентября 2010

Вы, конечно, знаете, как легко управлять объектом в инспекторе объектов во время разработки с помощью свойств ImageList и ImageIndex.После назначения Imagelist вы можете нажать на свойство ImageIndex, и появится хороший список изображений вместе с их индексами.Я пытаюсь создать свой собственный элемент управления, который имеет свойства imagelist и imageindex.Но мне интересно, как я могу позволить инспектору объектов «знать» (или сделать так, чтобы он знал), что мое определенное свойство imageindex должно быть взято из выпадающего списка.(который встроен в сам инспектор объектов) Кто-нибудь знает хитрость?

спасибо очень

Ответы [ 3 ]

3 голосов
/ 02 сентября 2010

Я никогда не пытался сделать это, но я подозреваю, что это будет работать:

В вашем компоненте объявите свойство 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. Теперь это два разных типа, но, конечно же, совместимые с назначением.)

0 голосов
/ 03 сентября 2010

Чтобы Инспектор объектов знал об этом, вам необходимо зарегистрировать Редактор свойств в пакете дизайна.

Если вы используете jvcl, взгляните на класс TJvDefaultImageIndexProperty, определенный в jvcl \ design \ JvDsgnEditors.

После того, как он у вас есть, в вашем реестре вызовите процедуру RegisterPropertyEditor следующим образом:

begin
  RegisterPropertyEditor(TypeInfo(TImageIndex), TMyComponent, 'ImageIndex',TJvDefaultImageIndexProperty);
end;

Для пояснения взгляните на примеры jvcl \ design \ JvStdCtrlsReg.pas или google для Delphi OTA.

0 голосов
/ 02 сентября 2010

Это немного сложнее, чем предложил Андреас.Вы можете изучить, как джедай VCL справляется с этим.Найдите TJvDefaultImageIndexProperty в папке Design в качестве начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...