Привлекательный и необычный интерфейс, играет не самую последнюю роль в популярности и востребованности любого программного продукта. И хотя, все же, в некоторых случаях использование средств, стандартной VCL является наиболее верным решением, речь сейчас не о них.
Большинство разработчиков стараются обходить вопрос, использования шкур, стороной. Причины разные, самая распространенная – нежелание вникать в “сложности” работы со шкурами. А есть ли они, те самые сложности, которых многие опасаются? Посидев над обрисовавшейся задачкой часик - другой, я выяснил главное - все предельно просто. Представляю на ваш суд, результат своих изысканий.
Принцип работы компонента TSkinControl

Базовым классом для компонента является TWinControl, что позволяет без труда использовать его, как элемент интерфейса, либо как оболочку для всей формы в целом (для этого достаточно присвоить свойствам формы BorderStyle и AutoSize значения “bsNone” и “True” соответственно).
Для работы компонент использует два изображения. Первое (свойство SkinImage) – для отображения пользователю, в качестве самого интерфейса. Второе (свойство MaskImage) – для распознавания элементов интерфейса, в данном случае это кнопки и надписи. При этом на второе изображение накладываются некоторые ограничения. Каждый элемент должен иметь уникальный цвет и прямоугольную, непрерывную форму. Размеры MaskImage должны полностью соответствовать размерам SkinImage.
Свойства и события компонента
Для обработки событий любого элемента, в шкуре, используются события OnClick, OnMouseDown, OnMouseUp и OnMouseMove самого компонента, т.к. для компонента нет никакой разницы, с каким элементом работать, в его представлении элемент – всего лишь набор точек одного цвета. Для определения конкретного элемента, с которым происходит взаимодействие, используется параметр ColorControl, который содержит его уникальный идентификатор – цвет.
Событие OnMouseMove имеет изменяемый параметр Cursor, с помощью него можно менять внешний вид курсора при наведении на различные элементы шкуры.
Для вывода текста в области элементов используется процедура SetTextOfControl. Размер шрифта, в случае если элемент малых размеров, выбирается автоматически.
Напоследок
Компонент создавался, как наглядный пример реализации работы со шкурами и поэтому, пока он не предназначен для использования в серьезных проектах. В данном компоненте реализована работа, только с двумя основными возможностями:
1. Работа с кнопками.
2. Работа с надписями, в том числе многострочными.
Для более-менее полноценной работы, как минимум, необходимо реализовать возможность использования списков, текстовых полей и анимации состояния (наведение мыши, нажатие кнопки мыши и др.) Все это не намного сложнее уже сделанного. Если кого-то заинтересует использование, этого компонента, обращайтесь, доведу его до ума с учетом ваших пожеланий.
Если есть другие предложения или дополнения по данному вопросу, пишите. Лучшая благодарность для автора – интерес к его работе :), а дополнительный интерес со стороны пользователей можно получить, если развить (раскрутить ресурс со статьей, а вот и биржа статей, которая пригодиться Вам при продвижении своих веб-проектов.
Компонент TSkinControl(678.22 KB)
Мой блог находят по следующим фразам
- запись string в file of text lazarus
- определить тошноту текста
- synapse post
- книга delphi 2010
- добавление своей библиотеки в rad studio
- програмный таймер
| Делись! | Загружай! | Плюсуй! |
| | |









14 Дек 2010 в 12:02 дп
интересно сейчас посмотрим,спасибо
18 Ноя 2011 в 9:31 пп
[...] стили оформления двумя способами: либо писать свой движок для поддержки скинов (долго, затратно), либо воспользоваться уже готовыми [...]