Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.042 c
2-1195375211
JJLev
2007-11-18 11:40
2007.12.16
TSpeedButton +Canvas +Rect


9-1164498939
_[*_0_*]_T_[*_0_*]_ izvrat_*
2006-11-26 02:55
2007.12.16
OpenGL проекции


2-1195575763
Angela
2007-11-20 19:22
2007.12.16
Edit в MSExcel


6-1175771739
Мимопроходящий
2007-04-05 15:15
2007.12.16
TWebBowser и кодировка


2-1195744747
Новенький
2007-11-22 18:19
2007.12.16
Библиотека со звуком....





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский