المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: الفائدة السابعة ( التوقيت في الفيجوال سي ++ )
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي C و ++C و C++.NET > أرشيف منتدى قسم السي ++
عبدالرحمن
في هذه الفائدة سنتعلم كيفية عرض التوقيت الحالي .
أولا نضيف ليبل (نص ثابت) ومن ثم نضيف لهذه الاداة متغير ونسميه 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 فقد شرحها الاخ هاني جزاه الله خيرا في الفائدة الخامسة .
أرجو من الاخوة ان يدلو بملاحظاتهم وردودهم .
هذا والله اعلم
اخوكم عبدالرحمن .
Adel Khayata
السلام عليكم.
يقوم التابع SetTimer بارسال رسائل WM_TIMER إلى النافذة وكما قال الأخ عبد الرحمن أن التابع SetTimer يحتاج ثلاثة بارامترات :
البارامترالأول : و هو Timer Identifier ويعني رقم لل Timer الذي نريد استخدامه و قد وجد هذا البارامتر من أجل إنشاء أكثر من Timer بنفس الوقت ولذلك حتى يتم التفريق بينها يتم استعمال ال Identifier .
البارامتر الثاني : و هو الزمن ( MilliSeconds ) الذي يحدد الزمن الذي يجب أن ينتظره النظام قبل أن يقوم باستدعاء التابع المحدد بالبارامتر الثالث.
البارامتر الثالث : و هو يحدد عنوان التابع الذي يجب استدعاؤه كلما انتهى الزمن المحدد بالبارامتر الثاني وهنا نواجه حالتين لهذا البارامتر :
1 - يمكن وضع قيمة NULL فيه و عندها فإن رسائل WM_TIMER يتم ارسالها إلى رتل رسائل التطبيق Message Queue و بالتالي تنتظر دورها في الرتل وعندما يأتي دورها يتم استدعاء التابع OnTimer و تنفيذ الشيفرة الموجودة بداخله على حسب Timer Identifier .
2 - يمكن وضع عنوان تابع معرف بطريقة معينة و بالتالي يتم تحويل رسائل WM_TIMER إلى هذا التابع مباشرة و يتم تنفيذ الشيفرة الموجودة بداخل هذا التابع و ال Prototype لهذا التابع هو :
[code2]
void CALLBACK EXPORT TimerProc(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT nIDEvent, // timer identification
DWORD dwTime // system time
);
[/code2]
و يتم تنفيذ التابع SetTimer بالشكل التالي :
[code2]
SetTimer( 1 , 1000 , TimerProc ) ;
[/code2]
بقي أن نذكر أن التابع SetTimer يعيد قيمة من نوع UINT هي قيمة Timer Identifier في حالة نجاح تنفيذ التابع و 0 في حالة الفشل .

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