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