Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.12;
Скачать: CL | DM;

Вниз

VCL   Найти похожие ветки 

 
Sonder ©   (2002-12-02 22:59) [0]

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

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


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


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

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

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


 
Sonder ©   (2002-12-03 04:57) [2]

Не работает


 
KSergey ©   (2002-12-03 07:12) [3]

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


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

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


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

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

а не

FInnerControl.Parent := Self;


 
Sonder ©   (2002-12-03 18:53) [6]


> А почему
> 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"?





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

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


 
Sonder ©   (2002-12-03 18:59) [8]

Поправка:

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

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


 
Sonder ©   (2002-12-03 19:02) [9]


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

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


 
icWasya ©   (2002-12-03 19:14) [10]

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


 
Sonder ©   (2002-12-03 19:19) [11]


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

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


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

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

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


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

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


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

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


 
Sonder ©   (2002-12-03 19:32) [13]


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

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



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

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


 
Sonder ©   (2002-12-03 19:45) [15]

TInnerControl = class(TCustomPanel)


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

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


 
Sonder ©   (2002-12-03 20:12) [17]


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2002.12.12;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.022 c
3-36043
Rustik
2002-11-25 16:06
2002.12.12
Выдает сообщение Error creating cursor handle при пересчете табли


3-35995
vacula
2002-11-23 00:17
2002.12.12
ADO


14-36344
eLVik
2002-11-19 15:41
2002.12.12
Посоветуйте


3-36049
Zn
2002-11-25 15:58
2002.12.12
Можно ли из Query обратиться к курсору.


3-36010
ao1973
2002-11-24 08:53
2002.12.12
Опять я с этим ADO