Delphi 5. Создание XP-тем
Delphi 5. Создание XP-тем Когда вы создаете приложение и работаете с ним в операционной системе Windows XP, ваша программа не отображается, как все остальные системные окна, то есть она не поддерживает визуальные стили, введенные в употребление в этой операционной системе.
Дело в том, что визуальные стили Windows XP не включаются автоматически в проект вашего приложения. Как-то мне пришлось столкнуться с этой проблемой, и так как мной не было найдено толкового руководства или описания по этой проблеме, пришлось раскапывать эту тему самому. Предлагаемый в статье способ поможет разработчику продвинуться в этом направлении, но не может претендовать на право называться идеальным, так как использование влечет за собой изменение вида только основных элементов управления на форме, но никак не всех.
Как работает этот способ? А очень просто. Операционная система при запуске приложения ищет определенный ресурс для запускаемого файла, который представляет собой описание свойств элементов управления. В этом файле содержится информация о том, как должна ОС рисовать форму и все ее элементы.
Для этого нам понадобятся два файла. Первый, его надо назвать XpXML.txt, содержит собственно описание, что и как рисовать. Второй файл — XpRes.RC, вспомогательный, просто помогает нам включить вышеописанный ресурс в проект приложения на Delphi. Первый файл помещаем в папку с файлами проекта программы и заносим туда такие строки:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="Hacx.Simple.Xp.Resource"
processorArchitecture="x86"
version="1.1.0.0"
type="win32"/>
<description> Windows Shell</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Думаю, ничего особенно по приведенному коду говорить не надо, он будет понятен даже непосвященному в язык XML. Впрочем, такие поля, как name, version, description, вы можете изменять по своему усмотрению — они не влияют на внешний вид приложения. Если есть желание, можно указать там и себя, любимого, как автора файла. Ключ publicKeyToken имеет тут очень большое значение, так что не стоит менять его значение с "6595b64144ccf1df". В случае особой любознательности можно зайти на http://msdn.microsoft.com, ввести в поле поиска строку "6595b64144ccf1df" и прочитать, что по этому поводу думают спецы, эту штуку придумавшие;-).
Теперь займемся вторым файлом. Это будет проще простого — впишите в файл строку следующего содержания: "1 24 XpXML.txt". Естественно, без кавычек;-). Что означает эта строка? "24" это общий знак, принятый Microsoft как директива, которая информирует операционную систему о том, что данное приложение поддерживает темы. Далее идет имя файла, где же ОС должна найти всю необходимую информацию.
В общем, вот вся работа и сделана. Осталось только поместить (если вы еще это не сделали) оба файла в каталог с вашим проектом, с помощью меню Add to Project в Delphi IDE включить файл XpRes.RC в проект программы. Теперь делаем Build, запускаем приложение и радуемся новому приятному виду формы. Так, например, я тестировал вышеописанный метод на форме с двумя кнопками и компонентом TListView с колонками. Очень, знаете ли, ничего выглядит. По крайней мере, не так выделяется угловатая форма среди остальных закругленно-зализанных изысков от "мальчика Билли, который очень любил деньги" (с) Остров Сокровищ.
В ходе дальнейших экспериментов было установлено, что, к сожалению, не все рабочие элементы формы отображаются в новом виде. Так, проблемы могут возникнуть с компонентом TDBGrid по непонятным причинам. Ключ к этой проблеме ищется, и вы первые узнаете о прорыве в исследованиях;).
Денис Мигачев АКА Denver
Дело в том, что визуальные стили Windows XP не включаются автоматически в проект вашего приложения. Как-то мне пришлось столкнуться с этой проблемой, и так как мной не было найдено толкового руководства или описания по этой проблеме, пришлось раскапывать эту тему самому. Предлагаемый в статье способ поможет разработчику продвинуться в этом направлении, но не может претендовать на право называться идеальным, так как использование влечет за собой изменение вида только основных элементов управления на форме, но никак не всех.
Как работает этот способ? А очень просто. Операционная система при запуске приложения ищет определенный ресурс для запускаемого файла, который представляет собой описание свойств элементов управления. В этом файле содержится информация о том, как должна ОС рисовать форму и все ее элементы.
Для этого нам понадобятся два файла. Первый, его надо назвать XpXML.txt, содержит собственно описание, что и как рисовать. Второй файл — XpRes.RC, вспомогательный, просто помогает нам включить вышеописанный ресурс в проект приложения на Delphi. Первый файл помещаем в папку с файлами проекта программы и заносим туда такие строки:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="Hacx.Simple.Xp.Resource"
processorArchitecture="x86"
version="1.1.0.0"
type="win32"/>
<description> Windows Shell</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Думаю, ничего особенно по приведенному коду говорить не надо, он будет понятен даже непосвященному в язык XML. Впрочем, такие поля, как name, version, description, вы можете изменять по своему усмотрению — они не влияют на внешний вид приложения. Если есть желание, можно указать там и себя, любимого, как автора файла. Ключ publicKeyToken имеет тут очень большое значение, так что не стоит менять его значение с "6595b64144ccf1df". В случае особой любознательности можно зайти на http://msdn.microsoft.com, ввести в поле поиска строку "6595b64144ccf1df" и прочитать, что по этому поводу думают спецы, эту штуку придумавшие;-).
Теперь займемся вторым файлом. Это будет проще простого — впишите в файл строку следующего содержания: "1 24 XpXML.txt". Естественно, без кавычек;-). Что означает эта строка? "24" это общий знак, принятый Microsoft как директива, которая информирует операционную систему о том, что данное приложение поддерживает темы. Далее идет имя файла, где же ОС должна найти всю необходимую информацию.
В общем, вот вся работа и сделана. Осталось только поместить (если вы еще это не сделали) оба файла в каталог с вашим проектом, с помощью меню Add to Project в Delphi IDE включить файл XpRes.RC в проект программы. Теперь делаем Build, запускаем приложение и радуемся новому приятному виду формы. Так, например, я тестировал вышеописанный метод на форме с двумя кнопками и компонентом TListView с колонками. Очень, знаете ли, ничего выглядит. По крайней мере, не так выделяется угловатая форма среди остальных закругленно-зализанных изысков от "мальчика Билли, который очень любил деньги" (с) Остров Сокровищ.
В ходе дальнейших экспериментов было установлено, что, к сожалению, не все рабочие элементы формы отображаются в новом виде. Так, проблемы могут возникнуть с компонентом TDBGrid по непонятным причинам. Ключ к этой проблеме ищется, и вы первые узнаете о прорыве в исследованиях;).
Денис Мигачев АКА Denver
Компьютерная газета. Статья была опубликована в номере 18 за 2002 год в рубрике программирование :: delphi