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

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

VCL [D6]


Sonder ©   (2002-12-02 22:59:00) 

Мастера! Пожалуйста, проясните для меня (и, возможно для многих), такой нюанс - если я, допустим, создаю контрол внутри другого таким типа образом:

Inherited Create(AOwner);
FInnerControl := TInnerControl.Create(Self);
TInnerControl.Parent := Self;


и далее в том же духе, то как мне в дизайне бросить на него(на FInnerControl) какой-то еще компонент. Вообще говоря, это касается компонента, содержащего в себе class(TCollection).


Юрий Зотов   (2002-12-03 20:17:00) [1]

Проверяйте порядок создания. Посмотрите DFM в виде текста.


Sonder   (2002-12-03 20:12:00) [2]


> Тогда у брошенного на TInnerControl Edit"а Owner"ом

Дошло уже. Спасибо за помощь. Дело в том, что Edit не отображается на компоненте во время выполнения. Я не проверял, но наверное папа у него становится этот "мастер".


Юрий Зотов   (2002-12-03 20:01:00) [3]

Тогда у брошенного на TInnerControl Edit"а Owner"ом должна автоматически становится форма, а Parent"ом - этот самый TInnerControl. Все как у панели - если, конечно, не вмешиваться своим кодом в этот стандартный механизм.


Sonder   (2002-12-03 19:45:00) [4]

TInnerControl = class(TCustomPanel)


Юрий Зотов   (2002-12-03 19:43:00) [5]

От чего наследуется TInnerControl?


Sonder   (2002-12-03 19:32:00) [6]


> И когда берешь и бросаешь на "MasterControl", например,
> Edit, Owner"ом (Parent"ом - горячка)...

Теперь другая проблема. Бросаешь Edit, все нормально - приклеился, как миленький. Только вот другая проблемка выскочила - папа то у этого Edit - все равно главный компонент. Ругаюсь. Ладноб, разберемся.


Юрий Зотов   (2002-12-03 19:26:00) [7]

> И когда берешь и бросаешь на "MasterControl", например, Edit,
> Owner"ом у етого едита становится "MasterControl".

А на самом деле, Owner"ом у "етого едита" становится форма. А никакой не MasterControl. Азбука, однако.


> Как сделать так, что-бы Owner"ом у всеми брошенного едита
> становился "FInnerControl"?

InsertComponent. Но получите головную боль с сохранением формы.


> Ну прям как на Panel1

Вот Вам и сказали - csAcceptControls. Это и будет "прям как на Panel1". Никакие Owner"ы здесь ни при чем.


Sonder   (2002-12-03 19:19:00) [8]


> Юрий Зотов © (03.12.02 02:19)
> Непонятно, при чем тут коллекции, но, похоже, нужно вот
> что:
>
> with FInnerControl do
> ControlStyle := ControlStyle + [csAcceptsControls];

Склоняю голову. Мастер. Этого даже не надо делать. Епрст. Что за глюк. Когда пробовал, не работало. Сейчас работает. Развел тут базар... Кого покоробило, прошу прощения. Юрию спасибо за урок - не фиг кидаться в панику, посиди, подумай, попробуй ещё разок.


icWasya   (2002-12-03 19:14:00) [9]

дело в том что в дизайнере Delphi может работать только с Control"ами, у которых Owner = Form - другие просто не видитю


Sonder   (2002-12-03 19:02:00) [10]


> Smithson © (03.12.02 18:57)
> После создания FInner... руками перебрать контролы на объекте-хозяине
> (массив Controls) и задать для желаемых владельцем FInner...

Какой-такой Controls? Это который Components?
Хорошо. RemoveComponent, InsertComponent. Ну не хочу я этим... в RunTime...


Sonder   (2002-12-03 18:59:00) [11]

Поправка:

> И когда берешь и бросаешь на "MasterControl", например,
> Edit

Этим я хотел сказать, что экземпляры FInnerControl уже созданы и бросить этот Edit я пытаюсь на них. Ну прям как на Panel1 на форме в Design-Time.


Smithson   (2002-12-03 18:57:00) [12]

После создания FInner... рукамиперебрать контролы на объекте-хозяине (массив Controls) и задать для желаемых владельцем FInner...


Sonder   (2002-12-03 18:53:00) [13]


> А почему
> TInnerControl.Parent := Self;

Ошибка. Извините, потерял дискуссию. Я думаю

> Кулюкин Олег ©

и сам понял, что подобное выражение привело бы и у меня к ошибке компилятора.

> KSergey © (03.12.02 07:12)
> Тогда не прячьтесь за InnerControl

А чего за ним прятаться. "Inner" - в переводе с аглицкого - внутренний. Это просто пример, мне было не досук приводить код модуля, да это и не обязательно.
Еще раз:

> with FInnerControl do
> ControlStyle := ControlStyle + [csAcceptsControls];

TInnerControl = class(TCustomPanel), если внимательно посмотреть, экземпляр этого класса изначально[csAcceptsControls].


> Юрий Зотов © (03.12.02 02:19)
> Непонятно, при чем тут коллекции..

По - моему, ничего непонятного. Есть компонент (Назовем TMasterControl, конструктор которого я попытался привести выше, но с недопустимой и грубой ошибкой / F/ T, которая, по-моему, всего-лишь опечатка). У него есть коллекция. У коллекции есть поле. " FInnerControl: TInnerControl". Я создаю экземп. TMasterControl. В его конструкторе создаю коллекцию, в конструкторе коллекции даю ей понять, что за итемы у неё есть, в конструкторе итема создаю экз. TInnerControl, Parent которого = компонент, владеющий коллекцией.

Именно поэтому я до насттоящего момента опустил эти детали, потому что главное :

FInnerControl := TInnerControl.Create(Self);
FInnerControl.Parent := Self;


И когда берешь и бросаешь на "MasterControl", например, Edit, Owner"ом у етого едита становится "MasterControl". Как сделать так, что-бы Owner"ом у всеми брошенного едита становился "FInnerControl"?




Кулюкин Олег   (2002-12-03 08:49:00) [14]

А почему
TInnerControl.Parent := Self;

а не

FInnerControl.Parent := Self;


Дмитрий К.К.   (2002-12-03 07:42:00) [15]

Ет гостайна ;)


KSergey   (2002-12-03 07:12:00) [16]

Тогда не прячьтесь за InnerControl
Дайте нормальные названия и отчего наследуете каждый компонент


Sonder   (2002-12-03 04:57:00) [17]

Не работает


Юрий Зотов   (2002-12-03 02:19:00) [18]

Непонятно, при чем тут коллекции, но, похоже, нужно вот что:

with FInnerControl do
ControlStyle := ControlStyle + [csAcceptsControls];


Наверх

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