Версия для печати


Компонент "Горячая область"
http://www.delphikingdom.com/asp/viewitem.asp?catalogID=1386

Петр Смирнов
дата публикации 11-11-2008 11:34

Компонент "Горячая область"

Давным давно, в языке HTML появилась возможность задавать карты "горячих областей". Это, как правило, рисунки, на которых отмечались некоторые зоны (те самые "горячие области"), нажатие на которые приводило к нужному эффекту. Область применения подобных вещей весьма широка. Я видел, например, интерактивные карты, написанные на HTML без применения всевозможных "вебдванольных" примочек, где щелчок по кнопке, обозначающей город, приводил к открытию страницы с описанием выбранного населенного пункта. На мой взгляд, это весьма и весьма удобно и наглядно. Точно также, я видел игру, написанную также на базе этого метода — клик по нужной дороге на перекрестке приводил к перемещению по этой самой дороге в нужном направлении, клик на лодке приводил к выполнению команды "сесть в лодку" и так далее. Квест в чистом виде, только очень ограниченный, так как все было основано на статических HTML картинках, даже без примеси JavaScript кода, но все это выглядело очень и очень неплохо. Фантазии на что-то более серьезное не хватает, поэтому не обессудьте за неказистый пример:

Интерактивная карта мира
Рисунок 1. Кликните по материку, или океану, и узнаете его название

Хотелось бы иметь на Delphi что-то подобное? Наверное, было бы такое сделать неплохо. Разумеется, ложить на форму WebBrowser было бы чересчур для такой простой задачи. Я предлагаю альтернативное решение — использовать предлагаемый компонент. При создании, он был назван TSkinPanel и менять это название я пока не собираюсь. Итак, что же это за зверь такой и что он предлагает Вашему вниманию.

Первое применение: автозапуск для дисков
Рисунок 2. Первый пример использования компонента — автозапуск для дисков.
Мы имеем четыре фильма, при наведении мыши на картинку с фильмом, он "подцвечивается" и выводится подсказка в заголовке формы. При нажатии кнопки мыши, картинка "вдавливается", затем выдается сообщение об имени фильма и катринка запрещается. На рисунке Вы видите неактивные картинки для фильмов "Step brothers", "Моя ужасная няня", подсвеченную картинку (на нее наведен курсор) для фильма "Заложница" и запрещенную картинку (по ней уже был произведен клик) для фильма "Mamma mia". Программа содержит всего лишь две процедуры, состоящие из большого case'а!

Особнности:

Демонстрация показывает, как я сам предлагаю использовать его. Плохое качество использованных картинок обусловлено желанием сделать небольшой размер исполняемого файла (плюс к тому я плохой дизайнер), компонент успешно работает с картинками с глубиной цвета 1, 4, 8 и 32 бита. Остальные глубины цветов мне были не нужны, но если будет необходимо — могу поднатужиться и приделать. При создании компонента не были использованы сторонние компоненты, а также чужой исходный код.


Рисунок 3. Второе применение компонента: кнопки сколь угодно сложной формы.
На рисунке 4 Вы можете увидеть, какие же картинки были использованы для такого эффекта.

Маска компонента Подцвеченное изображение Обычное, нетронутое изображение Неактивное изображение Нажатое изображение

Рисунок 4. Как создать чудо: картинки, использованные в программе с рисунка 3.
Слева направо: Маска компонента, подцвеченное изображение, обычное (нетронутое) изображение, неактивное изображение, изображение под нажато кнопкой мыши.
В приведенном примере маска и подцвеченное изображение совпадают, но это просто видимость, на самом деле, маска - это BMP файл с глубиной цвета 8 бит (256 цветов), а подцвеченная картинка - JPG с глубиной цвета 32 бита.

Свойства компонента:

Как работать с компонентом

К статье прилагаются файлы: