2011-10-14 12 views
6

मैं TPanel के उपवर्ग जो मैं बहुत बहुत बहुत और बहुत प्यार करता हूँ मेरी चिढ़ मिल गया है, फ़ॉन्ट कभी नहीं लेने के लिए जब यह कर लगता है:डेल्फी 200 9 में फ़ॉन्ट आकार बदलने के लिए मुझे कैनवास के फ़ॉन्ट को असाइन करने की आवश्यकता क्यों है?

font.size := AFontsize; 
font.style := AFontStyle; 
font.color := AFontColor; 

लेकिन जब मैं यह करने के लिए इसे बदल देता:

Canvas.Font.Assign(Font); 

मुझे डेल्फी 7 में ऐसा करने की ज़रूरत नहीं थी, लेकिन मुझे 200 9 में ऐसा करना प्रतीत होता है। सौदा क्या है?

+0

शायद 'पेरेंटफॉन्ट: = सत्य' ?, पहले सेट करें पैरेंटफॉन्ट: = झूठी, फिर पुन: प्रयास करें। – Johan

+0

@ जोहान, फ़ॉन्ट बदलना स्वचालित रूप से पैरेंट को गलत पर सेट करता है (ओआई में इसे आज़माएं)। –

उत्तर

8

यदि आप पैनल में अपने कैनवास का उपयोग करके टेक्स्ट पेंट करते हैं, तो आपको कैनवास फ़ॉन्ट सेट करना होगा।

कुछ घटक और/या कुछ डेल्फी संस्करण जानबूझकर या पूर्व चित्रकारी कार्य के दुष्प्रभाव के रूप में, Canvas.Font सेट कर सकते हैं, लेकिन आपको उस पर भरोसा नहीं करना चाहिए।

तो पेंटिंग टेक्स्ट शुरू करने से पहले Canvas.Font := Font; करने की अनुशंसा की जाती है।

यह Canvas.Brush और Canvas.Pen पर लागू होता है।

type 
    TMyPanel = class(TCustomPanel) 
    protected 
    procedure Paint; override; 
    end; 

procedure TMyPanel.Paint; 
var 
    r: TRect; 
begin 
    r := ClientRect; 

    Canvas.Brush.Color := Color; 
    Canvas.FillRect(r); // fill the background 

    Canvas.Font := Font; 
    DrawText(Canvas.Handle, 'Sample Text', -1, r, DT_SINGLELINE or DT_CENTER or DT_VCENTER or DT_EXPANDTABS or DT_NOPREFIX); 
end; 
+0

'कैनवास। फॉन्ट: = फ़ॉन्ट;' वास्तव में एक अनुशंसित तरीका है? क्या यह 'कैनवास.फॉन्ट.एस्साइन (फ़ॉन्ट)' नहीं होना चाहिए? –

+0

धन्यवाद, मैंने सोचा कि मैंने यह कोशिश की है और 'कैनवास.फॉन्ट.साइन (फ़ॉन्ट)' को सेट करने की वजह से मैं जिस चीज को चित्रित कर रहा था उस पर एक लालसा का कारण बन गया (इसलिए, बहुत झटकेदार) मैंने इसे दुर्घटना के आसपास दूसरी तरफ किया होगा। –

+2

@AndriyM: वीसीएल आमतौर पर 'कैनवास। फॉन्ट: = फ़ॉन्ट' का उपयोग करता है। इसलिए यह 'असाइन'' का उपयोग करने जैसा ही है, क्योंकि 'फ़ॉन्ट' प्रॉपर्टी की सेट प्रक्रिया स्वयं ही 'असाइन' करती है। – JRL

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