2010-06-06 8 views
14

में एक फ़ॉन्ट एम्बेड करना मैं एक ऐसे ऐप पर काम कर रहा हूं जिसके लिए एक विशेष बारकोड सही प्रकार फ़ॉन्ट की आवश्यकता है जो उपयोगकर्ता के पीसी पर होने की संभावना नहीं है।डेल्फी

क्या मैं किसी भी तरह से ऐप में फ़ॉन्ट एम्बेड कर सकता हूं, या क्या मुझे फ़ॉन्ट इंस्टॉल करने के लिए इंस्टॉलर का उपयोग करने की आवश्यकता है?

+5

आप दोनों कर सकते हैं। मेरे पास 1 प्रश्न है, यह आपका फ़ॉन्ट है? या, क्या आप पुनर्वितरण कर सकते हैं? –

+1

आप इसे संसाधन के रूप में एम्बेड कर सकते हैं। यह भी देखें http://stackoverflow.com/questions/2305344/how-to-use-external-fonts –

उत्तर

7

हां, आप इसे EXE फ़ाइल में संसाधन के रूप में सहेज सकते हैं, और उपयोगकर्ता के पीसी पर, आप इसे TResourceStream उदाहरण का उपयोग करके फ़ाइल के रूप में निकाल सकते हैं। फिर आप AddFontResource एपीआई फ़ंक्शन पर कॉल कर सकते हैं। अंत में, आपको सिस्टम में सभी शीर्ष-स्तरीय विंडो में WM_FONTCHANGE संदेश भेजना चाहिए (एमएसडीएन वेबसाइट में AddFontResource विवरण के टिप्पणी अनुभाग देखें)।

यदि आपको एक उदाहरण कोड की आवश्यकता है, तो मुझे बताएं।

+2

ध्यान रखें कि यदि आप इस फ़ॉन्ट के लिए पुनर्वितरण अधिकार नहीं रखते हैं तो आप कुछ कॉपीराइट कानून या लाइसेंस प्रतिबंध तोड़ सकते हैं। –

10

मेरी राय में EXE में संसाधन के रूप में फ़ॉन्ट एम्बेड किए जाने पर AddFontMemResourceEx का उपयोग करना सबसे आसान तरीका है। यह सीधे स्मृति से फ़ॉन्ट लोड करने की अनुमति देता है, फ़ॉन्ट को फ़ाइल में सहेजने की कोई आवश्यकता नहीं है।

कोड उदाहरण:

function LoadResourceFont(const ResourceName, FontName : string) : boolean; 
var 
    ResStream : tResourceStream; 
    FontsCount : integer; 
    hFont : tHandle; 
begin 
    ResStream := tResourceStream.Create(hInstance, ResourceName, RT_RCDATA); 
    hFont := AddFontMemResourceEx(ResStream.Memory, ResStream.Size, nil, @FontsCount); 
    result := (hFont <> 0); 
    ResStream.Free(); 
end;