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

للمبتدئين : كل ما تريد معرفته عن الوقت - التاريخ - والأدوات المتعلقة بهما .

بدأه فداك يارسولي في 5 أغسطس 2010 · 5 رد · 1,230 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الدرس :

أولاً : عرض الوقت في 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

ابتسم فان هناك من يحبك. يعتني بك..يحميك..ينصرك..يسمعك ..يراك ..انه الله

ما أخذ منك الا ليعطيك ... وما أبكاك الا ليضحكك...وما حرمك الا ليتفضل عليك

وما ابتلاك الا لانه يحبك ...........................rawd

#2

شكرا على هذا الدرس

رمضان كريم

#3

يسلمووووو على الدرس الرائع

بس عندي سؤال

لو حبيت ادخل التاريخ بالصيغه هذي 14310910

وبمجرد الخروج من التكست يقوم بتحويلها إلى 10-09-1431

فما العمل

#4

السلام عليكم

اخي Iraheema جرب هذا الحل

  
Private Sub Form_Load()
Text1.Text = ""
Text2.Text = ""
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then Text2.SetFocus
End Sub

Private Sub Text1_LostFocus()
Dim str, strall As String
str = Text1.Text
strdate = DateSerial(Mid(str, 1, 4), Mid(str, 5, 2), Mid(str, 7, 2))
Text1.Text = Format(CDate(strdate), "yyyy-MM-dd")
End Sub

ادعوا لنا بالتوفيق

project.rar

تم تعديل هذه المشاركة بواسطة عبدالجليل العقوري في 22 أغسطس 2010 في 01:54

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

عمر المختار

اللهم انعم على بلادي بالأمن والأمان

#5

اخي العزيز السلام عليكم

بارك الله فيك وسنجعل هذا الموضوع مرجع لجميع دوال التاريخ وسازيدك كما يقولوا من الشعر بيت

توجد مشاكل كثيره لنا نحن المبرمجين في فورمات التاريخ واحيانا كنا نلجا لخيارات جهاز الكمبيوتر وللأعدادات الاقليمة وتغير فورمات التاريخ

ولكن هذا الكود سيغير فورمات تاريخ الجهاز كل ما شغلت المنظومة

Private Const LOCALE_IDATE = &H21 ' short date format ordering 
Private Const LOCALE_SSHORTDATE = &H1F ' short date format string 
Private Const LOCALE_SSHlong = &H20 
Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Long

Public Sub SetDateFormat(ByVal theFormat As String) ' تغير التاريخ
Dim strBuffer As String
Dim Res As Long
strBuffer = theFormat & Chr(0)
Res = SetLocaleInfo(LOCALE_IDATE, LOCALE_SSHORTDATE, strBuffer)
End Sub


Public Sub SetDateFormatlong(ByVal theFormat As String) ' تغير التاريخ
Dim strBuffer As String
Dim Res As Long
strBuffer = theFormat & Chr(0)
Res = SetLocaleInfo(LOCALE_IDATE, LOCALE_SSHlong, strBuffer)
End Sub


Private Sub Form_Load()
'هنا نبعث فورمات التاريخ المراد تغيره في الجهاز
'Module يفضل ان يوضع هذا الاستدعاء في
Call SetDateFormat("yyyy/MM/dd") 'للتاريخ القصير
Call SetDateFormatlong("yyyy/MM/dd") '  لتاريخ الطويل
End Sub

وبالتوفيق ان شاء الله

تم تعديل هذه المشاركة بواسطة عبدالجليل العقوري في 23 أغسطس 2010 في 01:12

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

عمر المختار

اللهم انعم على بلادي بالأمن والأمان

#6
عبدالجليل العقوري كتب:

السلام عليكم

اخي Iraheema جرب هذا الحل

  
Private Sub Form_Load()
Text1.Text = ""
Text2.Text = ""
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then Text2.SetFocus
End Sub

Private Sub Text1_LostFocus()
Dim str, strall As String
str = Text1.Text
strdate = DateSerial(Mid(str, 1, 4), Mid(str, 5, 2), Mid(str, 7, 2))
Text1.Text = Format(CDate(strdate), "yyyy-MM-dd")
End Sub

ادعوا لنا بالتوفيق

project.rar

ممتاز جداااااااااااااااا

كثر الله خيرك

مثار اكثر من رائع

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

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

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

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

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