بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
كيف تغير هيئة التاريخ القصير في نظام الويندوز.
ربما كنت تحتاج في برنامجك إلي التعامل مع التاريخ بهيئة معينة مثل "dd/MM/yyyy" وتود التأكيد على تلك الهيئة عند فتح البرنامج فهذا هو الكود الذي يؤدي ذلك.
انسخ الكود التالي إلى قسم الـ General في Module أو الـ Form.
Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Long
Private Const LOCALE_IDATE = &H21 ' short date format ordering
Private Const LOCALE_SSHORTDATE = &H1F ' short date format string
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
هذا مثال على استخدام تلك الدالة
Call SetDateFormat("dd/MM/yyyy")
تغلب على قصور دالة IsDate
لو أنك حاولت اختبار التاريخ بدالة IsDate لتعرف إذا ما كان التاريخ صحيح أم لا فإنك ستفاجأ بسلوك غريب لهذة الدالة بفرض أن إعدادات الويندوز تشير إلى أن هيئة التاريخ القصير هي "dd/MM/yyyy" وكنت تختبر التاريخ "26/01/2000" مثلا سترجع لك الدالة True دلالة على أن هذا النص يمكن أن يمثل تاريخ ولو اختبرت النص "01/26/2000" ستفاجأ بنفس النتيجة حيث أن الدالة حولت النص للهيئة السليمة فبل الإختبار وبذلك كانت النتيجة خاطئة بالنسبة لنا
لذلك فقد كتبت هذه الدالة لإختبار التاريخ بشكل صحيح.
ضع الكود التالي في قسم الـ General من Module
PrivateType SYSTEMTIME wYear AsInteger
wMonth AsInteger
wDayOfWeek AsInteger
wDay AsInteger
wHour AsInteger
wMinute AsInteger
wSecond AsInteger
wMilliseconds AsInteger
EndType
PrivateDeclareFunction GetDateFormat Lib "kernel32" Alias "GetDateFormatA" _
(ByVal Locale AsLong, ByVal dwFlags AsLong, _
lpDate As SYSTEMTIME, ByVal lpFormat AsString, ByVal lpDateStr AsString, ByVal cchDate AsLong) AsLong
PrivateConst LOCALE_IDATE = &H21
PrivateSub Main()
If ValidateDate("26/01/2000") Then MsgBox "هذا التاريخ صحيح & "26/01/2000", _
vbMsgBoxRight + vbMsgBoxRtlReading + vbInformation
IfNot ValidateDate("01/26/2000") Then MsgBox "هذا التاريخ غير صحيح " & "01/26/2000", _ vbMsgBoxRight + vbMsgBoxRtlReading + vbInformation
End
EndSub
PublicFunction ValidateDate(theDate AsString) AsBoolean
Dim cd As SYSTEMTIME
Dim strBuffer AsString
Dim Res AsLong
cd.wDay = CInt(Left(theDate, 2))
cd.wMonth = CInt(Mid(theDate, 4, 2))
cd.wYear = CInt(Right(theDate, 4))
strBuffer = Space(255)
Res = GetDateFormat(LOCALE_IDATE, 0&, cd, "dd/MM/yyyy", strBuffer, Len(strBuffer))
If Res > 0 Then
ValidateDate = True
EndIf
EndFunction
تحريك نافذة من أى نقطة.
يمكنك تحريك نافذة من أى نقطة بهذا الكود
هذا الجزء من الكود في قسم الـ General
Private X1 As Integer
Private Y1 As Integer
وهذه الجزء من الكود في حدث Form_MouseMove
If Button = 0 Then
X1 = X
Y1 = Y
End If
If Button = 1 Then
Call Me.Move (Me.Left - (X1 - X), Me.Top - (Y1 - Y))
End If
كيف تشغل حافظة الشاشة؟
تري هل من الممكن تشغيل حافظة الشاشة الحالية من داخل برنامجك؟ بالطبع نعم ما عليك إلا أن تفح اـ Form وتضع عليها زر ثم تنسخ هذا الكود إلي قسم General من الـ Form .
PrivateDeclareFunction SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd AsLong, _
ByVal wMsg AsLong, _
ByVal wParam AsLong, _
ByVal lParam AsLong) AsLong
PrivateConst WM_SYSCOMMAND = &H112&
PrivateConst SC_SCREENSAVE = &HF140&
PrivateSub Command1_Click()
Dim Res AsLong
Res = SendMessage(Me.hWnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0&)
EndSub
.