المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: سلسلة التجارب - التجربة الثانية
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي C و ++C و C++.NET > أرشيف منتدى قسم السي ++
Adel Khayata
السلام عليكم.
آسف لتأخري و لكن كنت مشغولا بامتحانات MCSE regular_smile.gif
هذه التجربة ستكون أيضا عن 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
إلى اللقاء في التجربة القادمة regular_smile.gif
مع التحيات.
هاني الأتاسي
أخي عادل أشكرك على هذه المشاركات القيمة .. والله حرام هذه المواضيع تنحط في المنتدى بل يجب أن يكون لها قسم خاص فيها.

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

regular_smile.gif
Adel Khayata
السلام عليكم.
أخي هاني شكرا لك وفكرتك جميلة عن تخصيص قسم خاص بها و أنا أرفع صوتي معك إلى المدراء من أجل دراسة الموضوع.
مع التحيات.
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.