2016-10-19 6 views
0

Я хочу, чтобы потомок TPageControl не имел Style, кроме tsTabs.TPageControl: как предотвратить изменение свойства стиля

На первый взгляд я попытался переопределить SetStyle, но он объявлен частным в базовом классе. у кого есть идеи?

+0

Просто используйте некоторые сдержанности. –

+0

Я бы ожидал, что будет доступен «TCustomPageControl». но нет. см. связанную Q, которая может помочь: [Как удалить свойство из потомствующего компонента] (http://stackoverflow.com/questions/15961579/how-do-you-remove-a-property-from-a-descendent- компонент) – kobik

+0

@kobik: 'TPageControl' происходит от' TCustomTabControl'. Но в любом случае большинство методов, описанных в этой ссылке, просто скрывают свойство во время разработки, но свойство все еще доступно для кода во время выполнения. –

ответ

3

TPageControl не поддерживает то, о чем вы просите. Для того, чтобы сделать то, что вы просите, вы должны либо:

  1. ваш компонент повторно объявить Style свойство с новыми методами геттер/сеттер, а затем иметь сеттер выход, не делая ничего. Однако унаследованное свойство Style по-прежнему будет технически доступно во время выполнения, если пользователь компонента действительно хочет получить к нему доступ.

  2. вывести свой компонент из TCustomTabControl вместо TPageControl, и повторно реализовать все, что TPageControl делает, но без содействия защищенных Style собственности. Однако унаследованное свойство Style по-прежнему будет технически доступно во время выполнения, если пользователь компонента действительно хочет получить к нему доступ.

  3. ваш компонент переопределяет виртуальный метод CreateParams() и заставляет стиль окна TCS_TABS в поле TCreateParams.Style. Свойство Style по-прежнему будет иметь любое значение, которое назначает пользователь (что также повлияет на поведение свойства TabPosition), но по крайней мере основное окно всегда будет вести себя так, как если бы использовался стиль tsTabs.

  4. используйте обходную библиотеку, чтобы зацепить TCustomTabControl.SetStyle() непосредственно во время выполнения и вернуть ее, ничего не делая.

+0

@kobik: Любая процедура/функция/метод может быть подключена во время выполнения, сложная часть заключается в получении адреса памяти, и есть способы сделать это даже для частных методов. –