C++ Builder :: Игрописательство :: Как написать игру за 21 день ?

Главная

Введение

ЛИКБЕЗ
C++ Builder


ЛИКБЕЗ
C++

Глава №1
Глава №2
Глава №3
Глава №4
Глава №5
Глава №6

Исходники
к пособию

Мои исходники

Статьи
&
Книги


Гостевая

Ссылки

About

E-mail

Rambler's Top100


Нестандартный интерфейс - просто!
 

Нестандартный интерфейс - просто!

Автор: Данила Лепихин

Всем уже порядком надоел стандартный интерфейс 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/

 

 

 

 
 
Hosted by uCoz