2012-06-27 3 views
9

Я думаю, это еще одна причина, по которой стили VCL еще не готовы к использованию.TDateTimePicker VCL Стили сглаживания в XE2, что происходит только на Windows Classic Theme

Управление TDateTimePicker отлично выглядит без стилей VCL. Включите любой стиль VCL, и я получаю этот вид:

enter image description here

Я могу отключить стили VCL именно для этого типа компонента, регистрируя крючок стиля, но это выглядит очень некрасиво.

Это на Delphi XE2 с установленным обновлением 4.

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

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

Обновление Возможно, это относится к платформе, связанной с версиями Windows Common Controls Windows Server 2008 R2 без Aero («Desktop Experience» в терминах компонентов сервера Windows). Мне просто пришло в голову, что другие люди не могут воспроизвести его, чтобы попробовать это на нескольких разных машинах Windows. После этого я обнаружил, что проблема только воспроизводится в Windows Server 2008 R2. Некоторые из наших клиентов используют Windows Server 2008 R2. Как вы знаете, основная причина использования VCL Styles заключается в том, что приложение делает его одинаковым, независимо от того, что такое тема Windows. Однако в приведенном выше примере все темы приложений должным образом, за исключением элемента управления DateTimePicker, который неправильно указан, и только на Windows Server 2008 R2. Одно и то же приложение на основе XE2 отлично работает в Windows 7.

В рабочей и нерабочей системе есть файл ComCtl32.dll в папке SysWow64 с версией 5.82.7601.17514. Тем не менее, очевидно, что внешний вид и внешний вид этих элементов управления различны, когда темы VCL отключены, и это влияет на код скиннинга, который терпит неудачу.

Update2: Сообщил как ошибка: QC Entry 106783

+0

Некоторое время назад я пытался использовать стили VCL, но столкнулся с некоторыми непредвиденными проблемами, которые не чувствуют, что они были «мое» - скорее, они, казалось, в самом коде Стили VCL. Конечно, какой программист считает, что его собственный код вызывает проблему? :-) Наша потребность в стилях не была срочной, и, будучи нажатой на время, я отказался от усилий. Ваши слова «Я думаю, это еще одна причина, по которой стили VCL не готовы к использованию», напомнил мне обо всем этом. Сейчас я просто не вижу ничего, что указывало бы на то, что стили VCL имели проблемы. Можете ли вы уточнить свое заявление? – RobertFrank

+4

@Robert Поиск в Stack Overflow и QC для стилей VCL, и вы увидите, что эта функция - это функция, предшествующая альфа-проверке ошибок. Также как FMX. –

+0

+1 @David. Спасибо. – RobertFrank

ответ

12

Хорошо, я только что внес небольшое изменение в блок Vcl.Styles.DateTimePickers, который является частью vcl-styles-utils. Чтобы устранить эту проблему, когда активна тема «Windows Classic».

Используйте этот стиль крючок таким образом

uses 
    Vcl.Styles, 
    Vcl.Themes, 
    Vcl.Styles.DateTimePickers; 

initialization 
TStyleManager.Engine.RegisterStyleHook(TDateTimePicker, TDateTimePickerStyleHookFix); 

И это будет результат.

enter image description here

+2

+1 для vcl-styles-utils. Спасибо за создание этого проекта. –

+2

Добро пожаловать. – RRUZ

1

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

Хорошо вот мой обходной код сейчас:

function DetectWin7Or2008R2ClassicTheme:Boolean; 
begin 

    if (Win32MajorVersion>=6) then 
     result := (not Themes.ThemeServices.ThemesEnabled) // and IsServerOs 
    else 
     result := false; 


end; 


// main form initialization section: 


initialization 
if DetectWin7Or2008R2ClassicTheme then 
TStyleManager.Engine.RegisterStyleHook(TDateTimePicker, TStyleHook); {no theme!} 
end. 

Это явно дикий уголок случая. Я ожидаю найти больше, и я вернусь и обнов этот вопрос, когда найду, что еще разрывается на Windows Server 2008R2 или Windows 7, когда служба темы не запущена, что происходит, когда вы выбираете «Windows Classic Theme», на Win7, также.

+0

Почему, по-вашему, это ограничено 7? Что относительно Vista?' Win32MajorVersion> = 6' должно быть достаточно. –

+0

Хм. Возможно, правильно. Будет также тестировать визу. –

 Смежные вопросы

  • Нет связанных вопросов^_^