المتابعون للمدونة

السبت، 15 يوليو 2017

معرفة الخطوط العربية


س: هل يمكن معرفة الخطوط العربية الموجودة على الجهاز برمجيا؟

ج: نعم.. يمكن فعل هذا بسهولة في تطبيقات WPF لكن لا توجد طريقة مباشرة لفعل هذا في تطبيقات Windows Forms إلا باستعارة هذه الإمكانية من WPF كما سأذكر كيف في نهاية الإجابة.
لأخذ نبذة عن WPF اقرأوا هذا الموضوع:

الفكرة هي أن نحاول أن نعرف هل يحتوي الخط على نقش Glyph لحرف عربي مثل "ض".. يمكن معرفة هذا في WPF بفحص أشكال الخط المختلفة Typefaces ومحاولة الحصول على نقش حرف الضاد، فإن وجد، فهذا معناه أن هذا خط عربي.

هذه هي الدالة التي تفعل هذا، وهي دالة عامة، تستقبل اسم أحد الخطوط، وحرفا أبجديا لتفحص إن كان يستطيع هذا الخط عرضه أم لا.. هذا يتيح لك أن تفحص إن كان الخط يدعم عرض الحروف الإنجليزية أو الفرنسية (اختر حرف مميز للغة الفرنسة مثل الحروف ذات العلامات العلوية أو السفلية) أو الصينية.. إلخ.. سأكتب الكود هنا بلغة سي شارب، لكن ستجدون نسخة بفيجوال بيزيك دوت نت في الرابط المرفق:
public static bool FontSupprotsChar(string FontName, char Character) {
        var family = new FontFamily(FontName);
        int unicodeValue = Convert.ToUInt16(Character); 

        ushort glyphIndex;
        GlyphTypeface glyph;       

        foreach (Typeface typeface in family.GetTypefaces()) {
            typeface.TryGetGlyphTypeface(out glyph);
            if (glyph != null && glyph.CharacterToGlyphMap.TryGetValue(unicodeValue, out glyphIndex))
                return true;
        }
        return false;
}
وقد وضعت هذه الدالة في فئة اسمها FontChars، ووضعت معها دالة أخرى اسمها GetFontsSupprotingChar تفحص كل الخطوط الموجودة في مجلد خطوط النظام، وتعيد قائمة تحتوي على الخطوط التي تستطيع أن تعرض الحرف الذي ترسله إليها كمعامل.. ستجد كود هذه الفئة كاملا في المشروع ArabicFonts، وهو مشروع WPF مكتوب بلغة سي شارب، يعرض قائمة تحتوي على الخطوط العربية، وقائمة أخرى تحتوي على الخطوط الإنجليزية.. لاحظ أن بعض الخطوط تستطيع عرض اللغتين، لهذا ستجدها في القائمتين.
وقد كتبت لكم نسخة أخرى من المشروع بلغة فيجوال بيزيك دوت نت، لكن المشروع هذه المرة من النوع Windows Forms، وأضفت فيه الفئة FontChars بنفس الكود.. لكن لكي يفهم محرر الكود فئات WPF المستخدمة في الكود، يجب أن نضيف إلى مراجع المشروع References المرجعين التاليين:
PresentationCore
PresentationFramework
لفعل هذا افتح متصفح المشاريع Solution Explorer.. وبزر الفأرة الأيمن اضغط العنصر References الموجود تحت اسم المشروع Arabic Fonts ومن القائمة الموضعية اضغط Add Reference.. في النافذة التي ستظهر، تأكد من اختيار العنصر Assemblies/Framework من القائمة اليسرى، وفي القائمة الوسطى ابحث عن العنصرين PresentationCore و PresentationFramework، وضع علامة الاختيار بجوار كل منهما، ثم اضغط زر الموافقة.
الآن صار بإمكاننا استخدام نفس كود WPF داخل مشروع WinForms!
ستجدون الكود الكامل في المشروعين في هذا الرابط:

 

 

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر