آموزش توابع API ویندوز گروه: Fonts
منبع: انجمن تخصصی برنامه نویسان ایران
' Display today's date first in the default Long Date format and
' then in the standard HTTP date format.
Dim today As SYSTEMTIME ' today's date and time
Dim datestr As String ' receives the formatted date string
Dim strlen As Long ' length of the buffer for the formatted date string
' Get today's date and time in the local time zone.
GetLocalTime today
' Make sufficient room in the buffer to receive the date string.
datestr = Space(255)
' Format today's date as a Long Date.
strlen = GetDateFormat(0, DATE_LONGDATE, today, CLng(0), datestr, Len(datestr))
' Remove the empty space from the formatted date string.
datestr = Left(datestr, strlen)
' Display today's date as a Long Date.
Debug.Print "Today is "; datestr
' Now make sufficient room once again.
datestr = Space(255)
' Format today's date in the format used in HTTP.
strlen = GetDateFormat(0, 0, today, "ddd',' dd MMM yyyy", datestr, Len(datestr))
' Remove the empty space from the formatted string.
datestr = Left(datestr, strlen)
' Display today's date in the HTTP-style format.
Debug.Print "Today is "; datestr ' Declarations and such needed for the example:
' (Copy them to the (declarations) section of a module.)
Public Type NUMBERFMT
NumDigits As Long
LeadingZero As Long
Grouping As Long
lpDecimalSep As String
lpThousandSep As String
NegativeOrder As Long
End Type
Public Declare Function GetNumberFormat Lib "kernel32.dll" Alias "GetNumberFormatA" _
(ByVal Locale As Long, ByVal dwFlags As Long, ByVal lpValue As String, lpFormat _
As Any, ByVal lpNumberStr As String, ByVal cchNumber As Long) As Long
Const LOCALE_USER_DEFAULT = &H800
' Display the number -1,234,567.89 according to two formatting rules.
' 1. Use the format specified by the current user locale.
' 2. Use a custom format specified by a structure passed to the function.
Dim nft As NUMBERFMT ' custom formatting settings
Dim formatted As String ' receives the formatted number strings
Dim strlen As Long ' the length of the formatted string
' Display the number formatted according to the current locale.
formatted = Space(256)
strlen = GetNumberFormat(LOCALE_USER_DEFAULT, 0, "-1234567.89", ByVal CLng(0), _
formatted, Len(formatted))
formatted = Left(formatted, strlen)
Debug.Print "User locale format: "; formatted
' Now display according the format we specify below.
With nft
' Display three digits after the decimal point.
.NumDigits = 3
' Display zeros after the decimal point.
.LeadingZero = 1
' Group every three digits to the left of the decimal.
.Grouping = 3
' Use a comma to as the decimal point (like they do in France and Spain).
.lpDecimalSep = ","
' Likewise, use a period as the grouping separator.
.lpThousandSep = "."
' Put the negative sign immediately after the number.
.NegativeOrder = 3
End With
formatted = Space(256)
strlen = GetNumberFormat(LOCALE_USER_DEFAULT, 0, "-1234567.89", nft, formatted, Len(formatted))
formatted = Left(formatted, strlen)
Debug.Print "Custom format: "; formatted
نام تابع: GetDateFormat
اعلان: Declare Function GetDateFormat Lib "kernel32.dll" Alias "GetDateFormatA" (ByVal Locale As Long, ByVal dwFlags As Long, lpDate As SYSTEMTIME, ByVal lpFormat As Any, ByVal lpDateStr As String, ByVal cchDate As Long) As Long
سيستم عامل: CE , 2000 , NT , 98 , 95
توضيحات: اين تابع فرمت بصورت استرينگ يك تاريخ با ستينگ محلي را نشان ميدهد.تاريخ ميتواند يكي از دو حالت فرمت از پيش تعريف شده و يا فرمت خاص تعيين شده در ليست پارامترها باشد. استرينگي كه توسط اين تابع ساخته ميشود تاريخ قابل فهم براي انسان ميباشد.
مقدار بازگشتي: اگر به خطا برسد تابع صفر برميگرداند(با استفاده از GetLastError نوع خطا مشخص ميگردد) . اگر موفق باشد تابع اندازه برحسب تعداد كاراكتر استرينگ پاس داده شده در پارامتر lpDateStr ميباشد.
پارامترها: Locale نوع فرمت مورد اسافاده را مشخص ميكند. ميتواند يكي از دو مقدار زير باشد LOCALE_SYSTEM_DEFAULT پيش فرض سيستم LOCALE_USER_DEFAULT پيش فرض كاربر dwFlags تركيبي از فلگهاي زير نوع فرمت تاريخ را مشهص مينايد(اگر پارامتر lpFormat مقدار دهي شده باشد اين پارامتر بايد صفر بشود. LOCALE_NOUSEROVERRIDE استفاده از فرمت تاريخ پيش فرض سيستم . LOCALE_USE_CP_ACP استفاده از كد پيج ANSI سيستم براي تبديل فرمت بجاي استفاده از كد پيج محلي. DATE_SHORTDATE فرمت تاريخ بصورت تاريخ كوچك باشد(ShortDate). DATE_LONGDATE فرمت تاريخ بصورت بزرگ باشد(LongDate) DATE_YEARMONTH فرمت تاريخ بصورت سال/ماه باشد. DATE_USE_ALT_CALENDAR اگر تقويمي موجود باشد از فرمت آن براي تاريخ استفاده كن. DATE_LTRREADING اضافه كردن علامت براي خواندن از چپ به راست DATE_RTLREADING اضافه كردن علامت براي خواندن از راست به چپ lpDate فرمت تاريخ بصورت استرينگ . lpFormat الگوي فرمت به صورت استرينگ براي تهيه استرينگ تاريخي. براي استفاده از يكي از فرمتهاي از پيش تعريف شده اين پارامتر بايد صفر باشد. در استرينگ الگوي فرمت يك سري كاراكتر خاص قرارميگيرد كه در زير آمده است d روز بدون استفاده از صفر براي روزهاي تك رقمي. dd روز با استفاده از صفر براي روزهاي تك رقمي. ddd سه حرفي كوتاه نام شده روزهاي هفته dddd نام كامل روزهاي هفته M ماه بدون استفاده از صفر براي ماه هاي تك رقمي MM ماه با استفاده از صفر براي ماه هاي تك رقمي MMM سه حرف براي نام اختصاري ماه MMMM نام كامل ماه y سال بدون صفر براي سال ??00الي??09 yy دو رقمي با صفر براي سالهاي ??00الي??09 yyyy سال كامل gg يك استرينگ براي تعيين دوره تاريخي lpDateStr تاريخ دريافت شده به همراه فرمت تعيين شده. cchDate طول استرينگlpDateStr
ثابتهاي مورد استفاده: Const LOCALE_SYSTEM_DEFAULT = &H400 Const LOCALE_USER_DEFAULT = &H800 Const LOCALE_NOUSEROVERRIDE = &H80000000 Const LOCALE_USE_CP_ACP = &H40000000 Const DATE_SHORTDATE = &H1 Const DATE_LONGDATE = &H2 Const DATE_USE_ALT_CALENDAR = &H4 Const DATE_YEARMONTH = &H8 Const DATE_LTRREADING = &H10 Const DATE_RTLREADING = &H20
کتابخانه: Kernel32
توابع مرتبط: GetTimeFormat
نکات: اگر بخواهيم مقدار صفر به پارامتر lpFormat از تابع CLng(0) استفاده شود.
کد نمونه:
اعلان: Declare Function GetNumberFormat Lib "kernel32.dll" Alias "GetNumberFormatA" (ByVal Locale As Long, ByVal dwFlags As Long, ByVal lpValue As String, lpFormat As Any, ByVal lpNumberStr As String, ByVal cchNumber As Long) As Long
سيستم عامل: CE , 2000 , NT , 98 , 95
توضيحات: يك عدد را براي نمايش فرمت ميكند. به صورت پيش فرض تابع فرمت عدد را با استفاده از ستينگ محلي انجام ميدهد. اگر چه ارجحيت با فرمت تعيين شده كاربر ميباشد. نتيجه نهايي تابع يك عدد براي نمايش مطابق با خواست كاربر ميباشد.
مقدار بازگشتي: اگر تابع خطا داشته باشد تابع عدد صفر برميگرداند. (با استفاده از تابع GetLastError نوع خطا مشخص ميگردد.) و اگر موفق باشد تابع طول استرينگ پاس داده شده lpNumberStr را برميگرداند (توجه كنيد اين ايترينگ به Null ختم نميشود)
پارامترها: Locale محل براي تعيين نوع فرمت مورد نياز. اين ميتواند به وسيله ماكروي MAKELCID نيز توليد گردد. ميتوان از يكي از مقادير زير نيز استفاده نمود. LOCALE_SYSTEM_DEFAULT پيش فرض سيستم LOCALE_USER_DEFAULT پيش فرض كاربر dwFlags اگر هيچ ساختاري (استراكچر) به lpFormat پاس ندهيم اين پارامتر نوع ستينگ مورد استفاده را تعيين ميكند. اگر صفر باشد يعني ستينگ فعلي مورد استفاده ميباشد.يا ميتواند مقدار زير باشد. LOCALE_NOUSEROVERRIDE از پيش فرض سيستم براي ستينگ استفاده كن صرف نظر از هر نوع تغييراتي كه كاربر اعمال ميكند. lpValue يك استرينگ شامل فرمت عدد ميشود. فقط كاراكتر هاي عددي صفر تا 9 و كاراكتر يك مميز شناور ميتواند باشد اگر عدد منفي باشد نخستين كاراكتر نيز بايد علامن منها(-) باشد و ديگر هيچ كاراكتري مجاز نيست . lpFormat براي باطل ساختن ستينگ فرمت محلي يك ساختار از نوع NUMBERFMT ميباشد كه شامل اطلاعات فرمت مناسب ميباشد براي استفاده از فرت محلي به اين مقدار صفر پاس بدهيد. lpNumberStr استرينگ كه عدد فرمت شده را دريافت ميكند (ختم به كاراكتر Null) اين استرينگ بايد به اندازه كافي بزرگ باشد تا بتواند فرمت را درخون خود جاي دهد. cchNumber تعداد كاراكتر هاي پاس داده شده به lpNumberStr .
ثابتهاي مورد استفاده: Const LOCALE_SYSTEM_DEFAULT = &H400 Const LOCALE_USER_DEFAULT = &H800 Const LOCALE_NOUSEROVERRIDE = &H80000000
کتابخانه: Kernel32
توابع مرتبط: GetCurrencyFormat
نکات: وقتي كه به پارامتر lpFormat صفر ارسال ميكنيم بايد به جاي آن از ByVal CLng(0) استفاده گردد. (به مثال توجه نماييد تا بيشتر متوجه شويد)
کد نمونه:
