VCL Styles - скины в Delphi XE2

Источник: delphilab
Snowy

В Delphi XE2 появился встроенный механизм скинов с названием "VCL Styles".

Если зайти в свойства проекта и выбрать Application -> Appearance, то мы увидим поле 'Custom Styles', в котором мы можем добавить стандартные стили, а также посмотреть, как они выглядят, при помощи кнопочки 'Preview'.

Application Apearance 

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

За работу со стилями отвечает класс TStyleManager, расположенный в модуле Themes . Данный менеджер стилей предоставляет следующие возможности:

  • Установить стиль
  • Загрузить стиль из файла
  • Загрузить стиль из ресурса

Все эти действия можно производить, как с объектом класса TStyleManager, так и непосредственно через методы класса. 

Для смены стиля предназначены команды SetStyle и TrySetStyle.

TStyleManager.TrySetStyle('Ruby Graphite', false);

Второй параметр у TrySetStyle - показывать ли сообщения об ошибке, если не удалось выбрать стиль.

Список зарегистрированных стилей содержится в массиве StyleNames.

Организовать смену стилей можно, например, с помощью ComboBox:

uses Themes;
 
procedure TForm1.FormCreate(Sender: TObject);
var
  sm: TStyleManager;
  i: integer;
begin
  sm := TStyleManager.Create;
  for i := 0 to Length(sm.StyleNames)-1 do
    ComboBox1.Items.Add(sm.StyleNames[i]);
end;
 
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  TStyleManager.TrySetStyle(ComboBox1.Text, false);
end;

Загрузить стиль из файла поможет метод LoadFromFile.

function LoadStyle(FileName: string): string; // загрузить скин и вернуть его имя
var
  sm: TStyleManager;
  si: TStyleInfo;
begin
  result := '';
  sm := TStyleManager.Create;
  try
    if TStyleManager.IsValidStyle(FileName, si) then // взять информацию о стиле в si
    begin
      result := si.Name;
      if sm.Style[result] = nil then
         sm.LoadFromFile(FileName);
    end;
  finally
    sm.Free;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
  s := LoadStyle('C:\Temp\Test.vsf'); // загрузить скин
  if s <> '' then // если не загрузили - то имени нет
  begin
    TStyleManager.TrySetStyle(s, false); // включить
    if ComboBox1.Items.IndexOf(s) < 0 
      then ComboBox1.Items.Add(s); // если нет в списке - добавить
  end;
end;

Через свойство Style можно получить стиль с указанным именем, или проверить его на существование, как в этом примере. Метод IsValidStyle позволяет определить, является ли файл стилем и, если да, то получить информацию о нём - название, автор, сайт автора и почта. Нам интересно только название.

Аналогично можно загрузить стиль из ресурса, при помощи TryLoadFromResource, в параметрах которого указать тип ресурса и имя. Но мне кажется более удобным следующий вариант:

  • Открываем меню Project -> Resources and Images.
  • Нажимаем кнопку Add.
  • В комбобоксе справа выбираем тип файла 'Any File'
  • Выбираем файл со стилем
  • В поле Resource Identifer пишем имя скина
  • В комбобоксе Resource Type пишем ручками: 'VCLSTYLE'
  • Повторяем данные действия для каждого файла-стиля.
  • Жмём Ок. Компилируем проект.

Add VCL Style

После компиляции все стили автоматически попадут в список по-умолчанию.

Где взять файлы со стилями? Хороший вопрос. Думаю, в скором времени появятся библиотеки стилей. В комментариях пишите, где можно взять готовые.

Для создания новых стилей существует специальный редактор. Находится он в меню Tools -> VCL Style Designer.

Я себе для тестов на скорую руку сляпал вот такой зелёненький.

Если вы создали свой стиль, или скачали где-то, и хотите, чтобы он появился в настройках проекта, то файл следует сохранить в папку C:\Documents and Settings\Public\Documents\RAD Studio\9.0\Styles


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=29183