السلام عليكم و رحمة الله و بركاته
اليوم سيكون شرح لكود برنامج helloworld basic و هو موجود مع الsdk داخل المجلد Series60Ex
كما أن الشرح موجود في ملف المساعدة الخاص بالsdk
و عند بناء البرنامج يكون بالشكل التالي
في البداية نلقي نظرة على ملفات المشروع
في مجلد group نجد الملفات اللازمة لبناء المشروع و هي bld.inf الذي يحدد ملفات البناء الخاصة بالمشروع و هي هنا helloworldbasic.mmp و داخل هذا الملف يتم تحديد الملفا و المكتبات اللازمة للبناء و اسم الملف النهائي الذي يتم بناؤه و نوعه
راجع الموضوع السابق
البرنامج الأول في السمبيان helloworld
الملف الثالث هو helloworldbasic.rss و هو يمثل ملف resource لأن استخدام الواجهة الرسومية قد يحتاج لتوصيف العناصر في ملف منفصل
مثلا عند عمل مشروع mfc و إضافة نافذة جدية و أضافة أزرار للنافذة هناك ملف خاص بالفيجوال ستوديو يحتوي على توصيف النافذة و مواضع العناصر المختلفة و هو ملف بامتدات rsc لكن في السمبيان نستخدم ملف بامتداد rss
و هنا نطالع بعضا من هذا الملف
RESOURCE EIK_APP_INFO
{
menubar = r_helloworldbasic_menubar;
cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
}حيث يتم تحديد أزرار القائمة الرئيسية في البرنامج و هي هنا من نوع R_AVKON_SOFTKEYS_OPTIONS_EXIT أي أحد الأزار نوعه options يظهر قائمة و الثاني exit الكوماند الخاص به يدل على طلب الخروج من البرنامج
يجب ملاحظة أن الموضوع عنا مجمل أي الهدف هو التعرف على البرنامج بشكل عام
أما التفاصيل الدقيقة فستكون في المرات القديمة عند تناول القوائم و العناصر المختلفة
و في الكود التالي في ملف rss
RESOURCE MENU_PANE r_helloworldbasic_menu
{
items =
{
MENU_ITEM
{
command = EHelloWorldBasicCommand1;
txt = "Hello";
},
MENU_ITEM
{
command = EAknSoftkeyExit;
txt = "Exit";
}
};
}يتم تحديد عناص القائمة و الكود المرتبط بالضغط على كل واحد منها
في النسخة المتقدمة من برنامج carbide و هي ليست مجانية يمكن عن طريق واجهة رسومية تحديد الخيارات المختلفة بطريقة سحب العناصر كما في الفيجوال ستوديو و يتم كتابة هذا الكود تلقائيا
المجلدان التالي هو مجلد inc و يحتوي على ملفات الهيدر و قد تم تحديد موضعها من خلال الملف mmp عن طريق سطر USERINCLUDE ..\inc
أي أن ملفات الهيدر موجودة خارج مجلد group مباشرة و داخل مجلد inc
و داخل مجدل inc نجد أيضا ملف بامتداد hrh و هو يحتوي على قيم الثوابت التي تستخدم في ملف rss كما في الكود التالي
enum THelloWorldBasicIds
{
EHelloWorldBasicCommand1 = 1 // start value must not be 0
};حيث EHelloWorldBasicCommand1 يمثل قيمة الأمر الخاصة بالعنصر الأول في القائمة الذي سينتج عنه إظهار رسالة hello world
أما مجلد src فيحتوي على ملفات cpp الخاصة بالبرنامج
نلقي نظرة عامة على الكود نفسه
في ملف helloworldbasic.cpp
نجد نقطة البداية هي الدالة E32Dll و ليست e32main لأن تطبيقات الواجهة الرسومية عبارة عن ملف dll بامتداد app
هناك نقطة أخرى و هي الدالة CApaApplication* NewApplication() و هي تعيد مؤشر للكلاس الأساسي للتطبيق
و الكود كما يلي
// DLL entry point, return that everything is ok
GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
{
return KErrNone;
}
// Create an application, and return a pointer to it
EXPORT_C CApaApplication* NewApplication()
{
return (static_cast<CApaApplication*>(new CHelloWorldBasicApplication));
}يمكن الاطلاع على الكود في الsdk
و سأكمل في نفس هذا الموضوع في صيغة ردود حتى أستوفي حقه بقدر الإمكان لكني كتبت هذه المقدمة الصغيرة حتى لا أنقطع عنكم