تصميم محرر نصوص متكامل التعريب
بإستخدام لغة فيجوال سي ++
يستخدم كثير من مبرمجي لغة فيجوال سي ++ البرنامج الإرشادي MFC AppWizard لتكوين الهيكل الرئيسي لبرامجهم لأنه يوفر الكثير من الجهد والوقت . ولن نشذ في هذه المقالة عن ذلك التقليد ، ولن نشذ في هذا الدرس عن ذلك التقليد وسنستخدم المعالج ذاته لتكوين الهيكل الرئيسي لبرنامجنا ، إليك الخطوات اللازمة لتنفيذ ذلك :
أولاً : شغل بيئة التطوير فيجوال سي ++ وإختر New من القائمة File فيظهر الإطار New .
ثانياً : إختر البند MFC AppWizard من الشريط Project ثم أكتب إسم المشروع ضمن مربع التحرير Project Name: ولتطلق عليه الإسم Arabic Editor ثم أنقر على الزر OK .
ثالثاً : ستعرض بعد النقر على الزر OK الخطوة الأولى من خطوات البرنامج الإرشادي MFC AppWizard . أبق التحديد على الخيار الثاني Multiple Documents لأننا نريد تكوين برنامج متعدد الوثائق ، ثم أنقر على الزر Next للإنتقال إلى الخطوة الثانية .
رابعاً : أبق الخيارات في الخطوات من 2-4 على وضعها دون تغيير ، لكن عند وصولك للخطوة الرابعة أنقر على الزر Advanced... فيظهر الإطار Advanced Option أدخل عندئذ الإضافات التالية :
أكتب TXT ضمن مربع التحرير File Extension كي يرتبط الإمتداد الخاص بالملفات النصية (.TXT) ببرنامجنا "المحرر العربي" .
أكتب ضمن مربع التحرير Main Frame Extension إسم برنامجنا "المحرر العربي" حيث سيظهر هذا الإسم في إطار العنوان الخاص ببرنامجنا .
أكتب ضمن مربع التحرير Filter Name: العبارة "المحرر العربي" *.TXT وهي العبارة التي ستعرض في القائمة المنسدلة نوع الملفات (File of Type) التي ستعرض في أسفل الإطارين "فتح" و "حفظ" .
أكتب ضمن مربع التحرير File New Name (Short Name) كلمة "وثيقة" حيث ستكون هذه الكلمة الإسم الإفتراضي لكل ملف جديد ينشئه المستخدم ضمن برنامجنا .
أكتب ضمن مربع التحرير File New Name (Long Name) العبارة "وثيقة محرر النصوص" .
لكن ما فائدة مربع التحرير هذا ؟
ستجد إذا نقرت على سطح المكتب بزر الماوس الأيمن وحركت المؤشر لتصل إلى البند New عدة أنواع من الملفات المندرجة تحت هذا الخيار والتي تمكنك إنشاؤها بمجرد إختيار أحدها . فإذا إخترت البند Microsoft Word Document مثلاً يشتغل محرر النصوص وورد ويفتح وثيقة جديدة داخله . ويؤدي ما فعلته في هذا الخطوة إلى أن يضيف المترجم الخاص بلغة فيجوال سي ++ البند "وثيقة محرر النصوص" إلى أنواع الوثائق التي يمكنك إنشاؤها بهذه الطريقة .
أنقر على الشريط Windows Style الموجود أعلى الإطار Advanced Option ثم ضع علامة الصحيح على البندين Mazimized الموجودين ضمن المجموعتين Mail Frame Styles و MDI Child Frame Styles وذلك كي يحتل إطار برنامجنا والوثيقة المفتوحة فيه كل مساحة الشاشة .
أنقر بعد ذلك على الزر Close لإغلاق هذا الإطار والعودة إلى البرنامج الإرشادي MFC AppWizard وأنقر لدى عودتك إلى هذا البرنامج على الزر Next في الخطوتين الرابعة والخامسة .
عليك ما أن تصل إلى الخطوة السادسة والأخيرة إختيار البند CeditView من القائمة المنسدلة Base Class لأننا نريد تكوين تطبيق لتحرير النصوص . أنقر بعد ذلك على الزر Finish .
لاحظ أننا تعمدنا عدم شرح خطوات البرنامج الإرشادي 2-5 MFC AppWizard لإفتراضنا أنك تعرفها مسبقاً فهي من أساسيات البرمجة بلغة فيجوال ++ .
تعريب إسم البرنامج
على الرغم من أننا إخترنا عنواناً عربياً لبرنامجنا (محرر النصوص) ضمن مربع التحرير Advanced... في الخطوة الرابعة من خطوات البرنامج الإرشادي MFC AppWizard فإن لغة جدول الرموز String Table الذي حفظ عنوان برنامجنا فيه بالإضافة إلى بقية المعلومات التي أدخلناها ضمن مربعات التحرير الخاصة بالإطار Advanced... هب الإنجليزية ، فإذا ربطنا ونفذنا البرنامج فستظهر الحروف العربية بشكل مشوه ، لذا علينا أن نغير أولاً لغة جدول الرموز ، إتبع الخطوات التالية لعمل ذلك :
أولاً : أنقر على الشريط Resourse View الموجود أسفل إطار مساحة العمل ثم أنقر نقراً مزدوجاً على المجلد Arabic Editor Resourse فيتم فتح مصادر البرنامج .
ثانياً : أنقر نقراً مزدوجاً لفتح المجلد الخاص بجدول الرموز String Table الذي يحتوي على البند String Table . أنقر بالزر الأيمن على هذا البند ثم إختر من القائمة المنسدلة الخيار Properties فيظهر الإطار String Table Properties . وعليك أن تختار البند Neutral (Sys. Default) من القائمة المنسدلة Language ، ويعني هذا أننا نريد أن تعتمد قوائم التطبيق على لغة النظام ، وستظهر في هذه الحالة الحروف العربية فقط على الحواسيب التي تعمل بنظام التشغيل ويندوز المعرب أو الداعم للعربية .
على الرغم من تغييرك لغة جدول الرموز إلا أن ذلك يشوه أحياناً الحروف العربية التي كتبتها ضمن الإطار Advanced Options ، في الخطوة الرابعة من خطوات البرنامج الإرشادي MFC AppWizard . وعليك لتلافي هذه المشكلة إعادة كتابة هذه المعلومات يدوياً . إفعل ذلك بالنقر نقراً مزدوجاً على البند الأول في جدول الرموز IDR_MAINFRAME ثم أكتب "المحرر العربي" ضمن مربع التحرير Caption ثم أنقر نقراً مزدوجاً على البند الثاني في جدول الرموز IDR_MAINFRAME ثم أكتب السطر التالي ضمن مربع التحرير Caption :
/n وثيقةnn المحرر العربي*.txtnArabicEditor.Documentnوثيقة المحرر العربي
لا يكفي تعريب إسم البرنامج وحده كي يدل محرر النصوص على أنه عربي إذ علينا أيضاً أن نغير جهة عرض إسم البرنامج إلى الجهة اليمنى . إتبع الخطوات التالية لعمل ذلك :
أنقر على لسان التبويب Class View ثم إضغط على الإشارة "+" الموجودة قبل البند Arabic Editor Classes فستعرض أسماء أصناف مشروعنا الحالي .
إفتح المصنف CmainFrame ثم أنقر نقراً مزدوجاً على الوظيفة
OnCreate(LPCREATESTRUCT 1pCreateStruct)
فستعرض الوظيفة OnCreate في محرر النصوص الخاص بلغة فيجوال سي++ .
أضف السطر البرمجي التالي إلى السطر الأول من الوظيفة المذكورة :
ModifyStryleEx (0,WS_EX_RIGHT|WS_EX_RTLREADING);
إن الدالة OnCreate هي المسئولة عن تكوين واجهة إستخدام البرنامج ويؤدي السطر الذي أضفته إلى تغيير إتجاه العرض إلى الجهة اليمنى .
سترى عند تنفيذ هذا البرنامج ( بإختيار Build Arabic Editor.exe من القائمة Build ثم إختيار البند Exceute Arabic Editor.exe من القائمة ذاتها ) أن البرنامج الإرشادي MFC AppWizard صمم لك محرر نصوص بسيطاً قادراً على فتح وحفظ الملفات النصية Text Files ويتمتع بالقدرة على القص واللصق وغير ذلك . أكتب أي جملة ثم حاول الخروج من البرنامج من دون حفظ التغييرات ، فيظهر إطار ينبهك إلى أنك لم تحفظ التغييرات التي أجريتها على الوثيقة ، ويسألك إذا كنت تريد حفظها أم لا ؟ العيب الوحيد في محرر النصوص هذا أن إسمه لا ينطبق مع مظهره ، فهو باللغة الإنجليزية !
تعريب قوائم البرنامج
إفتح المجلد Menu الموجود ضمن مصادر البرنامج وذلك بالنقر نقراً مزدوجاً على إسمه ، فترى بندين فرعيين هما :
[English (U.S)] IDR_ARABICTYP
[ENGLISH (u.s) IDR_MAINFRAM
غير أولاً لغة القوائم إلى Neutral (Sys. Default) . عد إلى البند IDR_ARABICTYP ثم أنقر نقراً مزدوجاً على القائمة File... فيظهر الإطار Menu Item Properties . غير قيمة مربع التحرير Caption من &File إلى &ملف . لاحظ أن الإشارة & توضع قبل الحرف الذي نريد أن نميزه . فوضع الرمز & قبل الحرف "م" في كلمة "ملف" يعني أن المستخدم يستطيع الضغط على المفتاحين م+Alt لفتح القائمة "ملف" .
أنقر على شريط التبويب (Extended Styles) ثم عين الخيار (Right-to-left order and align rment) كي تعرض القوائم من الجهة اليمنى . كرر الأمر ذاته في جميع القوائم .
لاحظ أنك عندما تعرب البنود New و Open و Save... إلخ ، تستطيع الذهاب إلى مربع التحرير Prompt وتكتب الشرح الذي تريد أن يظهر في شريط المعلومات . نفذ ذلك على البند Open ، مثلاً بأن تذهب بعد أن تكتب الكلمة "&فتح" بدلاً من Open إلى مربع الحوار Prompt ثم أكتب "فتح ملف موجود سابقاً . nفتح" . لاحظ أن (nفتح) تعني أنك تريد أن تظهر كلمة "فتح" عندما يمر المستخدم بمؤشر الماوس فوق الأيقونة الخاصة بالأمر "فتح" .
إضافة بعض وظائف البحث والإستبدال والتحديد الكلي للمحرر العربي
سنضيف ثلاث وظائف مهمة لبرنامجنا ، هي البحث عن نص أو كلمة معينة ، وإستبدال نص أو كلمة بأخرى ، والتحديد الكلي لجميع محتويات الوثيقة . نفذ ذلك بإتباع الخطوات التالية :
أولاً : أنقر نقراً مزدوجاً على المجلد Menu الموجود ضمن مصادر البرنامج ثم أنقر نقراً مزدوجاً على البند IDR_ARABICTYP
ثانياً : أنقر على البند "تحرير" الخاص ببرنامجنا لفتح البنود الموجودة فيه . المفروض أن يكون البند الأخير فارغاً ليسمح لك بإضافة بنود جديدة إلى هذه القائمة . أنقر نقراً مزدوجاً على هذا البند الفارغ فيتم عرض الإطار Menu Item Properties . ضع علامة صح على الخيار Separator كي يتم وضع فاصل تحت البند الأخير في القائمة "تحرير" وهو "لصق" . سترى بعد النقر على هذا الخيار أن فاصلاً سيضاف إلى القائمة "تحرير" وسيضاف بند آخر فارغ كي تستطيع إضافة بنود أخرى إلى هذه القائمة .
ثالثاً : أنقر نقراً مزدوجاً على البند الأخير الفارغ في القائمة "تحرير" ثم أكتب ID_EDIT_SELECT_ALL ضمن مربع التحرير ID: وهو رقم التعريف الخاص بهذا البند ، فلكل بند أو زر أو مربع تحرير رقم تعريف خاص به .
أدخل بعد ذلك "تحديد الكل tCtrl+A" ضمن مربع التحرير Caption: و "تحديد جميع محتويات الوثيقة الحالية" ضمن مربع التحرير Prompt: وذلك كي يظهر هذا النص ضمن شريط المعلومات . تفيد التعليمة "t" في ترك مسافة تعادل المسافة التي تترك عند الضغط على المفتاح Tab قبل كتابة النص التي يليها وهو في حالتنا Ctrl+A وذلك كي يعرف المستخدم أنه يستطيع النقر على هذين المفتاحين لتنفيذ المهمة "تحديد الكل". وسنربط هذين المفتاحين في الخطوات التالية بهذه المهمة .
رابعاً : كرر الخطوة رقم 2 لإضافة فاصل بين البند "تحديد الكل" .
خامساً : أنقر نقراً مزدوجاً على البند الأخير الفارغ في القائمة "تحرير" ثم أكتب ID_EDIT_FIND ضمن مربع التحرير ID: و "بحث tCtrl+F" ضمن مربع التحرير Prompt: .
سادساً : أنقر نقراً مزدوجاً على البند الأخير الفارغ في القائمة "تحرير" ثم أكتب ID_EDIT_REPLACE من مربع التحرير ID: و "إستبدال tCtrl+H" ضمن مربع التحرير Caption: و "إستبدال نص معين بآخر" ضمن مربع التحرير Prompt .
أجر عمليتي ربط وتنفيذ البرنامج وأكتب بعض العبارات القصيرة ثم جرب الوظائف الثلاث الجديدة التي أضفناها وسترى أنها تعمل بشكل جيد ، فهي موجودة في لغة فيجوال سي++ ولا داعي لبرمجتها يدوياً . وكل ما عليك عمله هو أن تعين رقم التعريف الخاص بكل ميزة . ربما يدهشك ظهور مربعات الحوار الخاصة بالخيارين "بحث" و "إستبدال" باللغة العربية ، ويعود الفضل في ذلك إلى السطر البرمجي الذي أضفته إلى الوظيفة OnCreate() وهو : ModifyStyleEx (0,WS_EX_RIGHT|WS_EX_RTLREADING); .
جرب النقر على الزرين Ctrl+F ضمن برنامجنا محاولاً عرض الإطار "بحث" لكنك لن تنجح في ذلك ، إذ يجب أن تضيف هذا افختصار إلى الأمر "بحث" ولا ضير من إضافة إختصارين آخرين لتشغل الوظيفتين "إستبدال" و "تحديد الكل" ، إتبع الخطوات التالية لفعل ذلك :
· أنقر نقراً مزدوجاً على المجلد Accelerator الموجود ضمن مجلدات مصادر البرنامج ثم أنقر نقراً مزدوجاً على البند IDR_MAINFRAME فيعرض جدول بالمسرعات الموجودة حالياً .
· أنقر نقراً مزدوجاً على البند الأخير والذي يجب أن يكون فارغاً ثم أكتب ID_EDIT_SELECT_ALL ضمن مربع التحرير ID: كي تعين أن الإختصار الذي سنختاره يخص البند "تحديد الكل" .
أكتب الحرف A ضمن مربع التحرير Key: وتأكد من علامة الصحيح موجودة أمام الخيار Ctrl فقط ُثم أنقر على مفتاح العودة Enter كي تتم إضافة هذا الإختصار الجديد إلى الجدول . سيؤدي هذا إلى تنفيذ المهمة "تحديد الكل" كلما ضغط المستخدم على المفتاحين Ctrl+A .
يمكنك بالطريقة ذاتها إضافة إختصارات إلى الخيارين "بحث" و "إستبدال" بإدخال رقم التعريف الخاص بالخيار ضمن مربع التحرير ID: والحرف المناسب F للخيار "بحث" و H للخيار "إستبدال" ضمن مربع التحرير Key: .
تغيير الأيقونة القياسية للبرنامج
بقي أن نغير الأيقونة الإفتراضية للبرنامج التي لها شكل MFC إلى أيقونة أخرى لتتناسب مع برنامجنا . إتبع الخطوات التالية لعمل ذلك :
· أنقر نقراً مزدوجاً على المجلد Icon الموجود ضمن مصادر البرنامج فتجد ضمنه أيقونتين : الأولى IDR_ARABICTYP . وتمثل الأولى رمز الوثيقة المفتوحة في برنامجنا وتمثل الثانية IDR_MAINFRAME رمز برنامجنا رمز برنامجنا . أنقر على هذه الأيقونة نقراً مزدوجاً لفتحها وإمسح الشكل MFC ثم إرسم أي شكل تريده أو إلصق أيقونة جاهزة لتمثل الرمز الجديد لبرنامجنا . كرر ربط وتنفيذ البرنامج لترى أن الأيقونة التي رسمتها أصبحت الأيقونة المعتمدة لبرنامجنا .
اخوكم عبدالله عيد المحمادي