« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
    Популярное
Функция GetDlgCtrID

Data

Срочно! Ищется крутой программист!

Функция AccessResource

Игорь Ашманов: Величина оптимизаторского рынка - 100 млн. долларов

Программист Delphi. Обзоры зарплат

Создание установочного диска

Opera Dragonfly

Функция PtInRect

Функция CreateBitmap




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 99
Пользователей: 0

Статьи:: Delphi :: Пользовательский интерфейс :: Windows XP и Delphi 7



отправить ссылку другу версия для печати  Обсудить на форуме

Windows XP и Delphi 7



Cерия статей из темы Windows XP и Delphi 7

Windows XP и Delphi 7

Элементы управления Windows XP

В Delphi 7 появилась возможность настраивать пользовательский интерфейс приложений для использования в Windows XP. Для этого в состав ресурсов приложений должен включаться манифест Windows XP. Это дополнение призвано обеспечить корректное взаимодействие элементов управления приложений с системной библиотекой ComCTL32.dll версии 6 , используемой в Windows XP. Собственно все особенности работы приложений под управлением в Windows XP вызвано именно появлением новой версии этой библиотеки. Впрочем, об этом подробнее рассказывается ниже.

В этой статье рассматриваются следующие вопросы:

  • динамическая библиотека ComCtl32.dll v.6 и особенности пользовательского интерфейса Windows XP;
  • что такое манифест Windows XP;
  • компонент TXPManifest;
  • как включить манифест Windows Xp в ресурсы приложения;
  • стили приложения и компоненты настройки цветовой палитры;

Пользовательский интерфейс Windows XP

При первом запуске Windows XP сразу же обращаешь внимание на существенные изменения в оформлении пользовательского интерфейса этой операционной системы. Все нововведения основаны на использовании нового способа отрисовки элементов управления, который реализован в системной динамической библиотеке ComCtl32.ll версии 6. Эта библиотека входит в состав операционной системы Windows XP.


Примечание

    Обратите внимание, что все более ранние операционные системы фирмы Microsoft используют ComCtl32.dll версии 5 с традиционным стилем оформления элементов управления. И, конечно, нельзя заставить Windows 2000 выглядеть как Windows XP простой заменой версии ComCtl32.dll. Операционная система должна уметь использовать новые возможности.


Теперь элементы управления в стиле Windows XP могут иметь собственную цветовую палитру, текстуры, стили заполнения и, самое главное различные методы отрисовки своих составных частей. Например, элемент управления может рисовать собственное поле ввода данных обычным способом, а рамку - с использованием маски XOR.

Совокупность правил и методов поведения, оформления и отрисовки элементов называется визуальным стилем (visual style). Совместно с Windows XP поставляется один готовый стиль.

Если разработчик хочет, чтобы его приложение могло использовать новые возможности Windows XP, он должен включить в состав пакета специальный ресурс - манифест. Манифест представляет собой документ XML, содержащий необходимую для библиотеки ComCtl32.dll версии 6 информацию.

Такое приложение будет чувствовать себя комфортно в среде Windows XP. Но и при запуске в старых ОС оно просто будет использовать стандартный набор возможностей ComCtl32.dll версии 5 и именно она используется по умолчанию.

Манифест Windows XP

Итак, начнем с манифеста. Он представляет собой документ в формате XML, содержащий всю информацию, необходимую для взаимодействия приложения ComCtl32.dll версии 6.


Примечание

    Следует отметить, что манифесты широко используются во многих продуктах и технологиях, работающих в операционных системах Microsoft. С полной схемой XML манифеста вы можете ознакомиться в документации Microsoft MSDN.


Пример манифеста:

Манифест Windows XP

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="App"
processorArchitecture="x86"
version="1.0.0.0"
/>
<description>
Application description
</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
 

При загрузке приложения ОС Windows XP считывает манифест (если он есть) и получает информацию о том, что для выполнения приложения потребуется библиотека ComCtl32.dll версии 6.

Помимо этой информации манифест может содержать и другие необходимые сведения о приложении и условиях его работы. Например, общая информация о приложении и его версии представлены элементом <assemblyIdentity> .

Вы можете добавить манифест в ваше приложение двумя способами:

  • использовать компонент TXPManifest;
  • добавить манифест в ресурсы приложения вручную.

Рассмотрим их.

Компонент TXPManifest

На странице Win32 Палитры компонентов Delphi 7 имеется компонент TXPManifest. Будучи добавленным в проект, он обеспечивает компиляцию манифеста Windows XP в исполняемый файл приложения. В качестве основы используется стандартный манифест DELPHI для Windows XP, содержащийся в файле Dephi7LibWindows XP.res

Манифест Delphi для Windows XP

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="DelphiApplication"
version="1.0.0.0"
processorArchitecture="*"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
</assembly>

К сожалению, версия программного продукта (ProdutVersion), а также любая другая информация о версии, содержащаяся в проекте (файлы DOF и RES) и настраиваемая в диалоге Project Options среды разработки Delphi, никак не влияет на содержимое манифеста. Поэтому при настройке манифеста в соответствии  с потребностями приложения вам придется предварительно отредактировать файл WindowsXP.res или поправить манифест прямо в исполняемом файле.  (Ввиду частых перекомпиляций проекта второй вариант представляется довольно обременительно.)

Включение манифеста Windows XP в ресурсы приложения

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

Для начала необходимо создать исходный файл ресурса RC, включающий единственную строку:

1 24 "XP.manifest"

где 1 - номер ресурса версии библиотеки ComCtl32.dll, а 24 - номер ресурса манифеста (нумерация соответствует заголовочным файлам, распространяемых Microsoft); "XP.manifest" - имя файла с документом XML, содержащим манифест. Естественно, манифест нужно настроить в соответствии с потребностями вашего проекта.

Теперь нужно откомпилировать файл ресурса при помощи строчного компилятора ресурсов Delphi7Binbrcc32.exe и разместить его в папке проекта.

И последняя операция - добавьте в исходный код файла проекта директиву подключения ресурса манифеста: {$R xpmanifest.res}

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

Визуальные стили в DELPHI

Теперь мы детально поговорим о роли действий при разработке пользовательского интерфейса приложения и специальном компонента для управления действиями - TActionManager. Немного забегая вперед скажем, что этот компонент является своего рода "командным пунктом!, из которого должны управляться элементы управления приложения. Сейчас же нас интересует только свойство этого компонента

    property Style: TActionBarStyle;

По умолчанию сред разработки Delphi предлагает к использованию два стиля:

  • Standart - приложение использует системную библиотеку ComCtl32.dll версии 5;
  • Windows XP - приложение использует системную библиотеку ComCtl32.dll версии 6 и единственный стандартный визуальный стиль Windows XP.

Эти стили применимы только к элементам управления, размещенным на панелях инструментов  (TActionToolBar), созданных в компоненте TActionManager.

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

Для этого необходимо создать класс нового визуального стиля на основе класса TActionBarStyleEx. Затем новый стиль регистрирует при помощи процедуры

procedure RegisterActnBarStyle (AStyle: TActionBarStyleEx);

После этого ваш стиль становится доступным для свойства style компонента TActionManager.

Чтобы отменить стиль, используйте процедуру

procedure UnRegisterActnBarStyle (AStyle: TActionBarStyleEx);

Например, обе эти операции удобно выполнить при инициализации и деинициализации модуля, описывающего класс стиля:

Вариант регистрации и отмены собственного визуального стиля

var MyStyle: TMyStyleActionBars;
...
initialization
MyStyle:=TMyStyleActionBars.Create;
RegisterActnBarStyle (MyStyle);

finitialization
UnregisterActnBarStyle(MyStyle);
MyStyle.Free;
end.

Для смены стиля приложения можно использовать глобальную переменную нового стиля. Ее достаточно присвоить свойству Style:

   ActionManager1.Style:=MyStyle;

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

Класс TActionBarStyleEx имеет всего несколько методов, которые необходимо перекрыть при создании собственного стиля. Все они возвращают классы объектов, используемых при создании пользовательского интерфейса.

Рассмотрим их.

Функция

function GetStyleName: string;

возвращает имя стиля.

Функция

function GetColorMapClass (ActionBar: TCustomActionBar):

TCustomColorMapClass;

позволяет получить ссылку на класс компонента настройки цветовой палитры, используемый панелью инструментов.

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

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

function GetControlClass (ActionBar: TCustomActionBar; AnItem:
TActionClientItem): TCustomActionControlClass;

Он возвращает класс элемента управления из панели ActionBar, связанного с элементом управления AnItem. Именно эта функция вызывается при создании элементов управления в панелях инструментов компонента TActionManager.

Как уже говорилось выше, при присвоении свойству Style компонента TActionManager нового значения (экземпляра класса разработанного вами визуального стиля) уничтожаются все существующие элементы управления и затем создаются новые. И в процессе создания каждого визуального компонента вызывается функция GetControlClass нового стиля, а возвращенное ею значение для вызова конструктора соответствующего класса.

Аналогично, для получения класса, используемого в панели меню, применяется метод

function GetPopupClass (ActionBar: TCustomActionBar): TGetPopupClass;

и для классов кнопок панели инструментов применяется функция

function GetScrollBtnClass: TCustomScrollBtnClass;

А класс самой панели инструментов возвращает функция

function GetAddRemoveItemClass (ActionBar: TcustomActionBar):

TCustomAddRemoveItemClass;

Итак, после разработки и отладки собственных классов элементов управления с заданными свойствами вам потребуется создать потомка от класса TActionBarStyleEx  и перекрыть все перечисленные выше функции так, чтобы они возвращали нужные классы для используемых типов элементов управления.

Theme API

Помимо описанного создания и управления визуальными стилями разработчик может использовать функции Theme API, разработанные Microsoft для этих целей.

Для того чтобы использовать Theme API, можно стандартным способом подключить к проекту динамическую библиотеку Theme.dll:

var ThemeDLL: HINST;
...
begin
    ThemeDLL:=LoadLibrary('theme.dll')'
    if ThemeDLL<>0 then
    begin
    ...
    end;
end.

Затем можно использовать возможности этого программного интерфейса напрямую. С деталями его реализации вы можете ознокомиться в документации Microsoft MSDN.

Однако можно поступить проще. В составе Delphi 7 имеется модуль UxTheme.pas, в который как раз и реализованы возможности Theme API. Кроме этого, модуль Theme.pas содержит классы для основных элементов управления, которые могут использоваться при создании визуальных стилей, а так же класс менеджера тем TThemeServices.

Пример, показывающий как загрузить динамическую библиотеку theme.dll и получить ссылку на тему визуального стиля для текущего окна и кнопочного элемента управления.

Пример использования функций Theme API в Delphi

var DC: HDC;
    CurrentThemeData: HTHEME;

begin
    if UseThemes and InitThemeLibrary then
    try
        DC:=GetWindowsDC(HANDLE);
        try
            CurrentThemeData:=OpenThemeData(0,'button');

            CloseThemeData(CurrentThemeData);
        finally
        ReleaseDC(HANDLE, DC);
    end
            finally
        FreeThemeLibrary;
        end
    else
    ShowMessage('Приложение или операционная система не поддрерживают использование Theme API');
end;

Функция

function UseThemes:Boolean;

повторяет способность ОС и приложения использовать Theme API

Методы

function InitThemeLibrary:Boolean;

procedure FreeThemeLibrary;

соответственно инициализируют и выгружают библиотеку theme.dll.

Графический контекст DC наверняка понадобится при отрисовки элементов управления

Функция

OpenThemeData: function(hwnd: HWND; pszClassList: LPCWSTR): HTHEME;

stdcall;

Возвращает дескриптор темы для текущего визуального стиля и класса, имя которого представлено параметром pszClassList.

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

При завершении работы не забудьте освободить занятые дескрипторы графического контекста и темы. Ждя темы используйте функции

CloseThemeData: function(hThemeL HTHEME): HRESULT; stdcall;

Заинтересованный читатель найдет подробное описание нужных функций Theme API в Microsoft MSDN или же может полюбопытствовать содержимым модулей UxTheme.pas и Theme.pas.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`

Ну вот, пожалуй, и все. Старался объяснить, чтобы было понятно всем.

Если будут вопросы, то пишите delphi@h5.ru. Автор статьи - Фефилов Дмитрий








Вышел MySQL 5.1.30, первый стабильный рели....

MySQL

После публикации 29 тестовых версий анонсирован первый стабильный релиз MySQL 5.1, пригодный для промышленной эксплуатации и обеспечивающий увеличение производительности для "тяжелых" SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные новшества появившиеся в MySQL 5.1:


Подробнее... | Рубрика: MySQL | Добавлено: 28.11.2008

Тестирование параллельных программ.

Тестирование

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


Подробнее... | Рубрика: Тестирование | Добавлено: 28.11.2008

Архитектура AMD64 (EM64T).

Архитектура AMD

Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.


Подробнее... | Рубрика: Архитектура AMD | Добавлено: 27.11.2008

Остальные статьи:

Платформа 2009. Определяя будущее
Windows Vista Bridge Sample Library - упра...
Оптимизация 64-битных программ
Подгрузка через AJAX HTML-кода, содержащег...
Обзор нового релиза самой мощной Ajax библ...
Firebug 1.3 и 1.4 alpha — что нового и инт...
Релиз Microsoft Silverlight 2.0. Что новог...
XML документация в C#
Курсоры в MySQL 5
Microsoft опубликовала подробности о сесси...
Microsoft делится подробностями о том, что...
Тестируем новый javascript от нового брауз...
MySQL Query Cache
Использование провайдеров компиляции в As...
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новы...
Поиск кода Google /* что нового? */
10 jQuery скриптов для улучшения интерфейс...
Генераторы отчетов FastReport 4 и QuickRep...


Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия