بسم الله الرحمن الرحيم .
المقدمة :
في هذا الموضوع الخفيف سنتعرض للعديد من المواضيع التي نتمنى إن شاء الله أن تكون هناك فائدة للجميع .
الدرس :
أولاً : عرض الوقت في Label أو غيره بالطريقة القياسية - وكذلك التاريخ :
الأمر بسيط جداً, كل ما عليك هو وضع Timer وتغيير خاصية Interval = 1000 مثلاً للوقت وأكثر للتاريخ ، ومن ثم كتابة الأمر التالي :
Label1.Caption = DateTime
ومن ثم ضع . ستظهر لك قائمة من الطرق هذا تفصيل أهمها :
Date : 07/07/2003
Date$ : 07-07-2003
Now : 07/07/2003 04:37:21 ص
Time : 04:38:30 ص
Time$ : 16:38:46
هناك أيضاً Timer : تعود بعدد الثواني من منتصف الليل وحتى الوقت الحالي ... ويمكن أن تستفيد منها بأكثر من طريقة .
* ملاحظة : في كل ما سبق يمكن كتابته مباشرة دون كتابة DateTime .
ثانياً : عرض جزء من الوقت أو التاريخ ( سنة - شهر - يوم - ساعة - دقيقة - ثانية )
بنفس الطريقة السابقة أو بغيرها من الطرق ولكن يصبح الكود بالشكل التالي ( للثانية مثلاً ) .
Text1.Text = Second(Now)
غير المكتوب بالأحمر حسب المطلوب ليصبح ( Minute - Hour - Day - Month - Year ) .
ويمكنك استخراج هذه القمية من قيمة أخرى مرسلة بالشكل التالي على سبيل المثال .
Dim A1
A1 = "12/11/1424"
Msgbox Day(A1)
ثالثاً : عرض التاريخ الهجري والميلادي الحاليين :
يتم ذلك بتحويل طريقة التاريخ بالشكل التالي للهجري :
VBA.Calendar = vbCalHijri
وللميلادي :
VBA.Calendar = vbCalGreg
ومن ثم كتابة أمر التاريخ بصورة طبيعية كما يلي :
Text1.Text = DateTime.Date
رابعاً التحويل بين التاريخين الهجري والميلادي :
نكتب هذه الدالة في موديول :
Public Function TransDate(thedate As Date, TypeTrans As Integer) As String
Dim TempDate As String, MD As Date, a As String
If TypeTrans = 1 Then
VBA.Calendar = vbCalHijri
TempDate = CStr(thedate)
TransDate = TempDate
VBA.Calendar = vbCalGreg
Text1 = TransDate
Else
a = CStr(thedate)
VBA.Calendar = vbCalHijri
MD = CDate(a)
VBA.Calendar = vbCalGreg
TransDate = CStr(Format(MD, "yyyy/mm/dd"))
txtdateofenglish = TransDate
End If
End Function
ومن ثم في زر الأمر ( للتحويل من ميلادي إلى هجري )
Dim Date1
Date1 = TransDate(Text1, 1)
MsgBox Format(Date1, "DD/MM/YYYY")
وللتحويل من هجري إلى ميلادي :
Dim Date1
Date1 = TransDate(Text1, 2)
MsgBox Format(Date1, "DD/MM/YYYY")
خامساً : معرفة اليوم من الأسبوع .
هنا سوف نعتمد على دالة Weekday ، وبدلاً من كتابة الشروط السبعة التالية كلما احتجنا لمعرفة اليوم ، من المفضل كتابتها في دالة تعود باسم اليوم .
Dim Day_Now As Integer
Day_Now = Weekday(Date)
If Day_Now = 1 Then Label1 = "الأحد"
If Day_Now = 2 Then Label1 = "الاثنين"
If Day_Now = 3 Then Label1 = "الثلاثاء"
If Day_Now = 4 Then Label1 = "الأربعاء"
If Day_Now = 5 Then Label1 = "الخميس"
If Day_Now = 6 Then Label1 = "الجمعة"
If Day_Now = 7 Then Label1 = "السبت"
سادساً : عمل ساعة بسيطة بعقارب
يعتمد مبدأ رسم الساعة بعقارب على مجموعة من المعادلات الرياضية التي تحدد قيم Sin و Cos وغيرها من الدوال المثلثية لحساب زاوية رسم العقرب ، وفيما يلي مثال على ذلك :
ضع تايمر وغير Intrval = 1000 واجعل وحدة قياس الفورم Pixel ثم اكتب ما يلي .
Dim x, y, w, m
Private Sub Form_Load()
y = Me.Height / 2 'تحديد نقطة منتصف الفورم
x = Me.Width / 2 'تحديد نقطة منصف الفورم
w = 1700
End Sub
Private Sub Timer1_Timer()
Me.Cls 'مسح ما في الفورم
DrawWidth = 4: Me.Circle (x, y), w 'رسم دائرة قطرها 1700 هي قيمة w
DrawWidth = 4: Me.Line (x, y)-(x + (900 * Sin(Hour(Now) * 3.1415 / 6)), y - (900 * Cos(Hour(Now) * 3.1415 / 6))), &HFFFF00 ' رسم عقرب الساعات
DrawWidth = 3: Me.Line (x, y)-(x + (1200 * Sin(Minute(Now) * 3.1415 / 30)), y - (1200 * Cos(Minute(Now) * 3.1415 / 30))), vbYellow 'رسم عقرب الدقائق
DrawWidth = 1: Me.Line (x, y)-(x + (1500 * Sin(Second(Now) * 3.1415 / 30)), y - (1500 * Cos(Second(Now) * 3.1415 / 30))), vbRed 'رسم عقرب الثواني
End Sub
سابعاً : معرفة الوقت المنقضي على تشغيل الجهاز :
يعتمد هذا الأمر على دالة API اسمها GetTickCount ، ولذلك نعرف استخدام هذا التابع API في موديول Module كما يلي :
Declare Function GetTickCount Lib "kernel32" () As Long
ومن ثم نقرأ قيمة API ، فمثلاً نكتب في زر الأمر :
Dim Minutes As Long
Dim Hours As Long
Dim My_Time As Long
My_Time = GetTickCount
Hours = ((lngCount / 1000) / 60) / 60
Minutes = ((lngCount / 1000) / 60) Mod 60
MsgBox Hours & ":" & Minutes
ثامناً : أداة Calendar .
لاضافتها قم بالضغط على Ctrl + T ومن ثم اختيار Microsoft Calendar Control 10.0 أو أي اصدار آخر .
ومن ثم قم برسمها على الفورم ، وستجد بها العديد من الخيارات وأهمها ( هذه الخيارات أغلبها في Custem ) .
* Value : لتحديد التاريخ المطلوب ومنه يمكن ضبطها بوضع الأمر التالي :
Calendar1.Value = DateTime.Calendar
* First Day : لتحديد اليوم الأول من الأسبوع .
* Day Length - Month Length : لتحديد طريقة عرض اليوم والشهر .
* Grid Call Efect : لاختيار طريقة من ثلاث طرق للعرض باختلاف التحديد .
ستجد أيضاً العديد من الخيارات لاظهارها واخفائها تحت بند Show .
ومن ثم في Font ستجد ثلاثة أنواع : خط ( اليوم من الأسبوع - الأرقام الخاصة بأيام الشهر - العنوان ) .
وفي Color ستجد لون ( الخلفية - اليوم من الأسبوع - الأيام من الشهر - شيء ما لا أعرفه - العنوان ) .
أما عن الأوامر التي يمكن استخدامها فمنها:
NextDay - NextMonth - NextWeek - NextYear ( اليوم - الأسبوع - الشهر - السنة ) التالية .
وعكسها : PreviousDay - PreviousMonth - PreviousWeek - PreviousYear
تاسعا : عمل مؤقت ليدق جرس عند مدة معينة :
الامر ليس صعباً ، فكل ما في الأمر هو وضع Timer واختبار الوقت بالشكل التالي :
If Text1.Text = DateTime.Time Then Ring
حيث أن Text1 تحتوي على الوقت المطلوب ، و Ring هو حدث ليدق جرس أو لتظهر رسالة .
عاشراً : تغيير وقت الكومبيوتر :
اكتب الوقت الذي تريده في Text1 مثلاً ثم اكتب الأمر التالي فقط :
DateTime.Time = text1.Text
الحادي عشر : عمل ستوب ووتش :
الأمر بسيط جداً ... ضع أربع مربعات نص Text1,Text2,Text3,Text4 ثم ضع الأمر التالي في Timer بعد ضبط خاصية Intrval = 100 :
Text4 = Text4 + 1
If Text4 = 9 Then
Text3 = Text3 + 1
Text4 = 0
End If
If Text3 = 59 Then
Text2 = Text2 + 1
Text3 = 0
End If
If Text2 = 59 Then
Text1 = Text1 + 1
Text2 = 0
End If
وفي زر Stop اكتب :
Timer1.Enabled
وفي زر 00:00 اكتب :
Text1.Text = 0 : Text2.Text = 0 : Text3.Text = 0 : Text4.Text = 0
* تذكر أنك تستطيع أن تكتب أكثر من سطر في نفس السطر عن طريق تفريق الأسطر بواسطة نقطتين فوق بعضها : .
الثاني عشر : عمل عداد تنازلي :
اكتب في Genral ، أو في Module ، أو قم بأي طريقة بتعريف متغير عام ، أو حتى قم بتداول المتغير بين الاجراءات والدوال .
Dim My_Time
وضع Timer وغير interval إلى 1000 وخاصية Enabled = False .
ضع Text1 للثواني Text2 للدقائق Text3 للساعات ، وفي زر الأمر ضع الامر التالي :
My_Time = Text1 + ( Text2 * 60 ) + ( Text3 * 60 *60 )
Timer1.Enabled = True
وفي التايمر ضع الأمر التالي :
My_Time = My_Time - 1
If My Time <= 0 Then
Timer1.Enabled = False
Ring
End If
حيث Ring حدث تقوم أنت بوضعه حسبما تريد .
وعند زر Stop اكتب :
Timer1.Enabled = False
الثالث عشر : اضافة يوم - شهر - تاريخ ( إلى تاريخ معين ) - وكذلك الوقت .
نستخدم في ذلك الدالة DateValue ويمكننا أن نكتب قبلها DateTime. أولا لا كما نريد ... ومثال لاضافة يوم .
MsgBox DateTime.DateValue(Now + 2)
الرابع عشر : جمع التواريخ وطرحها واضافة أيام وشهور إليها :
الصيغة العامة لأمر اضافة أيام هي ما يلي :
Text1.Text = DateAdd ( "اضافة إلى","العدد","اضافة")
اضافة ( إما D للايام أو M للشهور أو YYY للأيام )
فمثلاً لاضافة يومين إلى التاريخ الحالي :
Text1.Text = DateAdd ("D",2,Now)
وهكذا ...
أما لطرح تاريخين فمثلاً نكتب الأمر التالي
Msgbox DateDiff("M","12/11/2001","11/08/2003)
حيث M ليخرج الناتج بالشهور كما سبق
الخامس عشر : معرفة الشهر من السنة :
نستخدم الدالة MonthName بالشكل التالي
Msgbox MonthName(4)
وسيكون الناتج حسب النظام المعتمد من Vba
خاتمة :
نكون بهذا قد تعلمنا عدة طرف لعرض التاريخ والوقت ، وكيفية القيام ببعض التطبيقات البسيطة على كل منها ، وبعض العمليات الحسابية أيضاً .
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته ...