Форум: "Основная";
Текущий архив: 2002.12.12;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c