Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
ВнизКак обычный компонент показать поверх созданного динамически? Найти похожие ветки
← →
Lebedev (2007-11-15 08:34) [0]У меня такая проблема. Мне необходимо отобразить компонент, который уже существует, поверх компонента, который создаётся динамически. То есть после того, как я создаю компонент динамически, он закрывает собой уже существующий. Как этого избежать?
Подскажите пожалуйста!
← →
MBo © (2007-11-15 08:39) [1]BringToFront
← →
Однокамушкин (2007-11-15 08:40) [2]См. методы SendToBack и BringToFront, только учтите, что неоконный компонент (это тот, у которого в предках нет TWinControl), никогда и ни при каких обстоятельствах не может перекрыть оконный, расположенный на том же родителе
← →
Lebedev (2007-11-15 09:48) [3]А как использовать метод BringToFront?
Мне необходимо компонент Label (точнее RTFLabel) поместить по верх нидамиески создающегося RadioGroup. RadioGroup находится на Panel. Ну и это всё на Форме, конечно.
В моём случае это возможно?
← →
Reindeer Moss Eater © (2007-11-15 09:50) [4]А зачем вообще label на радиогруппе?
← →
Lebedev (2007-11-15 09:54) [5]Кстати, пробую и не получается. (((
ПишуRTFlabel1.BringToFront;
Но ничего не видно.
Как быть?
>А зачем вообще label на радиогруппе?
Так как Items радиогруппы сильно ограничены в шрифтах.
← →
Reindeer Moss Eater © (2007-11-15 10:00) [6]Так как Items радиогруппы сильно ограничены в шрифтах.
Уж если извращаться, то по полной.
Заменяем радиогруппу отдельно стоящими радиокнопками без подписей и ставим рядом свои красивые 3D лэйблы.
← →
palva © (2007-11-15 10:08) [7]
> RTFlabel1.BringToFront;
> Но ничего не видно.
Попробовать вместо Label использовать StaticText
← →
Reindeer Moss Eater © (2007-11-15 10:11) [8]Статик текст тоже "сильно ограничен в шрифтах"
:)
← →
palva © (2007-11-15 10:14) [9]
> Статик текст тоже "сильно ограничен в шрифтах"
Зато для него работает BringToFront
← →
Reindeer Moss Eater © (2007-11-15 10:17) [10]Зато для него работает BringToFront
Если его убрать, и пользоваться Items радиогруппы, то сам бринтуфронт не понадобится.
Автор - дизайнер красивого пользовательского интерфейса.
← →
Юрий Зотов © (2007-11-15 10:18) [11]> Lebedev (15.11.07 09:48) [3]
> А как использовать метод BringToFront?
Это можно посмотреть в справке.
> Мне необходимо компонент Label (точнее RTFLabel) поместить по верх
> нидамиески создающегося RadioGroup.
Вы не прочитали [2], или не задумались над [2]. Если человек не читает ответов или не задумывается над ними, то непонятно, зачем он задает вопросы.
> В моём случае это возможно?
Возможно. Label.Parent := RadioGroup.
← →
Reindeer Moss Eater © (2007-11-15 10:20) [12]Возможно. Label.Parent := RadioGroup.
Это ж сколько программировать придется?!
У него лэйблы в дизайне на форме лежат, а радиогруппа на рантайме создается.
:)
← →
Юрий Зотов © (2007-11-15 10:25) [13]> Reindeer Moss Eater © (15.11.07 10:20) [12]
Я читал. Что ж... зато человек поймет смысл рекомендации "не желай странного".
← →
Lebedev (2007-11-15 10:54) [14]Ребят, вместо того, чтобы прикалывать, лучше бы просто помогали. Не все же такие крутые мегапрограммеры, как вы.
Если у меня такая проблема в задаче, то это следствие чего-то. И просто не имеет смысла пытаться мне советовать изменить узловия моей задачи. Так как это будет уже не моя задача (проблема).
> Возможно. Label.Parent := RadioGroup.
Можно это чуть подробнее объяснить, пожалуйста.
← →
Johnmen © (2007-11-15 11:11) [15]
> Не все же такие крутые мегапрограммеры, как вы.
Это мы уже заметили. Что ты не крут. Что не мегапрограммер. А м.б. и не программер вовсе...
Но хоть один палец-то у тебя есть, чтобы нажать F1? И хоть один глаз, чтобы прочитать?
> Ребят, вместо того, чтобы прикалывать, лучше бы просто помогали.
А вот что нам лучше, мы сами как-нибудь решим.
← →
Vice____ (2007-11-15 11:14) [16]
> Reindeer Moss Eater © (15.11.07 10:20) [12]
> Label.Parent := RadioGroup
русским языком сказано)
Label.Parent := RadioGroup
← →
Anatoly Podgoretsky © (2007-11-15 11:20) [17]> Johnmen (15.11.2007 11:11:15) [15]
Да он не указывает, а на слабо берет, только какой толк отвечать, если ответы он не читает.
← →
Юрий Зотов © (2007-11-15 11:26) [18]> 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 новые координаты.
← →
Reindeer Moss Eater © (2007-11-15 11:29) [19]Вот теперь самое время сказать "спасибо! а примерчик кода можно?"
:)
← →
Юрий Зотов © (2007-11-15 11:34) [20]> Reindeer Moss Eater © (15.11.07 11:29) [19]
Можно.
RG := TRadioGroup.Create(...);
...
Label1.Parent := RG;
Label1.SetBounds(...);
← →
Johnmen © (2007-11-15 11:43) [21]Ну и для полноты удовлетворения:
А поцеловать? (с)
← →
Юрий Зотов © (2007-11-15 11:57) [22]Злые вы. Уйду я от вас.
:о)
← →
Anatoly Podgoretsky © (2007-11-15 12:07) [23]> Юрий Зотов (15.11.2007 11:57:22) [22]
Не поцелуя?
← →
Johnmen © (2007-11-15 12:09) [24]
> Юрий Зотов © (15.11.07 11:57) [22]
Не уйдешь! Ты ещё нужен!
:)
← →
Lebedev (2007-11-15 20:11) [25]4 Юрий Зотов
Большое спасибо.
По-больше бы таких людей: тех, которые следуют назначению форумов.
← →
Palladin © (2007-11-15 20:44) [26]интересно... а что гласит это "назначение форумов"...
← →
Lebedev (2007-11-18 17:24) [27]Есть проблема всё-таки.
Данный код работает только если я не добавляю 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("");
то метка отображается.
Но мне пункты выбора естественно необходимы. Как решить эту проблему?
← →
ANTPro © (2007-11-18 19:15) [28]> [27] Lebedev (18.11.07 17:24)
Сами Itemы так же являются оконными контролами(TRadioButton).
← →
Lebedev (2007-11-19 03:42) [29]И как тогда быть? Имён ведь у них нет...
← →
Юрий Зотов © (2007-11-19 04:05) [30]Label1.Parent := RG.Items[0];
← →
Юрий Зотов © (2007-11-19 04:10) [31]В [30] ерунду сказал. Чур, не читать.
:о)
Label1.Parent := TWinControl(RG.Controls[0]);
Label2.Parent := TWinControl(RG.Controls[1]);
...
А самое простое - положите Ваши Label"ы на панель, и тогда все разом:
Panel1.Parent := RG;
Panel1.BringToFront;
Panel1.SetBounds(...);
← →
Lebedev (2007-11-19 04:35) [32]Спасибо!
Label1.Parent := TWinControl(RG.Controls[0]);
Label2.Parent := TWinControl(RG.Controls[1]);
Это не работает почему то. Хотя я пытался разместить ровно над items метки.
А вот идея с панелью здоровская! Сразу сработала. Только можно ли сделать, чтобы саму панель было незаметно? То есть её края не было видно.
← →
Юрий Зотов © (2007-11-19 05:15) [33]> Lebedev (19.11.07 04:35) [32]
Внимательно посмотрите в Object Inspector"е какие свойства есть у панели. Переведите с английского их названия. Подумайте, что бы эти названия могли означать. Нет ли там чего подходящего? А если щелкнуть на свойстве и нажать F1, то получите его описание. Нередко и с примерами.
PS
Программизьм - это такая странная вешшчь, что ежели хочешь ему научиться, то нужно научиться добывать информацию самому. Иначе бесполезно.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.046 c