آسف لتأخري و لكن كنت مشغولا بامتحانات MCSE
هذه التجربة ستكون أيضا عن StatusBar وسنرى كيف يمكن ببساطة وضع ProgressBar ضمن StatusBar , و ProgressBar هي الأداة المستخدمة لتدل على تقدم عملية ما . لنبدأ:
أولا يجب التصريح عن Class جديد موروث من CStatusBarCtrl لكي نستطيع التحكم به وقد سميته CProgress و يتم ذلك من Class Wizard .
ثانيا: نقوم بالتصريح عن متحول من نوع CProgressCtrl و الذي سيستخدم لإنشاء أداة ProgressBar .
ثالثا: نكتب في تابع OnCreate() الخاص ب CProgress الشيفرة التالية:
[code2]
m_Progress.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),this,101);
m_Progress.SetRange(0,10);
m_Progress.SetPos(0);
m_Progress.SetStep(1);
[/code2]
فالتعليمة الاولى تقوم بنشاء أداة ProgressBar كابن ل StatusBar.
و التعليمة الثانية تقوم بتحديد الحد الادنى و الاعلى ل ProgressBAr.
و التعليمة الثالثة تحدد المكان الابتدائي و هو 0.
و التعليمة الرابعة تحدد مقدار الزيادة في كل مرة و هو هنا 1 أي في كل مرة سيزيد تقريبا 10%.
ثم نقوم بكتابة الشيفرة التالية في التابع OnSize() الخاص ب CProgress :
[code2]
int temp;
int Count = GetParts(0,&temp);
if ( count > 0 )
{
CRect rect;
GetRect(Count-1,rect);
m_Progress.MoveWindow(rect)
}
[/code2]
هنايتم كتابة الكود من أجل توضيع أداة Progress في مكانها الصحيح عند تغيير حجم النافذة و التابع GetParts يعطي عدد ال Panes الموجودة في ال StatusBar.
و بذلك نكون قد انتهينا من CProgress و نأتي إلى كيفية استخدامها:
في التابع OnCreate الخاص ب CMainFrame نقوم بكتابة الشيفرة التالية:
[code2]
m_wndStatusBar.Create( ......... );
int Widths[2]={0,0};
m_wndStatusBar.SetParts(2,Widths);
m_wndStatusBar.SetText("Choose .....",0,0);
m_wndStatusBar.SetText("",1,SBT_NOBORDER);
[/code2]
فهذه التعليمات تقوم بانشاء ال StatusBar و الذي يحتوي على قسمين( باستخدام التابع SetParts ) و من ثم نحدد النص الذي سنظهره في ال Pane الأول و بما أنناسنستخدم ال Pane الثاني من أجل احتواء ProgressBar فإننا لم نضع نصا فيه.
و عند الضغط على الأمر Start نقوم بتشغيل Timer كل 500 ميللي ثانية و بالتالي سيتم تنفيذ التابع OnTimer كل 0.5 ثانية الذي يحتوي على الشيفرة التالية :
[code2]
static int Count = 0 ;
m_wndStatusBar.GetProgressCtrl().StepIt();
if ( ++Count == 10 )
{
Count = 0 ;
KillTimer(1);
m_wndStatusBar.GetProgressCtrl().SetPos(0);
}
[/code2]
في كل مرة يتم فيها تنفيذ هذا التابع يتم زيادة نسبة ال Progress بمقدار 1 و هي القيمة التي حددناها باستخدام التابع SetStep وأيضا يتم زيادة Count بمقدار 1 ( و طبعا Count سيحتفظ بقيمته حتى بعد الخروج من التابع لأننا صرحنا عنه بواسطة static ) و عندما تصل قيمة Count إلى 10 نكون قد انتهينا من مهمتنا و لذلك علينا تصفير المتحول Count و إيقاف ال Timer و من ثم و ضع ال ProgressBar على الوضع الابتدائي.
وهنا يمكنكم الحصول على شيفرة هذا البرنامج:
http://arabteam.nicmatic.com/atassi/adel/p...progressbar.zip
إلى اللقاء في التجربة القادمة
مع التحيات.