![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как обычный компонент показать поверх созданного динамически? [D7, XP]
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.
Можно это чуть подробнее объяснить, пожалуйста.