Содержание материала

 

Теперь когда у нас есть эти два файла нам необходимо использовать компилятор ресурсов Delphi чтобы скомпилировать .RC файл. В результате чего у нас получится файл WindowsXP.RES который мы можем подключить в наше приложение. Для компиляции ресурса введите в командной строке:

C:\project1> brcc32 windowsxp.rx

Конечно, я думаю что вы вставили в переменную окружения PATH директорию BIN Delphi.

После компиляции вы увидите Файл WindowsXP.RES в тойже директории. Последний шаг для того чтобы ваше приложение стало WindowsXP-совместимым, это подключение ресурсного файла в ваше приложение. Самый простой способ сделать это добавить нижеприведенную директиву в ваш файл проекта или главную форму:

{$R WindowsXP.res}

Скорее всего вам прийдется поместить эту строчку сразу за директивой {$R *.dfm} которая уже имеется в вашем приложении, сразу за приедложением implementation. Как только вы подключили WindowsXP.RES в ваше приложение откомпилируйте ваше приложение и запустите его. Менеджер тем Windows приведет ваше приложение к виду остальных приложений написанных для Windows XP.

Предупреждения

Microsoft предупреждает всех разработчиков что они убрали большое количество кода из библиотеки comctl32.dll, и что необходимо тщательно проверять все стороны работы компонентов перед тем как распространять новую версию. По моему опыту могу сказать что могут быть проблемы совместимости с Delphi. С другой стороны я нашел только одну проблему - с компонентом TListView. Если вы используете TListView в режиме показа (View Style) vsReport, у вас возникнут проблемы с использованием свойства TColumns. Во время запуска при попытку использования заголовков колонок с указанием вида показа у вас возникнет ошибка ядра (Kernel Error).

 

Исправление проблемы с TListView (спасибо Евгению Иванову)

Стал искать как исправить это упущение, так как и Delphi 6 с Update 1 не помогает справиться с этой проблемой. Решение заключается в следующем:

1. Открыть "ComCtrls.pas" и найти "TCustomListView.UpdateColumn"
1. Найдем следующую строку.

    if FImageIndex <> -1 then

       fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES;

3. Заменяем её на:

    if FImageIndex <> -1 then

      fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES

    else

      mask := mask and not (LVCF_IMAGE);

4. Сохраняем Comctrls.pas. Теперь TListView не вызывает ошибку в режиме vsReport под Windows XP.

Автор поправки Matteo Riso.

 

Исправление проблемы с TPageControl

Решение проблемы с установкой цвета фона clBtnFace для TTabSheet.
Как вы знаете TPageControl является контейнером TTabSheet: TPageControl нормально воспринимается Windows XP манифестом, но это остается правильным пока вы не добавите TTabSheet...

Решение заключается в следующем:

1. Откройте модуль "ComCtrls.pas" и найдите строчку "TTabSheet.UpdateTabShowing"
1. Вы увидите следующий текст:

procedure TTabSheet.UpdateTabShowing;

begin

SetTabShowing((FPageControl <> nil) and FTabVisible);

end;

3. Добавьте следующую строчку в эту процедуру:

SetWindowLong(handle,GWL_EXSTYLE,WS_EX_TRANSPARENT);

4. Если в вашем TPageControl создано более одного TTabSheet, возможно при запуске вашего приложения вы увидите все компоненты отрисованные на первом листе (TTabSheet). Не надо впадать в панику... Найдите метод "TPageControl.Loaded" и измените его чтобы он был похож на следующий код:
5.  

Code:

procedure TPageControl.Loaded;

var

I: integer;

begin

inherited Loaded;

UpdateTabHighlights;

for I:=self.PageCount-1 downto 0 do

       self.ActivePage:=self.Pages[I];

end;

 

Добавленый код заставляет TPageControl пройтись по всем страницам перед показом. Это конечно немного некрасиво, но работает... Если у вас есть другие методы решения этой проблемы сообщите мне.

Автор поправки Matteo Riso.

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить