Что такое библиотека ComCtl32
ГЛАВА 5. Элементы управления Win32
🕛 14.11.2006, 14:19
Изменив внешний вид "окон" в Windows 95, менеджеры Microsoft задумались о том, чтобы дать независимым разработчикам средства для создания приложений, внешне похожих на системные утилиты и использующих единые типовые элементы управления. Например, все эти элементы автоматически поддерживают установленные в системе цветовое оформление, размер, шрифт и т. п. Все элементы, проверенные и обкатанные в Windows, объединялись в библиотеке ComCtl32.dll, документировались и публиковались для использования разработчиками. С 1995 года сменилось много версий библиотеки, элементы добавлялись и совершенствовались. Соответственно росла и страница Win32 в Палитре инструментов Delphi. Все компоненты, представленные там, взяты из библиотеки ComCtl32.
Специально отметим, что эти элементы управления не являются ActiveX. Это - обычные специализированные разновидности окон Windows, установка свойств которых происходит через посылку специализированных сообщений. Полная документация по всем сообщениям и применяемым в них константам и структурам есть в MSDN. Для большинства сообщений предусмотрены специальные функции оболочки, которые описаны в модуле CommCtrl.pas. Сами "дельфийские" классы компонентов работают с их использованием; классы компонентов описаны в модуле ComCtrls.pas.
Примечание
Своими свойствами компоненты Delphi покрывают лишь 70-80% возможностей соответствующих элементов управления. Так что для решения некоторых специфических задач иногда приходится обращаться к функциям модуля ComCtrls.pas. Примеры этого имеются как в настоящей, так и в последующих главах данной книги.
Если вы распространяете свое приложение, содержащее компоненты со страницы Win32 Палитры компонентов, не забудьте позаботиться о проблеме совместимости. Если версия библиотеки ComCtl32 на компьютере пользователя старее той, что использовалась вами при разработке, то в лучшем случае вы получите проблемы с правильной отрисовкой и поведением элементов управления, а в худшем - фатальную ошибку и неработающее приложение.
Проблема эта решается включением в дистрибутив и запуском на машине клиента приложения 50comupd.exe, которое находится на дистрибутивном диске Delphi 7 в папке \info\extras\comctl\ и обновляет библиотеку, или его можно скачать с сервера Microsoft . Ни в коем случае не пытайтесь просто ("руками") заменить ComCtl32.dll на более новую версию - это запрещено Microsoft и последствия могут вас серьезно огорчить.
Размер 50comupd.exe составляет около 500 Кбайт, так что если оно и "утяжелит" ваш дистрибутив, то ненамного. Есть и более масштабный способ решения этой проблемы - установить последнюю версию Internet Explorer, который включает в себя новую библиотеку ComCtl32. Если у вас дело упирается только в элементы управления, то этот способ избыточен. Но если вы используете в распространяемом приложении другие решения от Microsoft, привязанные к IE (скажем, криптографическую библиотеку CryptoAPI или стек протоколов Internet в динамической библиотеке Winlnet.dll - на нем базируется большинство сетевых технологий в Delphi 7), то он может оказаться необходимым.
Проверка версии библиотеки элементов управления делается с использованием функции из модуля ComCtrls.pas:
function GetComCtlVersion: Integer;
Она возвращает номер установленной версии библиотеки в виде пары цифр. Каждая версия выходит обычно вместе со следующей версией обозревателя Internet. Вот константы, описанные также в модуле ComCtrls.pas:
const
ComCtlVersionIE3 = $00040046;
ComCtlVersionIE4 = $00040047;
ComCtlVersionIE401 = $00040048;
ComCtlVersionIE5 = $00050050;
ComCtlVersionlESOl = $00050051;
ComCtlVersionIE6 = $00060000;
В Windows 2000 и ME библиотека элементов управления имеет версию $00050051 (5.81). Наконец, в следующей ОС от Microsoft - Windows XP (ex-Whistler) - сделаны кардинальные изменения внешних возможностей интерфейса пользователя. И основой их станет 6-я версия библиотеки ComCtl32.
И о совместимости. Не нужно быть мудрецом, чтобы понять, что компоненты со страницы Win32 работают только в среде Win32. Когда вы создаете Kylix-совместимое приложение (CLX Application), вместо страницы Win32 в Палитре компонентов появляется страница Common Controls. Находящиеся там компоненты сделаны на основе библиотеки QT (www.trolltech.com) и лицензированы Borland. Во многом они повторяют методы и свойства элементов управления, соответствующих им в Windows, но далеко не всегда. Поэтому, если вы пишете переносимые приложения, забудьте о библиотеке ComCtl32 и странице Палитры компонентов Win32 и пропустите эту главу.