2012-06-27 7 views
9

पर होती है मुझे लगता है कि यह एक और कारण है कि वीसीएल शैलियों वास्तव में उपयोग करने के लिए तैयार नहीं हैं।XD2 में TDateTimePicker VCL स्टाइल गड़बड़ जो केवल विंडोज क्लासिक थीम

टीडीएटीटाइम पिकर नियंत्रण वीसीएल शैलियों के बिना ठीक दिखता है। किसी भी vcl शैली को चालू करें, और मैं इस उपस्थिति मिलती है:

enter image description here

मैं बंद vcl शैलियों सिर्फ इस घटक प्रकार के लिए, एक शैली हुक पंजीकरण से बदल सकते हैं, लेकिन वास्तव में बदसूरत लग रहा है।

यह अद्यतन 4 स्थापित के साथ डेल्फी XE2 पर है।

आदर्श रूप से, मुझे उम्मीद है कि एक कामकाज है, या डेटाटाइम पिकर के कुछ गुण हैं, या डेटाटाइमिकर के कुछ सबक्लास मैं डेटाटाइम पिकर को पेंट और थीम को सही तरीके से मजबूर करने के लिए कर सकते हैं।

ध्यान दें कि सामान्य comboboxes सही ढंग से थीम कर रहे हैं। ध्यान दें कि यह कल्पना की जा सकने वाली सबसे कम नमूना परियोजना में आसानी से पुन: उत्पन्न होता है। हाँ। यह अभी तक एक और शैलियों बग है।

अद्यतन यह मंच हो सकती है, विंडोज आम से संबंधित आर 2 एयरो ("डेस्कटॉप अनुभव" Windows सर्वर घटक संदर्भ में) के बिना विंडोज सर्वर 2008 पर संस्करणों नियंत्रित करता है। यह कई अलग-अलग विंडोज मशीनों पर कोशिश करने के लिए, अन्य लोगों को पुन: उत्पन्न नहीं कर सकता है, यह अभी हुआ है। ऐसा करने के बाद, मुझे लगता है कि समस्या केवल Windows Server 2008 R2 पर पुन: उत्पन्न होती है। हमारे कुछ ग्राहक विंडोज सर्वर 2008 आर 2 का उपयोग करते हैं। जैसा कि आप जानते हैं कि वीसीएल स्टाइल का उपयोग करने का एक प्रमुख कारण यह है कि यह आपके ऐप को विंडोज थीम की परवाह किए बिना समान दिखता है। हालांकि उपर्युक्त मामले में, संपूर्ण ऐप थीम सही तरीके से, डेटटाइम पिकर नियंत्रण को छोड़कर, जो गलत तरीके से थीमाधारित है, और केवल Windows Server 2008 R2 पर है। वही XE2- आधारित डेमो ऐप विंडोज 7 पर ठीक काम करता है।

दोनों काम करने वाले और गैर-कामकाजी प्रणालियों में SysWow64 फ़ोल्डर में ComCtl32.dll है जो संस्करण पढ़ने के साथ 5.82.7601.17514 पढ़ता है। हालांकि, स्पष्ट रूप से मूल नियंत्रण और इन नियंत्रणों की उपस्थिति अलग होती है, जब वीसीएल थीम बंद होती हैं, और यह स्किनिंग कोड को प्रभावित करती है, जो विफल हो जाती है।

Update2: एक बग के रूप में रिपोर्ट: QC Entry 106783

+0

कुछ समय पहले, मैं VCL शैलियों का उपयोग करने की कोशिश की लेकिन कुछ अप्रत्याशित समस्याओं कि महसूस नहीं किया था जैसे वे "मेरा" थे में भाग - बल्कि वे VCL शैलियाँ कोड अपने आप में लग रहा था। बेशक, कौन सा प्रोग्रामर सोचता है कि उसका कोड समस्या पैदा कर रहा है? :-) शैलियों की हमारी आवश्यकता जरूरी नहीं थी, और समय के लिए दबाया जा रहा था, मैंने प्रयास छोड़ दिया। आपके शब्द "मुझे लगता है कि यह एक और कारण है कि क्यों वीसीएल शैलियों वास्तव में उपयोग करने के लिए तैयार नहीं हैं," यह सब मुझे याद दिलाता है। अभी आसपास घूमते हुए, मुझे कुछ भी नहीं दिख रहा था जो दर्शाता है कि वीसीएल शैलियों में समस्याएं थीं। क्या आप अपना बयान स्पष्ट कर सकते हैं? वीसीएल शैलियों के लिए – RobertFrank

+4

@ रॉबर्ट सर्च ओवरफ्लो और क्यूसी पर खोजें और आप देखेंगे कि यह सुविधा एक बग सवार प्री-अल्फा गुणवत्ता सुविधा है। बस एफएमएक्स की तरह। –

+0

+1 @ डेविड। धन्यवाद। – RobertFrank

उत्तर

12

ठीक है, मैंने अभी Vcl.Styles.DateTimePickers इकाई में एक छोटा सा परिवर्तन किया है जो vcl-styles-utils का हिस्सा है। "Windows क्लासिक" थीम सक्रिय होने पर इस समस्या को ठीक करने के लिए।

इस तरह

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

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

में इस शैली हुक का प्रयोग करें और यह परिणाम होंगे।

enter image description here

+2

Vcl-styles-utils के लिए +1। इस प्रोजेक्ट को बनाने के लिए धन्यवाद। –

+2

आपका स्वागत है। – RRUZ

1

मैं पुष्टि कर सकता है कि जब मैं डेस्कटॉप अनुभव स्थापित करते हैं, विषय-वस्तु को सक्षम और विषय-वस्तु सेवा शुरू करते हैं, यह गड़बड़ हो जाती है।

ठीक है अब यहाँ के लिए मेरे समाधान का कोड है:

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. 

यह स्पष्ट रूप से एक जंगली कोने-मामला है। मुझे और अधिक खोजने की उम्मीद है, और जब मैं थीम सर्वर नहीं चल रहा हूं, तो जब मैं "विंडोज क्लासिक थीम" चुनता हूं तो क्या होता है, जब मैं विंडोज सर्वर 2008R2 या विंडोज 7 पर और क्या तोड़ता हूं, तो मैं वापस आऊंगा और इस सवाल को अपडेट करूंगा। Win7 पर भी।

+0

आपको ऐसा क्यों लगता है कि यह 7 तक सीमित है? Vista के बारे में क्या? Win32MajorVersion> = 6' पर्याप्त होना चाहिए। –

+0

हम्म। शायद सही है। विस्टा का परीक्षण भी करेगा। –

संबंधित मुद्दे