Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Прозрачный компонент


Автор: Limonadni Joe 17.6.2005, 20:34
Создаю контрол на базе TButton. В нём есть свойство Icon. Если иконка задана, то должна рисоваться только она и ничего более. Но вот проблема: как не рисовать то, что уже нарисовано родным TButton'ом, для того, чтобы показать фон вокруг иконки? Да, можно уменьшить рамер контрола до рамера иконки, но что если иконка имеет прозрачные области?

Всё осложняется тем, что просто перекрыть метод Draw или WMPaint родительского компонента нельзя, т.к. у него его просто нет. Как я понял TButton - один из тех компонентов, за перерисовку которых отвечает не Delphi, а Windows API.

Чувствую, что единственный выход - это копировать изображение области под контролом в сам контрол. Но как такое проделать?

Автор: Yanis 17.6.2005, 22:41
Зачем тогда нужно делать контрол на базе TButton, если кроме иконки ничего не рисуется?

Автор: Pakshin A. S. 17.6.2005, 22:47
А может BitBtn как-нить скрасит ситуацию? Тама вроде и транспарентик есть...

Автор: Yanis 17.6.2005, 23:52
Цитата(Pakshin @ 17.6.2005, 22:47)
Тама вроде и транспарентик есть...

У TBitBtn? Наверное имелось ввиду "транспарентик" Glyph'а кнопки.

Автор: Limonadni Joe 18.6.2005, 09:20
Цитата
Зачем тогда нужно делать контрол на базе TButton, если кроме иконки ничего не рисуется?

В TButton есть ещё много полезных свойств, которые хотелось бы унаследовать: такие, например, как Default, Cancel и т.п. Самому их реализовывать довольно накладно будет.

Цитата
А может BitBtn как-нить скрасит ситуацию?
Хотелось бы раз и навсегда избавиться от необходимости подключать модуль Buttons.

Автор: Yanis 18.6.2005, 14:17
В таком случае нужно видеть исходник твоей кнопки со свойством Icon.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)