السلام عليكم و رحمة الله و بركاته
الموضوع عن تفعيل الثيم الافتراضي في برامج s60 بمعنى أن إنشاء تطبيق في كاربيد مثلا ستجد البرنامج شاشة بيضاء أو رمادية و ليست الخلفية الافتراضية للنوكيا التي تعطي شكل جمالي و انسيابي و هذا يوضح ما أعنيه
لتفعيل السكين نقوم بالاخطوات التالية
بعد بدء مشروع في الكاربيد على سبيل المثال
في دالة ConstructL() الخاصة ب appui نضع الكود التالي
BaseConstructL(EAknEnableSkin);
و في ملف الهيدر الخاص بالفيو إن كنا نعتمد عليه أو الكونتينر نضع تعريف للكلاس التالي الذي سيعيد لنا صورة الخلفية الخاصة بالثيم
CAknsBasicBackgroundControlContext* iBgContext;
سنحتاج أيضا لتضمين ملفات الهيدر التالية
#include <AknsDrawUtils.h> #include <AknsBasicBackgroundControlContext.h>
و في الكاربيد أو ملف mmp سنحتاج لتضمين المكتبات التالية
LIBRARY aknskins.lib aknskinsrv.lib
نبدأ في استخدام الكلاس
نقوم بإنشائه في دالة constructl الخاصة بالفيو أو الكونتينر
iBgContext = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain,aRect,ETrue);
و لا ننسى حذفه في destrucor كما يلي
delete iBgContext;
نحتاج لإضافة دالة اسمها MopSupplyObject و هي override ستقوم بتمرير الخلفية للعناصر التي أسف الكونتينر أو ألفيو كما يلي
TTypeUid::Ptr yourclassView::MopSupplyObject(TTypeUid aId)
{
if (iBgContext )
{
return MAknsControlContext::SupplyMopObject( aId, iBgContext );
}
return CCoeControl::MopSupplyObject(aId);
}و في دالة draw نضيف الكود التالي لرسم الخلفية
CWindowGc& gc = SystemGc(); // Redraw the background using the default skin MAknsSkinInstance* skin = AknsUtils::SkinInstance(); MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); AknsDrawUtils::Background( skin, cc, this, gc, aRect );
و في دالة SizeChanged نضيف الكود التالي لتغيير حجم الخلفية
if(iBgContext)
{
iBgContext->SetRect(Rect());
if ( &Window() )
{
iBgContext->SetParentPos( PositionRelativeToScreen() );
}
}و في حالة وجود صندوق قائمة لتفعيل الثيم خلف العناصر نضع الكود التالي
iListBox->ItemDrawer()->ColumnData()->SetSkinEnabledL(ETrue)
هل هناك فرق