2016-12-19 12 views
8

वर्तमान में मैं वीसीएल शैलियों सक्षम अनुप्रयोगों के विभिन्न पहलुओं का परीक्षण कर रहा हूं।वीसीएल स्टाइल सक्षम अनुप्रयोग के साथ विंडोज टाइटल बार में विजुअल बग और स्केलिंग

मैंने देखा कि विंडोज 96 डीपीआई/100%, से अधिक स्केलिंग के साथ आइकन और वीसीएल फॉर्म का शीर्षक बार टेक्स्ट आकार में बहुत बड़ा है - और दोनों एक साथ बंद हैं - कृपया संलग्न देखें स्क्रीनशॉट। यह विशेष रूप से 200% या 250% (जैसे कि 4 के डिस्प्ले और विंडोज 10 पर उपयोग किया जाता है) के साथ उच्च स्केलिंग के साथ सच है, लेकिन 144 डीपीआई/150% की स्केलिंग के साथ भी, समस्या पहले से ही दिखाई दे रही है।

यह आरएडी स्टूडियो के साथ वितरित सभी शैलियों के लिए सच है। प्रोजेक्ट सेटिंग्स के माध्यम से मैनिफेस्ट के लिए उच्च डीपीआई जागरूकता सक्षम है। यदि मैं ऐप में वीसीएल शैलियां अक्षम करता हूं, तो आइकन और शीर्षक बार टेक्स्ट आकार में सही है।

क्या मुझे यहां कुछ याद आ रही है? डिलीवरी शैलियों को डिस्प्ले स्केलिंग सक्षम बॉक्स के बाहर ऐसी डिस्प्ले त्रुटियों के बिना काम नहीं करना चाहिए? या वहां कुछ सेटिंग है जहां मैं इसे ठीक करने के लिए समायोजित कर सकता हूं।

धन्यवाद,

enter image description here enter image description here

+0

यह किसी भी तरह से सही नहीं है, लेकिन बस हर रूप के शीर्षक के सामने दो अंतरिक्ष वर्ण जोड़ना कुछ भी नहीं है, और इसमें वीसीएल-हैकिंग शामिल नहीं है। – frogb

+0

यह सवाल का एक टिप्पणी है, जवाब नहीं। यह दृश्य बग फिक्सिंग को संबोधित नहीं करता है; यह बस एक कट्टरपंथी कामकाज है। –

+0

मैंने उस पर भी विचार किया था, लेकिन यदि आपके पास ऐप में 15 अलग-अलग रूप हैं, और फॉर्म के साथ अन्य डीएल लोड करें या TOpenDialog इत्यादि निष्पादित करें, नहीं, यह कोई समाधान नहीं है। –

उत्तर

2

ठीक है, यहाँ दृश्य कीड़े के लिए मेरे समाधान है, कृपया देखें संलग्न स्क्रीनशॉट। मैंने Vcl.Forms.pas में 3 स्थानों में फिक्स किया।

पहला फिक्स, // टाइटल बार फिक्स 1 के साथ टिप्पणी की गई, समस्या को संबोधित करता है कि स्केलिंग के बिना भी आइकन सही ढंग से खींचा नहीं गया है, एक डिफ़ॉल्ट 96 डीपीआई विंडोज़ पर एक वीसीएल स्टाइल एप्लिकेशन के साथ। मैं जेम्स जॉनस्टन, https://stackoverflow.com/a/35067909 धन्यवाद, जेम्स के लिए धन्यवाद, WM_GETICON, ICON_SMALL2 के बारे में निष्कर्षों के आधार पर इसे ठीक कर सकता हूं!

अन्य दो फिक्स इस समस्या को संबोधित करते हैं कि आइकन को स्केलिंग सक्षम करने के साथ बहुत बड़ा खींचा गया है, और आइकन और शीर्षक बार टेक्स्ट के बीच की दूरी बहुत छोटी है। कोड में // टाइटल बार फिक्स 2 और 3 के साथ ये फिक्सेस टिप्पणी की गई हैं। GetDpi वर्तमान डीपीआई मान के लिए सिर्फ एक गेटर है, जिसे मैं अपने सी स्रोतों से आवेदन के भीतर प्राप्त करता हूं।

परिणाम किसी भी तरह से सही नहीं है, लेकिन यह अभी के लिए करेगा, इसके साथ ही वीसीएल स्टाइल आवेदन कम से कम परिस्थितियों में स्वीकार्य है।

आपके इनपुट के लिए सभी को धन्यवाद।

left original, right 'fixed'

Title bar fix 1

Title bar fix variables

Title bar fix 2

Title bar fix 3

+1

पीट के लिए! ** ** ** ** कोड की छवियों को पोस्ट न करें। कोड की छवियां बिल्कुल बेकार हैं; आप ' टी कॉपी/पेस्ट, दृश्य विकार वाले लोगों के लिए यह पहुंच योग्य नहीं है, वे कई कॉर्पोरेट प्रॉक्सी के पीछे उपलब्ध नहीं हैं, वे पूरी तरह से मोबाइल उपकरणों का उपयोग करने वालों के लिए डूबते हैं, यह खोजों का हिस्सा नहीं है .... और अधिक। प्रतिलिपि बनाना/स्क्रीन कैप्चर करने, फ़ाइल में सहेजने, लिंक बनाने और अपलोड करने के लिए पाठ को पेस्ट/प्रारूपित करें। जबकि मैं आपकी समाधान साझा करना चाहता हूं, तो कृपया इसे सही तरीके से करें। –

+0

@ केन व्हाइट मैं आपके बिंदु को समझता हूं और मुझे स्क्रीनशॉट पोस्ट करना पता था कोड के लिए कोई अच्छा समाधान नहीं है। बात यह है कि, मैं वास्तव में केवल 16k लाइनों में विशिष्ट स्थानों को इंगित करने का इरादा रखता हूं .pas फ़ाइल जहां मैंने चीजों को बदल दिया, और मैं इसे किसी प्रकार का अंतर दृश्य के रूप में चाहता था, इसलिए स्थान पर मेरा ध्यान और वें ई मतभेद –

+0

कोड में वे स्थान ** प्रक्रियाओं ** में नहीं हैं और ** लाइन नंबर ** नहीं हैं जो आपको उनके स्थानों का संदर्भ देने की अनुमति देंगे? –

10

VCL शैलियाँ ठीक से उच्च DPI स्केलिंग का समर्थन नहीं करते।

यदि आप वीसीएल शैलियां का उपयोग करते हैं, तो आपको अपने एप्लिकेशन मैनिफेस्ट से उच्च डीपीआई जागरूकता को हटा देना चाहिए।


QP रिपोर्ट VCL शैलियाँ के लिए सामान्य उच्च DPI सहायता का अनुरोध: VCL styles don't scale properly under high DPI configurations

संबंधित QC रिपोर्ट एनसी क्षेत्र के लिए: Styled form's non-client area incorrectly scaled under High DPI

+0

@ दलिजा प्रसन्नार, जानकारी और आपके क्यूसी के लिए धन्यवाद, लेकिन यह अभी मेरी मदद नहीं करेगा, और मुझे एम्बरका में दिलचस्पी नहीं है। या तो झुकाव, मैं पिछले कुछ सालों में अपनी बग के साथ पहले से ही अपना हिस्सा था। मुझे मैनिफेस्ट में डीपीआई जागरूकता का उपयोग करने की ज़रूरत है, और मैं एक समाधान की तलाश कर रहा हूं जो वर्तमान 10.1 रिलीज के साथ काम करेगा। –

+0

- शैली डिजाइनर में, ऑब्जेक्ट्स \ फॉर्म \ छवि \ शीर्षक \ कैप्शन बहुत सारे सबिटैम्स के साथ है, क्या कोई ऐसी संपत्ति है जो मदद करेगी? मैंने उनमें से कुछ को बाएं या मार्जिन लेफ्ट की तरह बदलने की कोशिश की, लेकिन ऐसा कोई फर्क नहीं पड़ता। - या, क्या कोई मुझे वीसीएल शैलियों में जगह पर संकेत दे सकता है। पैस स्रोत जहां कैप्शन टेक्स्ट स्थित है? मैं .pas स्रोत को बदलने पर विचार करता हूं और इसे अपने प्रोजेक्ट से लिंक करता हूं अगर यह बग को ठीक कर सकता है। धन्यवाद –

+0

आप Vcl.Forms TFormStyleHook क्लास देख सकते हैं, सबसे अधिक संभावना पेंटनसी विधि। –

0

यहाँ एक इकाई है कि डीपीआई बताने वाले ऐप्लिकेशन में VCL शैलियों अनुमति देता है।

VCL.Styles.DPIAware.pas

इकाई का उपयोग सिर्फ कार्यान्वयन मुख्य रूप के बयान का उपयोग करता है के लिए इसे जोड़ने और FormCreate हैंडलर के लिए निम्न कोड को जोड़ने के लिए।

procedure TFrmMain.FormCreate(Sender: TObject); 
Var 
    StyleDPIAwareness : TStyleDPIAwareness; 
begin 
    StyleDPIAwareness := TStyleDPIAwareness.Create(Self); 
    StyleDPIAwareness.Parent := Self; 

डिफ़ॉल्ट रूप से घटक 100% के गुणकों पर शैलियों को स्केल करता है। आपको लगता है कि बदल सकते हैं, पंक्ति जोड़कर:

StyleDPIAwareness.RoundScalingFactor := False; 

इस बयान शैलियों के साथ Screen.PixelsPerInch के लिए जो कुछ भी स्केलिंग कारक परिणाम के लिए मापा जाता है। अधिकांश शैलियों ठीक काम करेंगे, लेकिन कुछ कुछ दृश्य दोष दिखा सकते हैं।

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