Тип Помощники - это всего лишь сахара для компиляции, они не будут влиять на уже скомпилированный код, этот запас VCL вместе с TPageControl
и TForm
. Это тупик.
Однако у вас есть небольшое заблуждение, что TPageControl... internally creates... the TTabSheets
. Действительно, когда вы создаете листы с помощью самого TPageControl
, например, щелкнув правой кнопкой мыши и выбрав «Новая вкладка», что произойдет. Но когда вы создаете объект живой формы из файла DFM (или ресурса DFM в скомпилированном EXE), который сам составляет TForm
, который создает ВСЕ компоненты, включая как элемент управления страницы, так и его таблицы.
Просто посмотрите мой ответ на How to efficiently let a `ParentFont = False` child control to use same font name as parent? - что бы показать вам, насколько это о владельца - TForm
, а не о TPageControl
или другого родителя компонентов, когда речь идет о выборе конкретных классов для фактических вкладок или других элементов ..
Таким образом, вы можете проводить только таблицы подклассов.
- Создать
TMyTabsheet = class(TTabSheet)
компонент
- Создать и установить в IDE времени разработки пакета, что бы ввести новую вкладку подклассы лист Delphi Form Editor
- В вашей форме поставить запас
TPageControl
и создать все необходимые вкладки в обычном порядке
- в форме формы IDE щелкните правой кнопкой мыши по свободному пространству формы и в меню сделайте команду «Просмотр как текст Alt-F12» - вы увидите текстовое содержимое файла DFM формы.
- в этих источниках DFM найти вкладку листы и изменить их запас
TTabSheet
класс быть производный подклассу
- правой кнопкой мыши текстовый редактор и выберите «View As Form Alt-F12» команды
- Если все было сделано правильно то Delphi теперь воссоздает форму с вашими листами нового класса. Найдите свои новые объекты в Object Inspector и измените их.
- Теперь переключитесь на источники .Pas вашей формы и найдите объявления этих листов вкладок и измените их тип тоже. Это требуется только в том случае, если вам нужно будет получить доступ к своим новым свойствам из источников Delphi. Если нет, вы можете оставить свою декларацию как
TTabSheet
в pas-файле, так как ваш класс является прямым потомком.Вы можете оставить эти объявления такими, какими они были, - но тогда вам нужно будет добавить RegisterClass(TMyTabSheet);
звонок в самый раздел initialization
внизу вашего устройства, поэтому, когда форма будет построена сама из DFM, он сможет найти реализацию класса по названию. Если вы измените объявление (по крайней мере, одно из них), тогда ваша форма автоматически вызовет все необходимые RegisterClass
перед потоковой передачей из DFM. Выберите любой вариант.
- Необязательно и позже расширьте свой пакет времени разработки, чтобы найти и захватить контекстное меню редактора форм IDE для
TPageControl
и добавить там команду «Новая моя подкласса». Просто чтобы избежать ручного постфактумного редактирования DFM. если бы вы сделали это часто
Это чувствует, как что-то я буду сожалеть, когда новая версия обновления Delphi TPageControl
После создания и настроил форму и сохранили его в DFM - это было бы be TForm
, который создает все компоненты из сохраненных DFM-данных и включает также ваши вкладки. Если бы очень невероятное событие EMBT не убило всю потоковое VCL-потоковое воспроизведение (сделанное еще в Delphi 1 в 1995 году) и перепроектировало его с нуля (одновременно уничтожая всю совместимость с существующими источниками Delphi), не должно быть проблем с прямой совместимостью с указанием вашего класса в DFM. Это стандартный способ разработки VCL - для получения конкретных типов компонентов из DFM.
будет ли это реальная собственность или только один, смоделированный во время разработки? вы можете обойтись без подкласса TTabSheet? –