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