Текущий архив: 2002.09.16;
Скачать: CL | DM;
Вниз
Скрыть свойства в Object Inspector Найти похожие ветки
← →
VladP (2002-09-03 11:25) [0]Здавствуйте, мастера!
Можно ли скрыть свойства компонента(чтобы они не показывались в ObjInspector), унаследованного от TWinControl (такие как Left, Top, Width ...).
Пытался писать их в private и protected секции - все равно отображаются. Неужели придется наследоваться от TComponent?
← →
gek © (2002-09-03 11:37) [1]посм от чего произведен TWinControl, сам поймешь
← →
Кулюкин Олег © (2002-09-03 12:36) [2]Скрыть нельзя, можно написать для них PropertyEditor, и тогда их можно будет увидеть, но нельзя изменить.
Но это все извращения.
Лучше выберите другого предка.
← →
MBo © (2002-09-03 12:42) [3]чтобы не показывалось - заведи новое свойство с таким же именем, но доступом только Read.
← →
Юрий Зотов © (2002-09-03 13:02) [4]Не уверен, но...
Попробуйте зарегистрировать для этих свойств пустой редактор (вместо класса редактора передать nil).
Естественно, в run-time это никак не скажется.
← →
VladP (2002-09-03 19:44) [5]Всем спасибо!
Пришлось все равно наследоваться от TComponent. Совет по перекрыванию доступа не работает. Свойство после этого не измененяет члены класса, но присутствует с OI.
Вообще убрать свойства нужно было лишь из-за того,что компонент имел Align=alClient и свойства просто мешали в OI.
Уще раз всем спасибо.
← →
Anatoly Podgoretsky © (2002-09-03 19:51) [6]Да, лишнее это, баловство
← →
Юрий Зотов © (2002-09-04 00:02) [7]> VladP
А зря не прислушались, батенька...
На работе возможности не было, но вот пришел домой и проверил. Все как и ожидалось.
Задача решается в 4 элементарные строчки (по одной на каждое скрываемое свойство). Что, вероятно, в миллион раз проще, чем наследование от TComponent с последующим восстановлением функциональности TWinControl (практически - дублирование кода двух мощнейших классов).
uses
...
Classes, // RegisterComponents
Controls, // TWinControl
DsgnIntf; // RegisterPropertyEditor
type
TMyWinControl = class(TWinControl)
...
end;
procedure Register;
begin
RegisterComponents("MyControls", [TMyWinControl]);
RegisterPropertyEditor(TypeInfo(integer), TMyWinControl, "Left", nil);
RegisterPropertyEditor(TypeInfo(integer), TMyWinControl, "Top", nil);
RegisterPropertyEditor(TypeInfo(integer), TMyWinControl, "Width", nil);
RegisterPropertyEditor(TypeInfo(integer), TMyWinControl, "Height", nil);
end;
← →
VladP (2002-09-04 06:34) [8]Пишу на BCB и аналог TypeInfo(integer) не нашел (__typeinfo() работает только с VCL классами).
← →
Юрий Зотов © (2002-09-04 08:55) [9]В Delphi это модуль System. В BCB тоже обязано быть - ведь и в нем регистрируются редакторы свойств. Посмотрите примеры из комплекта поставки, посмотрите пакеты для BCB - наверняка найдете. Не быть этого просто не может.
← →
Толик © (2002-09-04 13:58) [10]to VladP (04.09.02 06:34)
>>Пишу на BCB и аналог TypeInfo(integer) не нашел (__typeinfo() >>работает только с VCL классами).
Изначально вопрос стоял так: "как скрыть св-во в ObjectInsp". Интересно, а что в Вашем понимании "VCL-класс"? VCL-класс - это то, что унаследованно от TObject, ну так и в чём проблема в использовании __typeinfo()? Или вы хотите в ObjInsp засунуть класс не наследуясь от TObject?
← →
Виктор Щербаков © (2002-09-04 14:06) [11]В BCB вроде действительно 2 типа классов. VCL-классы и стандартные C++-классы.
Для VCL-классов там даже специальные ключевые ключевые есть. __delphiclass, __delphireturn.
← →
VladP (2002-09-05 09:10) [12]
PTypeInfo intTypeInfo(void)
{
PPTypeInfo Temp;
Temp = GetPropInfo(__typeinfo(TMyComponent), "Left")->PropType;
assert(Temp != NULL);
return *Temp;
}
← →
VladP (2002-09-05 09:47) [13]Работает!
RegisterPropertyEditor (*(GetPropInfo(__typeinfo(TMyComponent), "Left"))->PropType,
__classid(TMyComponent), "Left", NULL);
Страницы: 1 вся ветка
Текущий архив: 2002.09.16;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.011 c