الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سلسلة التجارب - التجربة الثانية

مغلق
بدأه Adel Khayata في 9 أغسطس 2001 · 2 رد · 1,420 مشاهدة · في قسم المواضيع الهامة في قسم السي /سي++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم.

آسف لتأخري و لكن كنت مشغولا بامتحانات MCSE :)

هذه التجربة ستكون أيضا عن StatusBar وسنرى كيف يمكن ببساطة وضع ProgressBar ضمن StatusBar , و ProgressBar هي الأداة المستخدمة لتدل على تقدم عملية ما . لنبدأ:

أولا يجب التصريح عن Class جديد موروث من CStatusBarCtrl لكي نستطيع التحكم به وقد سميته CProgress و يتم ذلك من Class Wizard .

ثانيا: نقوم بالتصريح عن متحول من نوع CProgressCtrl و الذي سيستخدم لإنشاء أداة ProgressBar .

ثالثا: نكتب في تابع OnCreate() الخاص ب CProgress الشيفرة التالية:

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);

فالتعليمة الاولى تقوم بنشاء أداة ProgressBar كابن ل StatusBar.

و التعليمة الثانية تقوم بتحديد الحد الادنى و الاعلى ل ProgressBAr.

و التعليمة الثالثة تحدد المكان الابتدائي و هو 0.

و التعليمة الرابعة تحدد مقدار الزيادة في كل مرة و هو هنا 1 أي في كل مرة سيزيد تقريبا 10%.

ثم نقوم بكتابة الشيفرة التالية في التابع OnSize() الخاص ب CProgress :

int temp;
int Count = GetParts(0,&temp);
if ( count > 0 )
{
    CRect rect;
    GetRect(Count-1,rect);
    m_Progress.MoveWindow(rect)
}

هنايتم كتابة الكود من أجل توضيع أداة Progress في مكانها الصحيح عند تغيير حجم النافذة و التابع GetParts يعطي عدد ال Panes الموجودة في ال StatusBar.

و بذلك نكون قد انتهينا من CProgress و نأتي إلى كيفية استخدامها:

في التابع OnCreate الخاص ب CMainFrame نقوم بكتابة الشيفرة التالية:

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);

فهذه التعليمات تقوم بانشاء ال StatusBar و الذي يحتوي على قسمين( باستخدام التابع SetParts ) و من ثم نحدد النص الذي سنظهره في ال Pane الأول و بما أنناسنستخدم ال Pane الثاني من أجل احتواء ProgressBar فإننا لم نضع نصا فيه.

و عند الضغط على الأمر Start نقوم بتشغيل Timer كل 500 ميللي ثانية و بالتالي سيتم تنفيذ التابع OnTimer كل 0.5 ثانية الذي يحتوي على الشيفرة التالية :

static int Count = 0 ;
m_wndStatusBar.GetProgressCtrl().StepIt();
if ( ++Count == 10 )
{
    Count = 0 ;
    KillTimer(1);
    m_wndStatusBar.GetProgressCtrl().SetPos(0);
}

في كل مرة يتم فيها تنفيذ هذا التابع يتم زيادة نسبة ال Progress بمقدار 1 و هي القيمة التي حددناها باستخدام التابع SetStep وأيضا يتم زيادة Count بمقدار 1 ( و طبعا Count سيحتفظ بقيمته حتى بعد الخروج من التابع لأننا صرحنا عنه بواسطة static ) و عندما تصل قيمة Count إلى 10 نكون قد انتهينا من مهمتنا و لذلك علينا تصفير المتحول Count و إيقاف ال Timer و من ثم و ضع ال ProgressBar على الوضع الابتدائي.

وهنا يمكنكم الحصول على شيفرة هذا البرنامج:

http://arabteam.nicmatic.com/atassi/adel/p...progressbar.zip

إلى اللقاء في التجربة القادمة :)

مع التحيات.

#2

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

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

:)

Coding on the Cloud and for the Cloud!

My Blog

#3

السلام عليكم.

أخي هاني شكرا لك وفكرتك جميلة عن تخصيص قسم خاص بها و أنا أرفع صوتي معك إلى المدراء من أجل دراسة الموضوع.

مع التحيات.

هذا الموضوع مغلق.

مواضيع مشابهة