2012-06-27 9 views
9

Sądzę, że jest to kolejny powód, dla którego style VCL nie są jeszcze gotowe do użycia.TDateTimePicker VCL Style glitch w XE2, który zdarza się tylko w Windows Classic Theme

Kontrola TDateTimePicker wygląda dobrze bez stylów VCL. Włącz dowolnym stylu VCL, a ja dostać ten wygląd:

enter image description here

mogę wyłączyć style VCL tylko dla tego typu części, rejestrując hak styl, ale wygląda naprawdę brzydki.

Jest to na Delphi XE2 z zainstalowaną aktualizacją 4.

Idealnie, mam nadzieję, że istnieje obejście lub niektóre właściwości próbnika datetime lub jakiejś podklasy datetimepicker, którą mógłbym zrobić, aby zmusić próbnik do datetime do poprawnego malowania i tematu.

Należy pamiętać, że zwykłe comboboxy mają właściwy styl. Zauważ, że to się łatwo odtwarza w najbardziej minimalnym projekcie, jaki można sobie wyobrazić. Tak. To jest jeszcze jeden błąd w stylu.

Aktualizacja Może to być platforma specyficzne, związane z systemem Windows Common Controls wersji Windows Server 2008 R2 bez Aero ("pulpit" w ujęciu składnik serwera Windows). Po prostu przyszło mi do głowy, gdy inni ludzie nie mogą go odtworzyć, aby wypróbować to na kilku różnych komputerach z Windows. Po tym stwierdziłem, że problem występuje tylko w systemie Windows Server 2008 R2. Niektórzy z naszych klientów korzystają z systemu Windows Server 2008 R2. Jak wiesz, głównym powodem używania stylów VCL jest to, że sprawia, że ​​Twoja aplikacja wygląda tak samo niezależnie od motywu systemu Windows. Jednak w powyższym przypadku cała aplikacja porusza się poprawnie, z wyjątkiem formantu DateTimePicker, który jest niepoprawnie tematycznie i tylko w systemie Windows Server 2008 R2. Ta sama aplikacja demo na XE2 działa dobrze na Windows 7.

Zarówno działający, jak i niepracujący system ma ComCtl32.dll w folderze SysWow64 z wersją 5.82.7601.17514. Jednak wyraźnie natywny układ i wygląd tych elementów sterujących jest inny, gdy motywy VCL są wyłączone, co wpływa na kod skórny, który kończy się niepowodzeniem.

Update2: Zgłoszone jako błąd: QC Entry 106783

+0

Jakiś czas temu, starałem się używać stylów VCL ale wpadł niektórych nieoczekiwanych problemów, które nie czują się tak, jakby były „moje” - raczej wydawało się być w VCL kod samego Style. Oczywiście, co programista myśli, że jego własny kod jest przyczyną problemu? :-) Nasza potrzeba stylów nie była pilna, a naciskanie na czas, porzuciłem wysiłek. Twoje słowa "Przypuszczam, że jest to kolejny powód, dla którego style VCL nie są jeszcze gotowe do użycia", przypomniało mi to wszystko. W Google już nie widziałem niczego, co wskazywałoby, że style VCL mają problemy. Czy możesz wyjaśnić swoje oświadczenie? – RobertFrank

+4

@Robert Wyszukaj przepełnienie stosu i QC dla stylów VCL, a zobaczysz, że ta funkcja jest funkcją pre-alpha z obsługą błędów. Podobnie jak FMX. –

+0

+1 @David. Dziękuję Ci. – RobertFrank

Odpowiedz

12

Ok, właśnie dokonałem niewielkiej zmiany na jednostkę Vcl.Styles.DateTimePickers, która jest częścią vcl-styles-utils. Aby naprawić ten problem, gdy aktywny jest motyw "Klasyczny Windows".

Użyj tego hak styl w ten sposób

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

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

I to będzie wynik.

enter image description here

+2

+1 dla vcl-styles-utils. Dziękujemy za wykonanie tego projektu –

+2

Nie ma za co. – RRUZ

1

Mogę potwierdzić, że po zainstalowaniu pulpitu, włącz Tematy i uruchomić usługę kompozycje, to usterka zniknie.

Ok oto mój kod obejście teraz:

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. 

To wyraźnie dziki zakątek-case. Spodziewam się, aby znaleźć więcej i wrócę i aktualizować to pytanie kiedy znajdę co innego łamie na Windows Server 2008R2 lub Windows 7, gdy usługa motyw nie jest uruchomiony, co jest, co się dzieje, gdy wybierzesz „Klasyczny Windows Theme” na Win7 również.

+0

Dlaczego uważasz, że jest to ograniczone do 7? Co w Vista? 'Win32MajorVersion> = 6' powinno wystarczyć –

+0

Hmm .. Prawdopodobnie tak, również przetestować vista –

Powiązane problemy