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

الفائدة السابعة ( التوقيت في الفيجوال سي ++ )

مغلق
بدأه عبدالرحمن في 23 يوليو 2001 · 3 رد · 1,609 مشاهدة · في قسم المواضيع الهامة في قسم السي /سي++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

في هذه الفائدة سنتعلم كيفية عرض التوقيت الحالي .

أولا نضيف ليبل (نص ثابت) ومن ثم نضيف لهذه الاداة متغير ونسميه m_t .

ثانيا : نضيف متغير وذلك بالضغط على الموارد بازر الايمن وذلك في مساحة العمل . نختار Resource symbol ونضغط امر New ومن ثم في خانة الاسم clock .

ومن ثم نكتب في خانة OnInitDialog

SetTimer(clock,1000,NULL);

طبعا الدالة الاولى لوظيفة SetTimer هي تعريف مؤقت الساعة والثاني هي دورة المؤقت الزمنية بجزء الف من الثانية . اما الثالثة فاتركها للمشرفين او الاعضاء لكي يشرحونها .

الان من Class Wizard نضيف وظيفة للرسالة WM_TIMER .

نحرر الكود وذلك من زر Edit Code

CTime Curtime = CTime ::GetCurrentTime();

m_t.Format("%d:%d:%d",curtime.GetHour(),curTime.GetMinute,curtime.GetSecond());

UpdateData(FALSE);

عرفنا متغير من نوع CTime و اضفنا الدالة GetCurrentTime لهذا المتغير.

وهذه الدالة وظيفتها عرض الوقت الحالي.

وفي السطر الثالث استخدمنا متغير الليبل لكي يعرض عليه الوقت .

واستخدمنا الدوال GetHour و GetMinute و GetSecond لكي يعرض التوقيت بالساعات والدقائق والثواني.

أما %d:%d:%d فهي لكيفية عرض الوقت . والله اعلم

والدالة UpdateData فقد شرحها الاخ هاني جزاه الله خيرا في الفائدة الخامسة .

أرجو من الاخوة ان يدلو بملاحظاتهم وردودهم .

هذا والله اعلم

اخوكم عبدالرحمن .

#2

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

يقوم التابع SetTimer بارسال رسائل WM_TIMER إلى النافذة وكما قال الأخ عبد الرحمن أن التابع SetTimer يحتاج ثلاثة بارامترات :

البارامترالأول : و هو Timer Identifier ويعني رقم لل Timer الذي نريد استخدامه و قد وجد هذا البارامتر من أجل إنشاء أكثر من Timer بنفس الوقت ولذلك حتى يتم التفريق بينها يتم استعمال ال Identifier .

البارامتر الثاني : و هو الزمن ( MilliSeconds ) الذي يحدد الزمن الذي يجب أن ينتظره النظام قبل أن يقوم باستدعاء التابع المحدد بالبارامتر الثالث.

البارامتر الثالث : و هو يحدد عنوان التابع الذي يجب استدعاؤه كلما انتهى الزمن المحدد بالبارامتر الثاني وهنا نواجه حالتين لهذا البارامتر :

1 - يمكن وضع قيمة NULL فيه و عندها فإن رسائل WM_TIMER يتم ارسالها إلى رتل رسائل التطبيق Message Queue و بالتالي تنتظر دورها في الرتل وعندما يأتي دورها يتم استدعاء التابع OnTimer و تنفيذ الشيفرة الموجودة بداخله على حسب Timer Identifier .

2 - يمكن وضع عنوان تابع معرف بطريقة معينة و بالتالي يتم تحويل رسائل WM_TIMER إلى هذا التابع مباشرة و يتم تنفيذ الشيفرة الموجودة بداخل هذا التابع و ال Prototype لهذا التابع هو :

void CALLBACK EXPORT TimerProc(
   HWND hWnd,      // handle of CWnd that called SetTimer
   UINT nMsg,      // WM_TIMER
   UINT nIDEvent,   // timer identification
   DWORD dwTime    // system time
);

و يتم تنفيذ التابع SetTimer بالشكل التالي :

SetTimer( 1 , 1000 , TimerProc ) ;

بقي أن نذكر أن التابع SetTimer يعيد قيمة من نوع UINT هي قيمة Timer Identifier في حالة نجاح تنفيذ التابع و 0 في حالة الفشل .

ملاحظة هامة : Timers هي مصادر محدودة في النظام لذلك يجب تحرير ال Timer بعد الانتهاء من العمل به عن طريق التابع KillTimer الذي يحتاج بارامتراً واحداً هو طبعاً Timer Identifier .

مع التحيات.

#3

الله يعطيك العافية يا اخ عادل

وان شاء تكون الفائدة هذي فادت الجميع

تحياتي

#4

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

أنا أتمنى أن أرى هذا الموقع يزدهر بمشاركات الأخوة حتى تعم الفائدة.

مع التحيات.

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…