लघु संस्करण: AutoScroll = False
करने के लिए सभी प्रपत्र के बदलने समस्या प्रपत्र के AutoScroll
संपत्ति है, और यह जो फार्म आकार DFM में संग्रहित है कैसे प्रभावित करता।
तो AutoScroll
सच (डिफ़ॉल्ट) है DFM Width
और Height
स्टोर करेगा:
object Form1: TForm1
Left = 192
Top = 114
Width = 544
Height = 375
Caption = 'Form1'
...
तो AutoScroll
झूठी है (वरीय सेटिंग) DFM ClientWidth
और ClientHeight
स्टोर करेगा:
object frmSplash: TfrmSplash
Left = 192
Top = 114
ClientWidth = 536
ClientHeight = 348
Caption = 'Form1'
Height
को संग्रहीत करने में समस्या तब होती है जब उपयोगकर्ता का कैप्शन बार आपकी विकास मशीन से भिन्न आकार है, उदाहरण के लिए
- आप Windows 2000 पर विकसित करने, कार्यक्रम Windows XP पर
- आप Windows XP पर विकसित चलाता है, कार्यक्रम Windows Vista पर चलता है
- आप छोटे फोंट के साथ विकसित करने, कार्यक्रम बड़े फ़ॉन्ट के साथ चलाता है
विंडोज 2000 में 23 पिक्सेल कैप्शन बार के साथ 4 पिक्सेल सीमा थी। डीएफएम 375 के Height
को संग्रहीत करने के साथ, यह फॉर्म क्लाइंट क्षेत्र के लिए 348px छोड़ देता है।
विंडोज एक्सपी पर एक ही प्रोग्राम चलाएं, जिसमें एक लंबा (28 पिक्सेल) कैप्शन बार है। डीएफएम के साथ 375 पिक्सेल के Height
भंडारण के साथ, यह ग्राहक क्षेत्र के लिए 343 पीएक्स छोड़ देता है।
आपका फॉर्म "5 पिक्सल छोटा हो गया"।
AutoScroll
बंद करके डीएफएम में ClientWidth
और ClientHeight
स्टोर करने के लिए आपको डेल्फी को मजबूर करने की आवश्यकता है।
अब जब आप विंडोज एक्सपी पर अपना 348 पीएक्स लंबा फॉर्म बनाते हैं, तो क्लाइंट एरिया में 348 पिक्सल जारी रहेगा - और कैप्शन बार रखने के लिए अतिरिक्त लंबा होना आवश्यक है।
मैं अब तक मेरी सहायक पुस्तकालय कोड किसी भी रूप गलती से AutoScroll
सेट करने के लिए सच है कि यह पता लगता है के रूप में एक OutputDebugString
और एक ब्रेकपाइंट ट्रिगर करने के लिए जाना।
संपादित करें: के बाद से मैं एक अच्छा डेवलपर बनने की कोशिश, मैं अपने रूप के उपयोगकर्ता के फ़ॉन्ट वरीयता सम्मान करते हैं।
- मापता प्रपत्र उपयोगकर्ता के डिफ़ॉल्ट फ़ॉन्ट आकार मिलान करने के लिए
- उपयोगकर्ता की प्राथमिकता को
- मुद्दों फार्म पर सभी नियंत्रणों पर फ़ॉन्ट परिवर्तन: अपने सभी रूपों में से
OnCreate
के दौरान मैं एक StandardizeForm(Self)
समारोह है कि फोन एक ODS प्रपत्र गलती से Scaled
- मुद्दों एक ODS और ब्रेकप्वाइंट
AutoScroll
सच (और गलत पर यह सेट) यदि
- मुद्दों एक ODS करने के लिए सेट सेट है, तो और ब्रेकप्वाइंट अगर
ShowHint
गलत है (और उस पर बदल जाता है)
- आदि
तो आपको कुछ ऐसा कर सकते हैं। हां आपको जोड़ना होगा:
procedure TCustomerEditForm.FormCreat(Sender: TObject);
begin
StandardizeForm(Self); //Pay your taxes!
...
end;
लेकिन यह मेरे लिए लायक है।
कुछ और है जो आप हमें नहीं बता रहे हैं। मैंने हाल ही में d6 से d2010 तक पोर्ट किया है और ऐसी कोई समस्या नहीं थी –
क्या आपने या मैनिफेस्ट का उपयोग करने का प्रयास किया है? शायद आप एक्सपी संगतता मोड निर्दिष्ट कर सकते हैं? – Tom
@ डेविड हेफरन "इस तरह से कुछ बुरा लगता है"। बस दीवार पर हिट करें, कि TForm.ClientWidth डीपीआई के बावजूद Win8.x पर पूरी तरह से पागल परिणाम देता है .... –