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

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

не могу добавить рисунок в RadioGroup [D5, Win2k]


patrol ©   (2002-12-31 12:13:00) 

В форме нужно напротив каждой радиоточки, кроме надписи, иметь еще и рисунок. Добавляю рисунок, он скрывается под этой группой. Наверх вытащить не получается.
Подскажите, можно это сделать? Я только учусь.


patrol   (2003-01-04 10:23:00) [1]

Юрий, огромное Вам спасибо!
Очень доходчиво объяснили. Буду пробовать.


Юрий Зотов   (2003-01-04 09:37:00) [2]

> patrol
> Ну кто-нибудь мне толком объяснит?

Все контролы Delphi делятся на две группы - графические (потомки TGraphicControl) и оконные (потомки TWinControl). Первые, по своей сути - это просто рисунки, о которых Windows ничего не знает (потому что в Windows нет графических контролов) и поэтому их прорисовку никак не поддерживает. Вторые - это по сути окна, о которых Windows все известно и которая поэтому поддерживает их самопрорисовку, посылая этим окнам нужные сообщения.

Представьте, что форма - это крышка стола. Тогда графические контролы можно сравнить с рисунками на этой крышке, а оконные - с предметами, лежащими на ней. Теперь скажите - может ли рисунок на крышке стола оказаться НАД предметом, который лежит на той же крышке? Очевидно, не может, предмет всегда закроет рисунок.

Так вот, TImage - это графический контрол (рисунок), а TRadioGroup1 - оконный (предмет). Поэтому и не срабатывает совет boby_g. Он и не может сработать.

Чтобы рисунок был виден, его надо рисовать не на поверхности стола, а на поверхности самого предмета. Грубо говоря, такая поверхность в Delphi называется Canvas (холст), а в Windows - DC (device context, контекст устройства). Чтобы добиться именно такой прорисовки, можно рисовать рисунок "ручками" (как посоветовал Rouse_), но можно сделать и проще. В обработчике OnShow формы напишите одну строку:

Image1.Parent := RadioGroup1;

и тогда в run-time (но не в deign-time!) Image1 будет "сам собой" рисоваться на "поверхности" RadioGroup1.


patrol   (2003-01-04 09:10:00) [3]

Ну кто-нибудь мне толком объяснит?


patrol   (2002-12-31 15:09:00) [4]

Я же чайник! Ничего не поняла.
Какое сообщение WM_PAINT ?
Где этот код писать надо? Что такое АС? ...
Можно подробней в Аське обсудить #93947180


Rouse_   (2002-12-31 14:52:00) [5]

На сообщение WM_PAINT делай так

inherited;
AC:= TCanvas.Create;
AC.Handle := GetWindowDC(RadioGroup.Handle);


Далее рисуешь на самом канвасе AС
Не забудь его освободить

Желаю успехов


patrol   (2002-12-31 14:47:00) [6]

язык программистов транснационален! :)
Мы всегда поймем друг друга


Patrol   (2002-12-31 14:45:00) [7]

это не помогает


boby_g   (2002-12-31 12:52:00) [8]

Попробуй следующий метод:
если этот рисунок называется Image1,

напиши следующая строка в процедуре
Form1.Create(Sender: TObject):

begin
Image1.BringToFront;
end;

Я надеюсь что ты поймишь мое объяснение. Я говорю очень плахо русский язык


Наверх

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