Вы находитесь на страницах старой версии сайта.
Переходите на новую версию Interface.Ru

СТАТЬЯ
5.05.03


Непрямоугольные полупрозрачные формы

© Филипп Рендор

Проводя курсы по основам работы с продуктам Borland ("Основы разработки приложений с помощью Delphi", "Основы разработки приложений с помощью C++Builder"), достаточно часто слушатели просят рассказать о различных "украшательных" возможностях при программировании: нестандартные (непрямоугольные) изображения окон программы, "круглые" кнопки и т.п. Программа курсов достаточно насыщена. Для того чтобы облегчить начинающим программистам процесс создания собственных, оригинальных форм приложений, был сделан перевод данной статьи. Следует сказать, что указанная технология не является единственной, и отражает далеко не все доступные программисту возможности. Необходимо учесть и тот факт, что "оригинальность" хороша при тщательно продуманном и эргономичном общем дизайне, с сохранением стандартных действий пользователя. Впрочем, это вопрос из несколько другой области. А, кстати, вопросы создания собственных VCL-компонентов, типа "круглых" кнопок (как и многие другие вопросы) у нас так же рассматриваются, в одном из курсов по Borland.

А.А. Бородовицын, технический специалист компании "Интерфейс"

Сегодня часто встречаются на практике нестандартные пользовательские интерфейсы Их можно увидеть в действии в таких приложениях как WinAmp или Windows Media Player. Однако теперь это легко может сделать любой программист, придав особую изюминку своему приложению.

Техника, описываемая в данной статье, доступна только для ПО, работающего под управлением ОС Windows 2000/XP, так как в основе ее лежит использование интерфейса API, введенного в ОС Windows 2000. Поэтому, приложение должно при запуске проверять версию действующей ОС и корректно завершать работу, если версия ОС не соответствует заданному образцу.

Создание непрямоугольных форм, т.е. форм неровных очертаний с элементами разной степени полупрозрачности, осуществляется с помощью новой функциональной возможности под названием многослойные окна (layered windows).

Проверка на соответствие ОС Windows 2000/XP

К событию OnCreate основной формы приложения нужно добавить следующие строчки:

В этом программном коде Win32 API не используется. Вместо этого применяются глобальные переменные, которые во время исполнения программы определяются библиотекой VCL. Они определены в модуле SysUtils и их значения вычисляются во время запуска приложения. Для получения более подробной информации о версии данной ОС из семейства Windows можно использовать следующий набор переменных:

Win32Platform

определяет платформу операционной системы

Win32MajorVersion определяет номер старшей версии операционной системы
Win32MinorVersion определяет номер младшей версии операционной системы
Win32BuildNumber определяет номер подверсии операционной системы
Win32CSDVersion определяет номер последнего служебного пакета Service Pack,
установленного в системе

Создание многослойного окна

Для того чтобы создать многослойное окно, необходимо добавить в заданную форму расширенный стиль окна: WS_EX_LAYERED. Это можно сделать, подменив в форме метод CreateParams:

В зависимости от трансляции Win32 API, установленной на компьютере, константа WS_EX_LAYERED может быть уже определена.

Добавление прозрачности и полупрозрачности

Win32 API реализует прозрачность и полупрозрачность с помощью функции SetLayeredWindowAttributes:

Параметры данной функции определены в следующей таблице.

hWnd Дескриптор многослойного окна, задаваемый свойством Handle объекта TForm.
crKey Код прозрачности цвета, используемый при создании многослойного окна. Все пиксели данной формы, использующие этот цвет, будут прозрачными.
bAlpha Значение параметра используется для определения прозрачности многослойного окна. Если его значение равно 0, то окно – прозрачное, при значении 255 окно – непроницаемо.
dwFlags Параметр указывает на действие, которое нужно выполнить. Возможные значения:LWA_COLORKEY – использует crKey для определения прозрачности цвета; LWA_ALPHA – использует bAlpha для определения прозрачности многослойного окна.

Таким образом, для создания полупрозрачной (на 50%) формы с прозрачными пикселями цвета clBlue необходимо к событию OnCreate добавить следующий код:

Добавление прозрачности к заданной форме также означает, что все области с указанным цветом не будут реагировать на щелчки мышью. Эти щелчки будут применяться к остальным объектам, находящимся в данном месте экрана.

Перемещение формы без заголовка окна

При создании приложения с нестандартным пользовательским интерфейсом можно избавиться от классического очертания окна, а также от его заголовка. Для этого необходимо задать стиль BorderStyle данной формы как bsNone. Однако может потребоваться сохранить подвижность формы подобно стандартным приложениям. Этого можно добиться небольшой модификацией порядка работы сообщения WM_NCHITTEST, посылаемого операционной системой. После такой модификации любые щелчки пользователя в клиентской области формы будут восприняты ОС Windows как щелчки мышью на заголовке окна, что и позволит перемещать форму.

Заключение

В данной статье была представлена информация об интерфейсе API, доступном в ОС Windows 2000/XP. С его помощью любому приложению можно придать оригинальный, более привлекательный для современных пользователей вид.

Дополнительная информация

За дополнительной информацией обращайтесь в компанию Interface Ltd.

Обсудить на форуме Borland

Рекомендовать страницу

INTERFACE Ltd.
Телефон/Факс: +7 (495) 925-0049
Отправить E-Mail
http://www.interface.ru
Rambler's Top100
Ваши замечания и предложения отправляйте редактору
По техническим вопросам обращайтесь к вебмастеру
Дата публикации: 5.05.03