2010-02-21 10 views
11

क्या डेल्फी में संसाधनों से सीधे फ़ॉन्ट का उपयोग करना संभव है और कैसे?बाहरी फ़ॉन्ट का उपयोग कैसे करें?

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

यदि उपरोक्त लिखा गया संभव नहीं है तो मैं फ़ॉन्ट को अलग से (निष्पादन योग्य से) तैनात किए बिना बाहरी फ़ॉन्ट का उपयोग कैसे करूं?

अग्रिम धन्यवाद!

उत्तर

12

Windows 2000 पर और बाद में, आप स्मृति से अपनी प्रक्रिया के लिए फ़ॉन्ट को स्थापित करने AddFontMemResourceEx उपयोग कर सकते हैं।

+0

बस जो मैं खोज रहा था, धन्यवाद! –

+0

क्या आप मुझे एक उदाहरण दिखाएंगे? – sma6871

11

यदि आप फ़ॉन्ट का उपयोग करना चाहते हैं तो फ़ॉन्ट स्थापित होना चाहिए। लेकिन AddFontResource का उपयोग करके आप इसे नकली बना सकते हैं।

procedure TForm1.FormCreate(Sender: TObject) ; 
begin 
    AddFontResource('c:\FONTS\MyFont.TTF') ; 
    SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ; 
end; 

//Before application terminates we must remove our font: 
procedure TForm1.FormDestroy(Sender: TObject) ; 
begin 
    RemoveFontResource('C:\FONTS\MyFont.TTF') ; 
    SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ; 
end; 

जैसा कि आप AddFontResource को फ़ाइल नाम की आवश्यकता है। AddFontResourceEx के लिए भी यही है।

तो आपको एक फ़ॉन्ट फ़ाइल की आवश्यकता है। लेकिन हम भी नकली कर सकते हैं।

अपने निष्पादन योग्य में अपनी टीटीएफ फ़ाइल को शामिल करने के लिए JVCL के TjvDataEmbedded का उपयोग करें। फ़ॉन्ट फ़ाइल को एम्बेड करने के लिए सीधा है। (राइट-क्लिक करें, 'फ़ाइल से लोड करें' ...)।

रनटाइम पर, अपनी फ़ाइल को उपयोगकर्ता की अस्थायी निर्देशिका में निकालें (TjvDataEmbedded विधियों को देखें - मुझे अब पता नहीं है, लेकिन यह SaveToFile या इसी तरह की तरह होना चाहिए)। बीटीडब्ल्यू आप इसे किसी भी अन्य निर्देशिका में निकाल सकते हैं। उस पर AddFontResource पर कॉल करें।

इसके अलावा, आपकी आवश्यकताओं के मुताबिक, आप फ़ाइल को मैप किए गए मेमोरी में और/या रैम ड्राइव में निकाल सकते हैं।

HTH

+0

ग्रेट उत्तर! धन्यवाद! केवल एक चीज रहता है: मैं 'स्थापित' फ़ॉन्ट के साथ TForm.Font कैसे असाइन करूं? –

+2

@ जॉन: तकनीकी पक्ष के संबंध में यह अच्छा है - हालांकि आपको यह सुनिश्चित करने के लिए ** ** की आवश्यकता है कि आपके पास फ़ॉन्ट के लिए पुनर्वितरण अधिकार हैं। – mghie

+0

@ जॉन: आपको फ़ॉन्ट का नाम पता होना चाहिए। यह आसान है - फ़ॉन्ट इंस्टॉल करें, वर्डपैड (या इसी तरह) खोलें और देखें कि फ़ॉन्ट का नाम क्या दिखाई देता है। उदाहरण के लिए। timesb.ttf नाम के लिए 'टाइम्स न्यू रोमन (बोल्ड)' है। तो, आपके आवेदन में आपको ** फ़ॉन्ट नाम ** (फ़ाइल नाम नहीं) को TForm.Font पर असाइन करना होगा। ईजी। इंस्टॉल करने के बाद (उपर्युक्त प्रक्रिया का उपयोग करके) mytimes.ttf आपके पास लाइन होगी: myMainForm.Font.Name:='My Times New Roman '; myMainForm.Font.Size: = 10; //आदि। एक तरफ के रूप में, सुनिश्चित करें कि आपके फॉर्म के सभी नियंत्रणों में 'ParentFont: = True' –