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

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

Как обычный компонент показать поверх созданного динамически? [D7, XP]


Страницы:   1 2

Lebedev ©   (2007-11-15 08:34:00) 

У меня такая проблема. Мне необходимо отобразить компонент, который уже существует, поверх компонента, который создаётся динамически. То есть после того, как я создаю компонент динамически, он закрывает собой уже существующий. Как этого избежать?
Подскажите пожалуйста!


Юрий Зотов   (2007-11-19 05:15:00) [1]

> Lebedev   (19.11.07 04:35) [32]

Внимательно посмотрите в Object Inspector'е какие свойства есть у панели. Переведите с английского их названия. Подумайте, что бы эти названия могли означать. Нет ли там чего подходящего? А если щелкнуть на свойстве и нажать F1, то получите его описание. Нередко и с примерами.

PS
Программизьм - это такая странная вешшчь, что ежели хочешь ему научиться, то нужно научиться добывать информацию самому. Иначе бесполезно.


Lebedev   (2007-11-19 04:35:00) [2]

Спасибо!


Label1.Parent := TWinControl(RG.Controls[0]);
Label2.Parent := TWinControl(RG.Controls[1]);

Это не работает почему то. Хотя я пытался разместить ровно над items метки.

А вот идея с панелью здоровская! Сразу сработала. Только можно ли сделать, чтобы саму панель было незаметно? То есть её края не было видно.


Юрий Зотов   (2007-11-19 04:10:00) [3]

В [30] ерунду сказал. Чур, не читать.
:о)

Label1.Parent := TWinControl(RG.Controls[0]);
Label2.Parent := TWinControl(RG.Controls[1]);
...

А самое простое - положите Ваши Label'ы на панель, и тогда все разом:
Panel1.Parent := RG;
Panel1.BringToFront;
Panel1.SetBounds(...);


Юрий Зотов   (2007-11-19 04:05:00) [4]

Label1.Parent := RG.Items[0];


Lebedev   (2007-11-19 03:42:00) [5]

И как тогда быть? Имён ведь у них нет...


ANTPro   (2007-11-18 19:15:00) [6]

> [27] Lebedev   (18.11.07 17:24)

Сами Itemы так же являются оконными контролами(TRadioButton).


Lebedev   (2007-11-18 17:24:00) [7]

Есть проблема всё-таки.
Данный код работает только если я не добавляю  Items в динамически создающейся RadioGroup. Если же я добавляю Items, то метку не видно. Как мне добиться того, чтобы метка одображалась напротив Items?

Такой код не работает
RG := TRadioGroup.Create(...);
 RG.Items.Clear;
 RG.Items.Add('');
 RG.Items.Add('');
 RG.Items.Add('');
 RG.Items.Add('');
...
Label1.Parent := RG;
Label1.SetBounds(...);


Если же убрать
 RG.Items.Clear;
 RG.Items.Add('');
 RG.Items.Add('');
 RG.Items.Add('');
 RG.Items.Add('');

то метка отображается.

Но мне пункты выбора естественно необходимы. Как решить эту проблему?


Palladin   (2007-11-15 20:44:00) [8]

интересно... а что гласит это "назначение форумов"...


Lebedev   (2007-11-15 20:11:00) [9]

4 Юрий Зотов
Большое спасибо.

По-больше бы таких людей: тех, которые следуют назначению форумов.


Johnmen   (2007-11-15 12:09:00) [10]


> Юрий Зотов ©   (15.11.07 11:57) [22]

Не уйдешь! Ты ещё нужен!
:)


Anatoly Podgoretsky   (2007-11-15 12:07:00) [11]

> Юрий Зотов  (15.11.2007 11:57:22)  [22]

Не поцелуя?


Юрий Зотов   (2007-11-15 11:57:00) [12]

Злые вы. Уйду я от вас.
:о)


Johnmen   (2007-11-15 11:43:00) [13]

Ну и для полноты удовлетворения:
А поцеловать? (с)


Юрий Зотов   (2007-11-15 11:34:00) [14]

> Reindeer Moss Eater ©   (15.11.07 11:29) [19]

Можно.

RG := TRadioGroup.Create(...);
...
Label1.Parent := RG;
Label1.SetBounds(...);


Reindeer Moss Eater   (2007-11-15 11:29:00) [15]

Вот теперь самое время сказать "спасибо! а примерчик кода можно?"
:)


Юрий Зотов   (2007-11-15 11:26:00) [16]

> Lebedev   (15.11.07 10:54) [14]

Визуальные компоненты (контролы) бывают оконными (потомки TWinControl) и графическими (потомки TGraphicControl).  Чтобы контрол стал видимым, он должен иметь родительский констрол (Parent). Родительским контролом (парентом) может быть только оконный контрол.

Контролы всегда прорисовываются поверх своего парента, в его пределах и в его координатах (отсчитываются от левого верхнего угла парента). Чтобы контрол мог прорисоваться, ему нужна некая канва (точнее, не канва, а контекст устройства DC, но пока что не берите это в голову, а то крыша съедет). Оконные контролы имеют свою собственную канву и рисуются на ней, а графические контролы своей канвы не имеют и рисуются прямо на канве парента. Поэтому, если оконный и графический контролы имеют общего парента и прекрывают друг друга, то оконный контрол ВСЕГДА окажется выше графического (то есть, закроет его).

Это можно сравнить с крышкой стола (парент), на которой нарисованы рисунки (графические контролы) и лежат предметы (оконные контролы). Ясно, что предмет всегда будет поверх рисунка и никакие магические заклинания (BringToFront или SendToBack) тут не помогут.

А что нужно сделать, чтобы рисунок все же оказался поверх предмета? Нужно нарисовать его на самом предмете, а не на крышке стола. То есть, сделать парентом не форму, а тот контрол, поверх которого надо оказаться.

Теперь по сабжу. Label - это графический контрол. Форма, панель и RadioGroup - оконные контролы (причем если панель лежит на форме, то парентом панели эта форма и будет). Когда Вы кладете на форму (или на панель) Label, то форма (или панель) становится парентом этой Label. Далеее, в rin-time Вы создаете RadioGroup и ее парентом тоже делаете панель. И тогда Label НИКАК не может прорисоваться поверх RadioGroup.

А чтобы смог, надо парентом Label сделать эту самую RadioGroup. И не забыть назначить Label новые координаты.


Anatoly Podgoretsky   (2007-11-15 11:20:00) [17]

> Johnmen  (15.11.2007 11:11:15)  [15]

Да он не указывает, а на слабо берет, только какой толк отвечать, если ответы он не читает.


Vice____   (2007-11-15 11:14:00) [18]


> Reindeer Moss Eater ©   (15.11.07 10:20) [12]
>  Label.Parent := RadioGroup


русским языкомсказано)
Label.Parent := RadioGroup


Johnmen   (2007-11-15 11:11:00) [19]


> Не все же такие крутые мегапрограммеры, как вы.

Это мы уже заметили. Что ты не крут. Что не мегапрограммер. А м.б. и не программер вовсе...
Но хоть один палец-то у тебя есть, чтобы нажать F1? И хоть один глаз, чтобы прочитать?

> Ребят, вместо того, чтобы прикалывать, лучше бы просто помогали.

А вот что нам лучше, мы сами как-нибудь решим.


Lebedev   (2007-11-15 10:54:00) [20]

Ребят, вместо того, чтобы прикалывать, лучше бы просто помогали. Не все же такие крутые мегапрограммеры, как вы.

Если у меня такая проблема в задаче, то это следствие чего-то. И просто не имеет смысла пытаться мне советовать изменить узловия моей задачи. Так как это будет уже не моя задача (проблема).


> Возможно. Label.Parent := RadioGroup.


Можно это чуть подробнее объяснить, пожалуйста.


Страницы:   1 2

Наверх

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