Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создать свой потомок от TForm и проектировать потомки от него. [D7, WinXP]


Terasbetoni ©   (2008-09-01 18:48:00) 

Здравствуйте. Подскажите, пожалуйста, как сделать такое:
Создать класс-потомок от TForm (потомок будет содержать несколько полей типа integer в public) и чтобы потом от этого класса можно было создавать классы-потомки и проектировать их средствами визуального проектирования (как будто при проектировании потомка от обычного TForm)


Terasbetoni   (2008-09-19 18:01:00) [1]

Спасибо


Плохиш   (2008-09-19 11:15:00) [2]


> Terasbetoni   (18.09.08 16:46) [5]
> Я хотел бы создать собственный класс от TForm, а потом уже
> наследоваться от него, а не от TForm (в вопросе я об этом
> написал). Если делать так, как написали вы, то при добавлении
> в проект заранее сделанной и добавленной в хранилище (Repository)
> формы, создается потомок от TForm,

У меня создаётся потомок от той формы, от которой я его наследую, что я делаю не так?


KSergey   (2008-09-19 10:57:00) [3]

> Terasbetoni   (18.09.08 17:40) [10]
> То есть форма содержит компоненты, размещенные на ней во время дизайна.

И? В репозиторий добавлять уже пробовал? В чем беда - я не пойму.

> Dennis I. Komarov ©   (18.09.08 18:02) [13]
> Я сейчас даже не закрывал дельфи, а просто TForm2 = class(TForm1),
>  ну и с uses поиграться надо...

А, ну значит я правильно помню и понимаю, что dfm править не надо в данном случае.
Но с закрыванием - прикольнее, больше на магию похоже :)


Dennis I. Komarov   (2008-09-18 18:02:00) [4]


> Terasbetoni   (18.09.08 17:40) [10]

И какие такие компоненты:
> размещенные на ней во время дизайна...
попадают
> published-поля

т.е. что есть в published и зачем?

зы Для примера бросил лабел и бутон - все нормуль...


> KSergey ©   (18.09.08 17:03) [8]

Я сейчас даже не закрывал дельфи, а просто TForm2 = class(TForm1), ну и с uses поиграться надо...


Jeer   (2008-09-18 17:59:00) [5]


> Terasbetoni   (18.09.08 17:46) [11]


Может пора за книжки ?
Или хотя бы вникнуть в [1] ?


> создается потомок от TForm, а всё его содержимое уже добавляется
> на него


а use, copy, inherited там не заметил радио-кнопки ?


Terasbetoni   (2008-09-18 17:46:00) [6]

Интересно, можно ли как то получить (автоматически) код создания компонентов, размещенных на форме во время дизайна, который выполняется автоматом перед OnCreate. Тогда этот код можно было бы просто вставить в начало того же OnCreate. Тогда бы трюк из [8] прокатил бы и с компонентами, размещенными на форме во время дизайна. Другое дело: мы их не будем видеть во время дизайна потомка...


Terasbetoni   (2008-09-18 17:40:00) [7]

Dennis I. Komarov ©   (18.09.08 16:53) [7] -- гениально...

KSergey ©   (18.09.08 17:03) [8]
А что, если форма содержит published-поля? То есть форма содержит компоненты, размещенные на ней во время дизайна...


KSergey   (2008-09-18 17:05:00) [8]

Пока набирал - Dennis I. Komarov уже написал это в стиле "Кр. - сестр. таланта." :)


KSergey   (2008-09-18 17:03:00) [9]

Короче, если наш "промежуточный" класс формы не содержит published свойств - делаем так:
Создаем юнит с нашим наследником от TForm (руками! т.е. должен быть только pas-файл). Прописываем туда необходимую функциональность.
Закрываем дельфи, добавляем в uses этот наш юнит в иниты с формами где надо пронаследоваться и заменяем с тексте pas-файлов наследование от TForm на наследование от нашего класса.
Открываем проект в дельфи - и вуаля!
(на сколько помню, в dfm-файле менять наследование не нужно).

PS
Как-то сам наткнулся на это.
А потом на каком-то русскоязычном дельфийском сайте этот "трюк" признали лучшим из присланных на конкурс, описание явно можно найти, но не помню где. Было досадно, что я не поучаствовал, думал это и так всем известно :)


Dennis I. Komarov   (2008-09-18 16:53:00) [10]

TMyForm1 = class(TMyForm)


Jeer   (2008-09-18 16:49:00) [11]

Ничто не ограничивает вложенность классов, кроме мозговых ограничений.


Terasbetoni   (2008-09-18 16:46:00) [12]

Я хотел бы создать собственный класс от TForm, а потом уже наследоваться от него, а не от TForm (в вопросе я об этом написал). Если делать так, как написали вы, то при добавлении в проект заранее сделанной и добавленной в хранилище (Repository) формы, создается потомок от TForm, а всё его содержимое уже добавляется на него. А я же хочу, чтобы создавался потомок от, к примеру, класса TMyForm, который был спроектирован заранее (а не от TForm)


Германн   (2008-09-17 19:52:00) [13]


>  А как это сделать?

Правой кнопкой мыши кликаем по форме. Пункт Add to Repository


Terasbetoni   (2008-09-17 19:38:00) [14]

Германн ©   (01.09.08 20:46) [1]
 А как это сделать?


sniknik   (2008-09-01 21:30:00) [15]

File->New->Other->Progect1


Германн   (2008-09-01 20:46:00) [16]

You can add your own projects, forms, frames, and data modules to those already available in the Object Repository.


Наверх

Титульная страница Поиск, карта сайта Написать письмо