عبدالرحمن
Jul 23 2001, 11:37 PM
في هذه الفائدة سنتعلم كيفية عرض التوقيت الحالي .
أولا نضيف ليبل (نص ثابت) ومن ثم نضيف لهذه الاداة متغير ونسميه 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
Jul 24 2001, 10:33 AM
السلام عليكم.
يقوم التابع 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 .
مع التحيات.
عبدالرحمن
Jul 26 2001, 05:24 PM
الله يعطيك العافية يا اخ عادل
وان شاء تكون الفائدة هذي فادت الجميع
تحياتي
Adel Khayata
Jul 29 2001, 08:01 AM
السلام عليكم.
أنا أتمنى أن أرى هذا الموقع يزدهر بمشاركات الأخوة حتى تعم الفائدة.
مع التحيات.
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء
إضغط هنا.