Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Невизуальное наследование TForm

88K
07 декабря 2015 года
fragman
2 / / 07.12.2015
Добрый день. В одном проекте (C++ Builder 2010) возникла необходимость в создании базового класса форм (условно TBaseForm) наследованным от TForm. В дальнейшем планируется создание наследников даного класса имеющих все возможности TForm + необходимый общий функционал. Был создан юнит с описанием:
 
Код:
class TBaseForm : public TForm
{
...
};
Теперь при добавлении формы в стандартном шаблоне меняется базовый класс на TBaseForm:
 
Код:
class TForm1 : public TBaseForm
{
...
} ;
И вроде бы даже это работает как задумано. Вопрос заключается в том, правильно ли выполнена реализация? Можно ли таким образом организовывать наследование TForm и нет ли тут подводных камней? Буду признателен за информацию по данной теме. То что удалось нагуглить в основном относится к 6-му билдеру и в моем случае неприменимо.
1
07 декабря 2015 года
kot_
7.3K / / 20.01.2000
Правильно ли она выполнена и про подводные камни можно говорить понимая что и зачем пытались достичь.
В том объеме, в котором задача описана - да, все правильно. Именно так и надо.
88K
07 декабря 2015 года
fragman
2 / / 07.12.2015
Цитата: kot_
Правильно ли она выполнена и про подводные камни можно говорить понимая что и зачем пытались достичь.
В том объеме, в котором задача описана - да, все правильно. Именно так и надо.

Спасибо за ответ.
Подразумевается авторегистрация всех дочерних форм в статическом свойстве базового класса. То есть вся логика работы формы инкапсулирована в ней самой, но все формы имеют общие методы и свойства логически их объеденяющие. Во всем остальном планируется использовать наследников как обычные формы.
Про подводные камни имелось ввиду следующее:
не возникнет ли проблем при использовании WinAPI-шных функций типа SendMessage которые требуют указатель на окно (например);
нет ли явных ограничений на подобного рода наследование (на просторах интернета читал что VCL-классы в явном виде не предназначены для создания дочерних классов вручную).
Проще говоря будет ли поведение таких форм отличатся от автоматически генерируемых билдером.

1
08 декабря 2015 года
kot_
7.3K / / 20.01.2000
Цитата: fragman

Подразумевается авторегистрация всех дочерних форм в статическом свойстве базового класса. То есть вся логика работы формы инкапсулирована в ней самой, но все формы имеют общие методы и свойства логически их объеденяющие.

Что такое "статическое свойство базового класса" в котором "подразумевается авторегистрация" - я хз. "Инкапсулирована логика" - тоже самое, по крайней мере если я знаю значение этого слова - то судить об этом никак не могу :) Если же автор под этим имеет ввиду что он все общие методы для конкретной формы свел в базовый класс - то это вероятно вполне разумное решение. Инкапсуляция же - подразумевает предоставление интерфейсов и сокрытие данных.

Цитата: fragman

не возникнет ли проблем при использовании WinAPI-шных функций типа SendMessage которые требуют указатель на окно (например);

нет не возникнет (по крайней мере при публичном наследовании) так как ваш класс наследует от TWinControl (через TForm).

Цитата: fragman

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

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

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог