Вверх ↑
Пакеты 
HiAsm4
Windows 
Статьи - Технология ActionSkin

Технология ActionSkin
Описание
   Пример, описываемый в разделе: http://hiasm.com/xf/attach/wiki/ASSource.rar (154Кб)

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

  Проектирование приложения на основе ActionSkin осуществляется с помощью компонентов вкладки ActionSkin (тут хотелось бы сразу отметить, что совсем не обязательно строить всю программу таким образом: никто не мешает построить на основе данной технологии, скажем, свой собственный оригинальный элемент управления и использовать его в стандартной программе Windows). Основным компонентом, очевидно, является компонент !ActionSkin!, который организовывает основную работу с картинками и областями. Далее идет не менее важный компонент !AS_Control! - в среде он выглядит практически так же как компонент !InfoTip! и позволяет отмечать на заданной картинке области для реакции на действия мышки, а так же области для динамической отрисовки графики. И, наконец, компонент !AS_DrawRect! - не основной компонент, который собственно и предоставляет интерфейс для динамической отрисовки графики, если в этом есть необходимость.
Использование областей
  Как было сказано выше, основным компонентом является ActionSkin и именно с него стоит начать проектирование приложения. Сам по себе компонент представляет из себя визуальный элемент управления к тому же еще и контейнер. Т.е. его позицию и размеры можно задавать в редакторе форм. Определение же областей осуществляется внутри него, но об этом чуть ниже. Определение картинок для различных состояний мыши осуществляется с помощью св-тв ХХХSkinFile:

  • SkinFile - данное св-во определяет имя файла основной картинки, которая будет выводится в компоненте всегда.
  • ActiveSkinFile - это св-во определяет путь к картинке, из которой будут вырезаться необходимые "куски" при перемещении мыши над заданными внутри компонента областям. Что это значит? Предположим внутри компонента вы определили область размером 30 на 20 пикселей и с координатами 50 на 50 пикселей. В этом случае при попадание мышки в данную область компонента, программа скопирует из картинки ActiveSkinFile небольшой кусочек с левым верхним углом 50х50 пикселей и с правым нижнем 80х70 пикселей, после чего отрисует его поверх основной картинки. Тоже самое будет проделано при покидании мышкой заданной области только теперь кусочек будет вырезан из картинки SkinFile.
  • DownSkinFile - ну а тут определяется картинка для нажатой кнопки мыши. В этом случае программа делает все тоже самое, что и при перемещение мышки над областью.
  И последнее св-во HandPoint говорит компоненту о том, что для всех областей курсор мышки будет меняться на палец.

  Теперь о том, как определять области внутри компонента. После задания всех картинок нужно войти внутрь контейнера (обычным образом) и если пути к картинкам были указанны верно, то на рабочем поле будет отображена одна из них (точнее из св-ва ActionSkin). Это значительно упрощает задание областей реакции мыши и отрисовки. Сами области, как было сказано выше, определяются положением и размерами компонента !AS_Control!, а его св-ва определяют их вид и назначение. Стоит так же отметить особенность данного контейнера: при генерации кода он понимает только те компоненты, которые непосредственно связаны с его работой. Вы можете заметить, что в нем нет компонента-редактора !EditMulti! (как его нет, скажем, в элементе !ViewSha!), и поэтому любые другие элементы, размещенные внутри, не будут включены в конечную программу.

  Компонент !AS_Control! позволяет определять области реакции на события мыши, а так же области пользовательской отрисовки графики. Эти две казалось бы различные ф-ции объедены в одном элементе по той простой причине, что бывает необходимость "кликать" на областях с произвольной отрисовкой. Такими ситуациями могут стать динамически меняющиеся пункты меню(в зависимости от языка, например), реализация собственных графических контролов(флажок, переключатель и т.д.) и многое другое. Рассмотрим св-ва компонента подробнее:

  • Name - задает имя области. Именно оно выдается компонентом ActionSkin в поток всеми событиями onRMouseХХХ. Данное имя может быть одинаковым у нескольких областей, что особенно полезно при проектирование пунктов чья геометрия не вписывается в прямоугольник.
  • Font - определяет вид шрифта исключительно в редакторе HiAsm
  • Transparent - данное св-во используется только областями динамической отрисовки и при False указывает на то, что область с именем Name перед отрисовкой будет закрашена цветом Color. При True в качестве фона будет взят кусок картинки из св-ва ActionSkin(в скриншоте именно так выполнена область Info, отображающая бегущую строку)
  • Cursor - определяет вид курсора над областью. Это св-во работает только в том случае, если у основного компонента св-во HandPoint = False.
  • Color - цвет заливки при Transparent = False
  • Type - тип области: Control - только реакция на мышку, Draw - только отрисовка графики,
  • DrawControl - оба предыдущих значения сразу.
  В принципе этого уже достаточно, чтобы сделать хороший графический интерфейс в программе. Поэтому попробуйте самостоятельно выполнить то, что изложено выше, а затем уже читать дальше и разбираться с динамической отрисовкой.
Динамическая отрисовка
  Необходимый интерфейс предоставляет компонент !AS_DrawRect!. Для его работы необходимо сделать как минимум две вещи:
  1. Задать идентификатор того ActionSkin элемента, который содержит требующую отрисовки область. Для этого используется точка ASHandle
  2. Определить имя требуемой области в св-ве Name
  После этого компонент готов к отрисовки указанной области. Для инициирования процесса необходимо вызвать метод doRefresh. Тогда компонент подготовит данную область (т.е. зальет её цветом Color, либо скопирует часть картинки в случае Transparent=True) и вызовет событие onPaint. Только теперь вы можете, используя точку Bitmap, выводить свою графику с помощью стандартных компонентов вкладки Graphics (!Графика!). Как только отрисовка будет закончена и управление возвращено компоненту, он тут же выведет на экран вновь сформированную область.
  Не следует забывать о том, что точка Bitmap позволяет получиь доступ к картинке только в пределах указанной области. Это значит, что отрисовка должна происходить в рамках прямоугольника (0,0,Width,Height) где Width,Height - длинна и высота области соответственно. Любая графика за пределами указанных границ выведена не будет.
BB-code статьи для вставки
Всего комментариев: 0
(комментарии к статье еще не добавлены)
Комментарий
...