Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.006 c
14-36366
iNew
2002-11-21 06:33
2002.12.12
Говорят, что для обучения программированию лучше подходят


1-36186
neXt
2002-12-04 09:06
2002.12.12
В чём я не прав?


1-36111
KMI
2002-12-03 11:19
2002.12.12
Как создать текстовый файл в DOS-кодировке?


14-36361
Шишкин Илья
2002-11-20 20:34
2002.12.12
А как сделать так, чтобы мой IP не было видно в форуме?


1-36240
Svin
2002-12-01 13:51
2002.12.12
()_/_()





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский