Новое свойство компонента в design time

Juve

Здравствуйте!Возможно ли добавить свойство в компонент чтобы оно отобразилось в инспекторе во время работы пользователя с этим компонентом (design time).Если да, то где читать ? Спасибо.P.S. Необходимый функционал можно реализовать и с помощью коллекции, но мне бы хотелось выяснить можно ли такое в принципе.
14 ответов

Juve

Привет, Juve!Ты пишешь:
J> Возможно ли добавить свойство в компонент чтобыJ> оно отобразилось в инспекторе во время работы пользователяJ> с этим компонентом (design time).
добавить свойство "внутрь" компонента можнотолько в том случае, если есть его исходники.в противном случае, это будет уже другой компонент -наследник исходного.читать можно в хэлпе:Creating Custom ComponentsCreating propertiesDefining the design-time interface--With best regards, Мимопроходящий.


Juve

ну...исходники то есть, ибо это мой компонент, я просто хочу предусмотреть в нем возможность появления дополнительных свойств в случае если пользователь этого компонента навыбирал что-то из уже имеющихся (свойств)


Juve

Динамическое изменение списка свойств организовать в принципе можно, но несколько извратно. И сколь мне помнится, при этом могут быть проблемы с IDE [примечание - я говорю по памяти, без проверки перед ответом, просто когда-то экспериментировал. Соответственно, могу быть неточен].Для этого тебе нужно сделать свойство типа TPersistent, и в зависимости от ситуации инициализировать его разными наследниками (с разным списком свойств). При этом нужна большая аккуратность, чтобы например правильно отработало считывание из dfm.


Juve

Привет, Juve!Ты пишешь:
J> ну...исходники то есть, ибо это мой компонент,J> я просто хочу предусмотреть в нем возможностьJ> появления дополнительных свойствJ> в случае если пользователь этого компонентаJ> навыбирал что-то из уже имеющихся (свойств)
несколько странное желание...published свойства на то и published.скрыть их НЕВОЗМОЖНО.можно создай собственный property-editor,в котором скрывать "ненужные" варианты выбора,к примеру в наследнике TEnumProperty.но "запрятать" published-свойство, например в private, не выйдет.--With best regards, Мимопроходящий.


Juve

Поддерживаю softwarer.
мне бы хотелось выяснить можно ли такое в принципе
Можно, например, зарегистрировать для этих свойств редактор NIL, а для "выбранного имеющегося" (от которого зависит появление) написать редактор в виде TPersistent


Juve

скрыть их НЕВОЗМОЖНО
Для инспектора раз плюнуть.Вообще, Juve в корне неверно писать компонент в котором заполнение свойств (вызов методов) нужно проводить в определённом порядке.


Juve

Привет, DimaBr!Ты пишешь:
скрыть их НЕВОЗМОЖНО
D> Для инспектора раз плюнуть.[/quot]плюнь.будем посмотреть.--With best regards, Мимопроходящий.


Juve

Вообще, Juve в корне неверно писать компонент в котором заполнение свойств (вызов методов) нужно проводить в определённом порядке.
Тем не менее, к сожалению, такие компоненты есть, в том числе в VCL. Если говорить вообще, я активно согласен с Вашим утверждением, но есть некоторые случаи, когда столь общее утверждение неверно; самый простой пример - у датасета свойство SQL должно быть заполнено до установки свойства Active, и это вполне разумно.


Juve

RegisterPropertyEditor(TypeInfo(), TMyComponent,'NameProperty',nil);


Juve

Это естественно, однако скрывать свойства, до назначения других !!!! До этого Борланд не додумался, стоит подсказать.


Juve

Согласен с DimaBr по поводу не верного, в таком случае, подхода и большое спасибо всем кто принял участие в наведении меня на "правильные мысли"! Особенно softwarer , за конкретное предложение как сие реализовать. В свет такой компонент "выпускать" не корректно, зато для самообразования поиграюсь с удовольствием !


Juve

Привет, DimaBr!Ты пишешь:
D> RegisterPropertyEditor(TypeInfo(), TMyComponent,'NameProperty',nil);
******* ты придумал! динамически, по-живому...--With best regards, Мимопроходящий.


Juve

RegisterPropertyEditor(TypeInfo(), TMyComponent,'NameProperty',nil);
Что делать в случае, если в приложении два таких компонента с разным состоянием?


Juve

динамически, по-живому...
Кто сказал, по живому. По живому заполняем список для TPersistent