المحتوى

01‏/10‏/2008

دالة للطباعة بالعربي على الشاشة السوداء (الجزء الأول)

السلام عليكم ورحمة الله وبركاته

لقد واجهتني كثيرا مشكلة الكتابة باللغة العربية عند تعلمي للغة البرمجة C على Turbo c++

فكما تعلمون أن Turbo c++ يدعم اللغة الإنجليزية , وإذا أردت أن تصمم برنامج لكتابة جملة إنجليزية فما عليك إلا استخدام دالة printf

ولكن في أحد المرات كنت أريد تصميم برنامج أستخدم فيه أسماء عربية , ولكنني تفاجئت بأنه لا يوجد دالة أستطيع استخدامها لطباعة كلمة عربية على الشاشة السوداء

سألت زملائي الطلبة ولكنهم أخبروني أن DOS لا يدعم اللغة العربية إلا في بعض الإصدارات التي اندثرت

جلست أفكر , وأحدث نفسي أنهم إن استطاعوا إدخال اللغة الإنجليزية , فلماذا لا يمكننا إدخال اللغة العربية

ولكني تركت هذا الأمر ورضيت بالأمر الواقع إلى أن طلب منا "الدكتور في الجامعة" واجبا وكان أحد الأسئلة هو أن تكتب برنامج يقوم برسم شكل ما , وبعد انتهائي من حل الواجب خطر ببالي فكرة

وقلت في نفسي لما لا أقوم برسم الحروف العربية , مثلا أقوم بكتابة برنامج لرسم حرف الصاد مثلا

وبالفعل نجح الأمر, ولكن لرسم حرف الصاد تطلب مني استخدام 3 دوال رسم ودراسة أبعاد الحرف

وفرحت كثيرا بهذا الإنجاز وعقدت العزم على أن أقوم بتصميم كل الحروف , وبالفعل أنشأت عدة دوال كل دالة ترسم حرف معين

ولكنني كنت أريد أن أصمم برنامج يقوم المستخدم فيه باختيار حرف معين

فجلست أفكر "ما العمل" فخطر ببالي أن أنه إذا أدخل المستخدم الحرف الإنجليزي

a

يقوم البرنامج برسم الحرف المقابل له في (الكيبورد) وهو الحرف

ش

وبالفعل نجح الأمر واستطعت أن اكتب برنامج يختار فيه المستخدم عرض أي حرف عربي

ولكن إذا أدخل المستخدم أكثر من حرف فإن الحروف تكتب فوق بعضها

, لذا قمت بتعديل البرنامج وذلك بأن يقوم البرنامج بعمل مسافة بين كل حرف وحرف

لكن حتى الآن كل ما فعلناه هو رسم حروف مقطعة وليس متصلة

فجلست أفكر كيف سألصق الحروف معا

كان يلزمني أولا أن أرسم جميع حالات الأحرف , فمثلا حرف العين , في بداية الكلمة وفي وسط الكلمة وفي نهاية الكلمة ومنفرد

وهذه 4 حالات وبالفعل رسمتها جميعا

ولكن واجهتني مشكلة في ربط الحروف بـ (الكيبورد) لأن عدد أزرار لوحة المفاتيح لا تكفي لجميع الحالات , وبعد تفكير وجد أن الحل هو في عمل رقم خاص لكل حالة , ورتبت الحروف العربية في جدول بحيث يكون لكل حالة رقم خاص بها

ستسألني: وكيف تربط الأرقام بـ (الكيبورد) ؟

سأقول لك: نربط الحرف المفرد فقط , يعني نربط حالة واحدة ومن ثم نعمل اختبار للحروف السابقة , فقد قمت بعمل دوال تدرس الحرف السابق إن كان يلتصق أولا وتصوم بتحديد الحالة المفترضة للحرف الحالي وبمجرد كتابتك للحرف الذي بعده يتم التحقق من الحرفين الأول والثاني وتعديل ما يلزم , وبذلك تمكنت من الكتابة باللغة العربية على شاشة DOS باستخدام الرسم

وقد تمكنت من استخدام هذه الطريقة باستخدام مكتبة OpenGL

يلزمك كتابة دوال الرسم يدويا لرسم الحروف وهذا متعب للغاية كما رأيتم في الطريقة السابقة , وكما أخبرتكم فقد تعلمت أساسيات برمجة الرسم وبذلك استطعت تصميم برنامج لرسم الحرف باستخدام (الماوس) بدلا من كتابة الدوال يدويا , وهذه واجهة البرنامج:

وبذلك يمكنك رسم جميع حالات الحروف بسهولة ويسر

ستسألني: وكيف سأستخدم هذه الحروف المرسومة ؟

سأقول لك: يقوم البرنامج بتحويل صورة الحرف إلى ملف نصي

ومن ثم يمكنك استعماله بتحويله إلى صورة , وقد قمت بالفعل بكتابة برنامج التحويل ونجح المشروع بالفعل , وقد قمت بتأليف كتاب شرحت فيه كيفية استعمال هذه الطريقة في برامجك:

يمكنك تحميل الكتاب من هنا

وللحديث بقية وسأخبركم إن شاء الله عن الأسلوب الجديد لعرض الحروف وهي أفضل من الطريقتين الأولى والثانية ونتائجها مبهرة ولم أكن أتوقع أن أصل لهذه المرحلة من قبل , وللحديث بقية إن شاء الله


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

  1. ما شاء الله,ربي يعاونك,طريقة حلك رائعه,انا نقرا في قسم برمجه وعندي مشكله في السي شارب, نقرا فيه بالساعات ومزال ميبش يخش راسي

    ردحذف
  2. السلام عليكم..
    يمكنك كتابة الاحرف العربية على الشاشة DOS بسهولة.
    المشكلة تقع في التصاق الاحرف ببعضها البعض.
    عليك بتحميل Font جديد اسمه DeJaVu Sans Mono و اضافته الى مجموعة الفونتس في ويندوز. بعد ذلك غيّر Font الDOS الى DeJaVu Sans Mono. اقرا هذا الموضوع لتغيير فونت الدوز:
    http://www.techrepublic.com/blog/windows-and-office/quick-tip-add-fonts-to-the-command-prompt/

    هذه صورة من حاسوبي و انا اطبع الحروف العربية:

    http://s23.postimg.org/lkwel9eez/Capture.gif

    ردحذف
  3. انا صاحب التعليق الثاني نسيت ان اشكرك كل الشكر على الكتاب الرائع الذي قدمته لنا :)

    ردحذف
  4. السلام عليكم ورحمة الله وبركاته
    اخوان حتما حتما هناك كود يصمم بلغة السي ++ لتغير لغة ازرار الكيبورد برمجيا وتمكين الطباعة بالعربي اثناء تطبيق برنامج معين قد كتب بلغة السي ++
    لكنني لم اجد احد لحد الان يعلمنا هذا الكود او ينصحنا لله بخطوات كتابته او اسلوبها ..
    رجاءا ارشدونا جزاكم الله خيرا

    ردحذف
  5. من لديه جواب رجاءا ارساله على الاميل
    hisaby7@gmail.com

    ردحذف