Нестандартный интерфейс - просто!
Автор: Данила
Лепихин
Всем уже порядком надоел стандартный интерфейс
Windows-программ, и начинающему программисту должно быть особенно
интересно создавать программы с необычным "фирменным" стилем.
Написание собственных визуальных компонентов довольно сложный
и трудоемкий процесс, и эту тему мы здесь затрагивать не будем.
Сегодня мы поговорим о том, как придать своей
программе неповторимый, оригинальный вид, используя стандартные
визуальные компоненты.
Начнем, пожалуй, с самого интересного - с кнопок.
Примеры написаны в Borland C++ Builder, но легко переводятся
и в Visual C++, и в Delphi.
Итак, вариант первый - кнопки из стандартного
компонента Label. Если как следует присмотреться к свойствам
Label, то становится очевидно что это идеальная плоская кнопка,
обладающая такими важными свойствами, как Color, Font и обрабатывающая
необходимые нам события MouseMove, MouseDown, MouseUp, Click.
Приступаем. Первым делом необходимо определиться
в выборе цветов вашей кнопки. Пусть в режиме ожидания кнопка
будет темно-серого цвета (Gray), под мышкой - голубого (Blue),
и, наконец, в нажатом состоянии - синего (Navy). Соответственно,
в панели свойств нашего Label1 в поле Color указываем clGray.
Теперь начинается самое интересное. Открываем панель событий,
выбираем OnMouseOver и в окне кода в процедуру обработки OnMouseOver
вносим следующий код:
if ( Label1->Tag==0) {
Label1->Color=clBlue;
Label1->Tag=1;
}
Теперь при наведении курсора мыши на кнопку она
поменяет свой цвет на голубой. Зачем понадобилось использовать
свойство Tag? Дело в том, что если этого не сделать, то все
время, пока курсор будет двигаться над кнопкой, процедура
обработки будет "крутиться по кругу" и кнопка будет постоянно
перерисовываться одним и тем - же цветом, регулярно при этом
подмигивая.
Далее нам необходимо вернуть цвет кнопке в момент,
когда мышь "покинет" ее. Если вы счастливый обладатель Borland
C++ Builder 6, то у вашего элемента Label есть событие OnMouseLeave,
если же у вас более ранняя версия, то придется обходиться
подручными средствами. Ведь когда курсор покидает вашу кнопку,
он перемещается на форму (или какой-то другой элемент) Вот
это мы и используем. В событии формы OnMouseOver пишем следующие
строки:
if (Label1->Tag==1) {
Label1->Color=clGray;
Label1->Tag=0;
}
или (для шестого Билдера) в событии OnMouseLeave:
Label1->Color=clGray;
Label1->Tag=0;
Цвет кнопки восстанавливается, и свойство Tag
подготавливается для следующего обращения пользователя к кнопке.
Теперь - дело за малым: кнопка должна "нажаться" и "отпуститься".
Для этого в обработчике события кнопки OnMouseDown пишем:
Label->Color=clNavy;
а в OnMouseUp:
Label->Color=clBlue;
Здесь указывается именно этот цвет т.к. курсор
будет находиться еще над кнопкой.
Осталось только в событии кнопки OnClick прописать
требуемый вам код обработки нажатия и кнопочка готова!
Такие кнопки выглядят довольно интересно, особенно
если не "переборщить" с цветами, но гораздо симпатичнее будет,
если вы скомбинируете изменения цветов кнопки и цветов шрифта
надписи. Это свойство вызывается так:
Label1->Font->Color= // Здесь необходимый
вам цвет.
Кстати, нет никакой необходимости ограничиваться
стандартной палитрой т.к. кроме цветовых констант можно пользоваться
шестнадцатеричным представлением цвета в формате RGB. В таком
случае ваш код может выглядеть примерно так:
Label1->Font->Color=0x00FF7733;
Здесь FF будет соответствовать 255 синего, 77
- 119 зеленого, а 33 - 51 красного.
Cайт автора: http://www.ldbsoft.nm.ru/