Updated: Dec 16, 2023
Follow on twitter

TsSkinManager

Компонент предназначен для централизованного управления процессом скинизации приложения. Для его работы достаточно определить используемый скин и установить свойство Active в True.

Существует два способа распространения скинов с приложением:

  1. Загрузка скинов в список InternalSkins, будем называть такие скины внутренними. В данном случае необходимо добавить их в список InternalSkins, используя специальную форму. Скин применится к приложению после выбора его имени в свойстве SkinName.
  2. Распространение скинов как отдельных файлов, будем называть такие скины внешними. Обычно их размещают в отдельной папке и распространяют её вместе с приложением. Скин применится к приложению, если директория с внешним скином указана в свойстве SkinDirectory, а его имя указано в свойстве SkinName.

Также эти два способа можно применять вместе. Тогда, если внешний скин не будет найден, то автоматически загрузится первый внутренний скин.


Компонент активен только когда свойство Active включено. Обратите внимание, если при загрузке скина произошёл сбой (например, если выбранный скин отсутствует), то свойство Active сбрасывается в False автоматически и программа принимает стандартный вид.


Свойство AnimEffects содержит набор настроек эффектов анимации для различных событий:

  • BlendOnMoving - если "Active", то при перетаскивании форм они будут становиться полупрозрачными. "Time" задает время анимации. "BlendValue" задаёт степень прозрачности окна (0..255).
  • Buttons задаёт события, при которых будет выполняться анимация в кнопках.
  • DialogHide, DialogShow, FormHide, FormShow позволяют управлять анимацией диалогов и окон при их закрытии и показе.
  • Minimizing позволяет задать анимацию минимизации и восстановления форм.
  • PageChange управляет анимацией переключения вкладок компонента TsPageControl.
  • SkinChanging управляет анимацией при изменении текущего скина в приложении.

Перед запуском эффекта анимации создаётся изображение в памяти. Это может быть полезно даже если анимация не используется. Например, если на форме есть множество компонентов и прорисовка при показе формы происходит медленно, то можно установить время анимации в 0, Active в True. Тогда вся картинка будет готовиться в памяти, а форма будет показываться практически мгновенно.

Обратите внимание, анимация при FormShow будет работать лучше, если в design-time на этой форме лежит компонент TsSkinProvider.


Свойство CommonSections позволяет добавлять новые секции к скину в real-time. Если задана новая секция в этом свойстве, то она будет автоматически добавляться к каждому применяемому скину. Например, нам необходимо, чтобы в каждом загружаемом скине в приложении была панель, клиентская часть которой имеет белый цвет, но рамки которой наследовались бы от секции "PANEL". Тогда мы открываем CommonSections и добавляем такую секцию :

[PANEL_WHITE] PARENTCLASS=PANEL GRADIENTPERCENT=0 IMAGEPERCENT=0 COLOR=16777215

Теперь достаточно в панели или другом контроле изменить свойство SkinData.SkinSection на "PANEL_WHITE" и этот компонент будет принимать новый вид.

Пример применения свойства CommonStyle можно скачать здесь.


Effects содержит свойства, управляющие различными специальными эффектами, доступными в скинах :

  • AllowAeroBluring включает эффект размытия неклиентской части окна, доступный в Windows Vista и более новых.
  • AllowGlowing включает эффект свечения который возникает при наведении мышью у контролов в приложении, а также у кнопок в заголовке окна.


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


HUEOffset задаёт смещение цветовой палитры для всего скина в приложении. Ниже приведены снимки окна при HUEOffset = 0 и 80.


InternalSkins содержит скины, встроенные в Exe. Добавление скинов производится в design-time с помощью специального диалога. Количество скинов, которые могут быть встроены в Exe, не ограничено, но большое количество встроенных скинов могут сильно увеличить размер исполняемого файла. Кнопка "Update all" позволяет обновить все загруженные скины в design-time с помощью одного нажатия. Текущая папка-источник более новых версий скинов указана в верхнем левом углу диалога как "External location".


Свойство IsDefault определяет какой менеджер скинов будет основным (DefaultManager). Если в приложении определено несколько менеджеров скинов, то DefaultManager будет использоваться для диалогов, а так же для всех форм и компонентов на них, которые не имеют специально определенного менеджера в свойстве SkinData.SkinManager. DefaultManager должен создаваться всегда первым, иначе первый же созданный менеджер станет основным.


Структура MenuSupport позволяет управлять скинизацией выпадающих меню в приложении.

  • AlphaBlend задаёт уровень прозрачности выпадающих меню.
  • ExtraLineFont задаёт шрифт для дополнительной вертикальной полосы меню, которая включается с помощью свойства UseExtraLine и управляется в событии OnGetMenuExtraLineData. Подробнее об этом будет написано ниже.
  • ExtraLineWidth - ширина дополнительной полосы.
  • IcoLineSkin - секция скина, отвечающая за отрисовку вертикальной полосы, расположенной под иконками пунктов меню.
  • UseExtraLine - включает режим отрисовки дополнительной полосы меню. Если это свойство включено, то полоса будет рисоваться на всех выпадающих меню. Чтобы она рисовалась лишь на некоторых меню, а также, чтобы задать выводимый текст и иконку, используется событие "OnGetMenuExtraLineData". Описание этого событие находится ниже.


Saturation - задаёт цветность для всего скина в приложении. Ниже приведены снимки окна при Saturation = -100 и 100.


SkinDirectory - директория, в которой компоненту следует искать внешние скины. Если используется только встроенные скины, то это свойство может быть не задано.


SkinInfo хранит информацию об активном скине.


SkinName задаёт скин, который должен быть активизирован. Имя скина указывается без расширения файла.


SkinnedPopups позволяет отключить ошкуривание меню. Если свойство False, то меню рисуется стандартными средствами Windows.


SkinningRules содержит некоторые правила применения скина в приложении

  • srStdForms включает автоматическое применения скина ко всем открываемым окнам, наследованным от TForm. Если необходимо применять скин только к некоторым формам, то это свойство должно быть False, а на соответствующие формы должен быть брошен компонент TsSkinProvider в design-time.
  • srStdDialogs включает применения скина к системным диалогам.
  • srThirdParty позволяет применять скин к стандартным и сторонним компонентам.


Список ThirdParty содержит правила применения скина к стандартным и сторонним компонентам. Работает только если SkinningRules.srThirdParty = True и если форма имеет скин (желательно бросить на неё TsSkinProvider в дизайне).

Для изменения списка открывается специальное окно. Слева расположен список типов к которым необходимо применять скин. Можно добавлять необходимые типы вручную, используя панель инструментов внизу, а можно воспользоваться списками предопределённых наборов компонентов, которые расположен справа. Обратите вниманиЕ, что названия типов чувствительны к регистру.


Свойство Version хранит текущую версию пакета.

События компонента

OnActivate возникает сразу после активации компонента


OnAfterChange возникает после изменения текущего скина


OnBeforeChange возникает перед изменением текущего скина


OnDeactivate возникает при выключении скинов


OnGetMenuExtraLine вызывается перед рисованием выпадающего меню, если свойство MenuSupport.UseExtraLine активно. ExtraLine будет рисоваться, если параметр LineVisible = True. Параметр FirstItem указывает на пункт меню, который является первым. Ориентируясь на этот параметр можно разрешать или запрещать ExtraLine, а также задавать для неё такие параметры как SkinSection, Caption и Glyph. Пример обработки этого события можно найти в ASkinDemo или ASLDemo.


Событие OnGetPopupItemData возникает перед рисованием выпадающего меню и позволяет изменять шрифт отдельных пунктов меню.


OnSkinListChanged возникает, когда изменяется список доступных внутренних скинов или когда меняется директория с внешними скинами.


OnSysDlgInit возникает при открытии системного диалога и содержит такие параметры как WindowHandle и AllowSkinning. Оно позволяет отменить применение скина к отдельному диалогу, основываясь на его Handle окна.



  • Installing, using and licensing the demo programs © Sergii Goncharov, Ukraine, Odessa 2004-2023