2008-12-31 6 views
5

के साथ सिस्टम फ़ॉन्ट्स ढूँढना उपयोगकर्ता द्वारा उपलब्ध सभी सिस्टम फोंट को खोजने का सबसे अच्छा तरीका क्या है ताकि उन्हें ड्रॉपडाउन चयन बॉक्स में प्रदर्शित किया जा सके?डेल्फी

मैं यूनिकोड और गैर-यूनिकोड फ़ॉन्ट्स के बीच अंतर करना भी पसंद करूंगा।

मैं डेल्फी 200 का उपयोग कर रहा हूं जो पूरी तरह से यूनिकोड सक्षम है, और डेल्फी समाधान पसंद करेंगे।

उत्तर

11

Screen.Fonts संपत्ति EnumFontFamiliesEx API function के माध्यम से पॉप्युलेट की गई है। उस फ़ंक्शन को कॉल करने के उदाहरण के लिए Forms.pas देखें।

कॉलबैक फ़ंक्शन जो इसे कॉल करता है उसे TNewTextMetricEx रिकॉर्ड प्राप्त होगा, और उस रिकॉर्ड के सदस्यों में से एक TFontSignature है। fsUsb फ़ील्ड इंगित करता है कि कौन सा यूनिकोड समर्थन के लिए फ़ॉन्ट दावों को घटा देता है।

सिस्टम में वास्तव में "यूनिकोड फोंट" नहीं है। यहां तक ​​कि जिन फ़ॉन्ट्स में शब्द हैं, उनके नामों में यूनिकोड में सभी यूनिकोड वर्णों के लिए ग्लिफ नहीं हैं। आप बिटमैप, प्रिंटर और ट्रू टाइप फ़ॉन्ट्स के बीच अंतर कर सकते हैं, लेकिन उससे परे, आप यह कर सकते हैं कि आप जिस फ़ॉन्ट पर विचार कर रहे हैं वह आपके इच्छित पात्रों का समर्थन करता है या नहीं। और यदि फ़ॉन्ट वह नहीं है जिसे आप "यूनिकोड फ़ॉन्ट" पर विचार करेंगे, लेकिन यह आपको आवश्यक सभी पात्रों का समर्थन करता है, तो इससे क्या फर्क पड़ता है? इस जानकारी को प्राप्त करने के लिए, आपको GetFontUnicodeRanges में रुचि हो सकती है।

विभिन्न फोंट के साथ पाठ प्रदर्शित करने के लिए माइक्रोसॉफ्ट तकनीक किस फोंट के आधार पर Uniscribe, विशेष रूप से font fallback है। मुझे Uniscribe के लिए किसी भी डेल्फी समर्थन के बारे में पता नहीं है; मैंने एक बार आयात इकाइयों का एक सेट लिखना शुरू कर दिया, लेकिन मेरी रुचियां उलझन में हैं, और मैंने इसे पूरा करने से पहले कुछ और स्थानांतरित कर दिया। Michael Kaplan's blog कभी-कभी अनइस्क्रिब के बारे में वार्तालाप करता है, इसलिए यह देखने के लिए एक और जगह है।

8

मैं अपने आधे सवाल का जवाब कर सकते हैं, आप अपने वर्तमान वातावरण वैश्विक स्क्रीन वस्तु से एक स्ट्रिंग सूची के रूप में की पहुंच है

यानी

Listbox1.Items.AddStrings(Screen.Fonts); 
4

आप देख सकते हैं फ़ॉन्ट्स की एक सूची प्राप्त कर सकते हैं Form.pas स्रोत में यह देखने के लिए कि कैसे कोडगियर स्क्रीन फोंट भरें। विंडोज फोंट को गिनती करके फ़ॉन्ट्स। लौटे LOGFONT संरचना में एक वर्णमाला सदस्य है, लेकिन यह एक सरल 'यूनिकोड' निर्धारण प्रदान नहीं करता है।

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