You are here: آموزش توابع API ویندوز گروه Fonts

گروه Fonts

آموزش توابع API   ویندوز           گروه: Fonts

منبع: انجمن تخصصی برنامه نویسان ایران 

CreateFont, CreateFontIndirect, EnumFontFamilies, EnumFontFamiliesEx,




نام تابع: CreateFont

اعلان: Declare Function CreateFont Lib "gdi32.dll" Alias "CreateFontA" (ByVal nHeight As Long, ByVal nWidth As Long, ByVal nEscapement As Long, ByVal nOrientation As Long, ByVal fnWeight As Long, ByVal fdwItalic As Long, ByVal fdwUnderline As Long, ByVal fdwStrikeOut As Long, ByVal fdwCharSet As Long, ByVal fdwOutputPrecision As Long, ByVal fdwClipPrecision As Long, ByVal fdwQuality As Long, ByVal fdwPitchAndFamily As Long, ByVal lpszFace As String) As Long

سيستم عامل: NT , 2000 , 98 , 95

توضيحات: اين تابع جهت ايجاد يك فونت بكار ميرود ، فونت كارش كشيدن يك متن يا نوشته روي يك ديوايس(با خواص خودش اعم از سايز، ذخيم يا نازك ، ايتاكيك و ... ميباشد .فونت ايجاد شده توسط اين دستور فونت لاجيكال ميباشد به اين مفهوم كه شكل فونت به وسيله يك سري اعداد ارسال شده كشيده ميشود . پس از پايان برنامه بايد بااستفاده از تابع DeleteObject فونت حذف شود.

مقدار بازگشتي: اگر با اشكال مواجه شود مقدار برگشتي صفراست (در ويندوز NTو2000 براي نوع خطا از تابع GetLastError استفاده نماييد) و اگر موفق باشد هندل فونت را برميگرداند.

پارامترها: nHeight ارتفاع فونت براي فونت هاي يك واحد كاراكتري ،اگر مقدار مثبت باشد فونت مپر(FontMapper) مستقيما آن را با ارتفاع فونتهاي داخل ديوايس هماهنگ ميكند اگر مقدار صفر ارسال گردد فونت مپر ارتفاع پيش فرض را در نظر ميگيرد. و اگر منفي ارسال گردد فونت مپرقدرمطلق آن را مستقيما با ارتفاع فونتهاي داخل ديوايس هماهنگ ميكند. nWidth ميانگين درازاي فونت ، اگر صفر ارسال شود سيستم خود بهترين حالت را درنظر ميگيرد. nEscapement زاويه ميان خط پايه فونت با بردار پايه مقياس برحسب يك دهم درجه و در ويندوز 95و98 بايد با مقدار پارامتر lfOrientation يكسان باشد nOrientation زاويه ميان خط پايه فونت و محور x ها مقياس واحد برحسب 10/1 درجه ميباشد. در ويندوز 95و98 بايد با مقدار پارامتر nEscapement يكسان باشد fnWeight يك فلگ براي مقدار ضخامت فونت جهت اطلاعات بيشتر به جدول زير توجه نماييد. نوع ضخامت توضيحات FW_DONTCARE ضخامت پيش فرض FW_THIN ضخامت نازك FW_EXTRALIGHT ضخامت بسيار باريك FW_ULTRALIGHT همانند بالا FW_LIGHT ضخامت باريك FW_NORMAL ضخامت معمولي FW_REGULAR همانند بالا FW_MEDIUM ضخامت متوسط FW_SEMIBOLD كمي ضخيم FW_DEMIBOLD همانند بالا FW_BOLD ضخيم FW_EXTRABOLD ضخامت بسيار FW_ULTRABOLD همانند بالا FW_HEAVY بسيار بسيار ضخيم FW_BLACK همانند بالا fdwItalic مقدار غير صفر باشد فونت به صورت ايتاليك خواهد بود ، صفر باشد فونت معمولي است fdwUnderline مقدار غير صفر فونت با زيرخط و صفر بدون آن fdwStrikeOut مقدار غير صفر با كشيدن خط پايه و صفر بدون آن fdwCharSet يكي از فلگ هاي زير براي تعيين كاراكتر ست مورد نياز(به جدول توجه نماييد) نام كاراكتر ست توضيحات ANSI_CHARSET كاراكتر ست ANSI ARABIC_CHARSET كاراكتر ست عربي (در NTو2000) BALTIC_CHARSET كاراكتر ست بالتيك(در 95و98) CHINESEBIG5_CHARSET كاراكتر ست چيني DEFAULT_CHARSET كاراكتر ست پيش فرض EASTEUROPE_CHARSET كاراكتر ست اروپاي شرقي(در 95و98) GB2312_CHARSET كاراكتر ست GB2312 GREEK_CHARSET كاراكتر ست يوناني (در 95و98) HANGEUL_CHARSET كاراكتير ست HANDEUL HEBREW_CHARSET كاراكتر ست عبري(در NTو2000) JOHAB_CHARSET كاراكتر ست Johab(در 95و98) MAC_CHARSET كاراكتر ست MAC(در 95و98) OEM_CHARSET كاراكتر ست OEM RUSSIAN_CHARSET كاراكتر ست روسي(در 95و98) SHIFTJIS_CHARSET كاراكتر ست ShiftJis SYMBOL_CHARSET كاراكتر ست سمبول THAI_CHARSET كاراكتر ست تايلندي (در NTو2000) TURKISH_CHARSET كاراكتر ست تركيه اي(در 95و98) fdwOutPrecision اين متغير ميتواند يكي از فلگهاي زير باشد كه مقدار آن براي فونت مپر نوع فونت منطقي را مشخص ميكند.به جدول زير توجه كنيد نام توضيحات OUT_DEFAULT_PRECIS پيش فرض فونت مپر OUT_DEVICE_PRECIS انتخاب يك ديوايس فونت اگر روي سيستم شما چندين فونت هم نام وجود دارد. OUT_OUTLINE_PRECIS انتخاب يك فونت تروتايپ(TrueType) يا هر فونت توخالي ديگر(در NTو2000) OUT_RASTER_PRECIS انتخاب يك فونت از نوع رستر اگر داخل سيستم شما فونتهايي با نام مشابه باشد. OUT_STRING_PRECIS فونت رستر OUT_STROKE_PRECIS فونت برداري(Vector Font) براي ويندوز 95و98 و براي ويندوز NTو2000 بمعني فونت تروتايپ يا اوتلاين بيس ويا فونت برداري OUT_TT_ONLY_PRECIS فقط فونت تروتايپ OUT_TT_PRECIS انتخاب فونت تروتايپ اگر چندين فونت در سيستم با نام مشابه وجود دارد. fdwClipPrecision يكي از فلگ هاي زير كه وقتي استفاده ميشوند كه كاراكترهاي فونت چيده شده باشند CLIP_DEFAULT_PRECIS چيده شده بصورت پيش فرض CLIP_EMBEDDED براي فونت امبدد(Embedded) فقط خواندي استفاده ميگردد. CLIP_LH_ANGLES مسير چرخش را در دستگاه مختصات سيستم تعيين ميكند(يا درغير آن چرخش در جهت مخالف عقربه ساعت خواهد بود) CLIP_STROKE_PRECIS رستري ، برداري ، ويا تروتايپ فونت fdwQuality كيفيت فونت را با براي فونت لاجيكال با يك فونت ايده آل مقايسه ميكند(يكي از فلگ هاي زير است) ANTIALIASED_QUALITY براي ويندوز 95و98وNT4.00وبالاتر و 2000 : ANTIALIASED در صورت امكان DEFAULT_QUALITY با كيفيت پيش فرض ، نمود ظاهري فونت اهميت چنداني ندارد. DRAFT_QUALITY نمود ظاهري فونت با اهميت كم. NONANTIALIASED_QUALITY براي ويندوز 95و98وNT4.00وبالاتر و 2000 : ANTIALIASED نباشد. Windows 95, 98, NT 4.0 or later, 2000: The font is never antialiased. PROOF_QUALITY كيفيت نمايش فونت خيلي مهم است و بايد دقيقا همخواني با اتريبيوت فونت داشته باشد. fdwPitchAndFamily بصورت جدا يا تركيبي از يك *_PITCH وFF_* استفاده ميگردد هر فلگ در زير توضيح داده شده است.(FF مخفف Face Family است و به معني دسته و گروه نحوه نمايش است) DEFAULT_PITCH پيچ پيش فرض FIXED_PITCH پيچ ثابت VARIABLE_PITCH پيچ متغير FF_DECORATIVE زرق برق دار !(گروه فونت زينتي) FF_DONTCARE بدون توجه به گروه فونت FF_MODERN گروه فونت مدرن FF_ROMAN گروه فونت رومن FF_SCRIPT گروه فونت اسكريپت FF_SWISS گروه فونت سويس lpszFace نام كروه فونت مورد استفاده

ثابتهاي مورد استفاده: Const FW_DONTCARE = 0 Const FW_THIN = 100 Const FW_EXTRALIGHT = 200 Const FW_ULTRALIGHT = 200 Const FW_LIGHT = 300 Const FW_NORMAL = 400 Const FW_REGULAR = 400 Const FW_MEDIUM = 500 Const FW_SEMIBOLD = 600 Const FW_DEMIBOLD = 600 Const FW_BOLD = 700 Const FW_EXTRABOLD = 800 Const FW_ULTRABOLD = 800 Const FW_HEAVY = 900 Const FW_BLACK = 900 Const ANSI_CHARSET = 0 Const ARABIC_CHARSET = 178 Const BALTIC_CHARSET = 186 Const CHINESEBIG5_CHARSET = 136 Const DEFAULT_CHARSET = 1 Const EASTEUROPE_CHARSET = 238 Const GB2312_CHARSET = 134 Const GREEK_CHARSET = 161 Const HANGEUL_CHARSET = 129 Const HEBREW_CHARSET = 177 Const JOHAB_CHARSET = 130 Const MAC_CHARSET = 77 Const OEM_CHARSET = 255 Const RUSSIAN_CHARSET = 204 Const SHIFTJIS_CHARSET = 128 Const SYMBOL_CHARSET = 2 Const THAI_CHARSET = 222 Const TURKISH_CHARSET = 162 Const OUT_DEFAULT_PRECIS = 0 Const OUT_DEVICE_PRECIS = 5 Const OUT_OUTLINE_PRECIS = 8 Const OUT_RASTER_PRECIS = 6 Const OUT_STRING_PRECIS = 1 Const OUT_STROKE_PRECIS = 3 Const OUT_TT_ONLY_PRECIS = 7 Const OUT_TT_PRECIS = 4 Const CLIP_DEFAULT_PRECIS = 0 Const CLIP_EMBEDDED = 128 Const CLIP_LH_ANGLES = 16 Const CLIP_STROKE_PRECIS = 2 Const ANTIALIASED_QUALITY = 4 Const DEFAULT_QUALITY = 0 Const DRAFT_QUALITY = 1 Const NONANTIALIASED_QUALITY = 3 Const PROOF_QUALITY = 2 Const DEFAULT_PITCH = 0 Const FIXED_PITCH = 1 Const VARIABLE_PITCH = 2 Const FF_DECORATIVE = 80 Const FF_DONTCARE = 0 Const FF_ROMAN = 16 Const FF_SCRIPT = 64 Const FF_SWISS = 32

کتابخانه: GDI32

توابع مرتبط: CreateFontIndirect , DeleteObject , SelectObject

نکات: ---

کد نمونه:

'used with fnWeight Const FW_DONTCARE = 0 Const FW_THIN = 100 Const FW_EXTRALIGHT = 200 Const FW_LIGHT = 300 Const FW_NORMAL = 400 Const FW_MEDIUM = 500 Const FW_SEMIBOLD = 600 Const FW_BOLD = 700 Const FW_EXTRABOLD = 800 Const FW_HEAVY = 900 Const FW_BLACK = FW_HEAVY Const FW_DEMIBOLD = FW_SEMIBOLD Const FW_REGULAR = FW_NORMAL Const FW_ULTRABOLD = FW_EXTRABOLD Const FW_ULTRALIGHT = FW_EXTRALIGHT 'used with fdwCharSet Const ANSI_CHARSET = 0 Const DEFAULT_CHARSET = 1 Const SYMBOL_CHARSET = 2 Const SHIFTJIS_CHARSET = 128 Const HANGEUL_CHARSET = 129 Const CHINESEBIG5_CHARSET = 136 Const OEM_CHARSET = 255 'used with fdwOutputPrecision Const OUT_CHARACTER_PRECIS = 2 Const OUT_DEFAULT_PRECIS = 0 Const OUT_DEVICE_PRECIS = 5 'used with fdwClipPrecision Const CLIP_DEFAULT_PRECIS = 0 Const CLIP_CHARACTER_PRECIS = 1 Const CLIP_STROKE_PRECIS = 2 'used with fdwQuality Const DEFAULT_QUALITY = 0 Const DRAFT_QUALITY = 1 Const PROOF_QUALITY = 2 'used with fdwPitchAndFamily Const DEFAULT_PITCH = 0 Const FIXED_PITCH = 1 Const VARIABLE_PITCH = 2 'used with SetBkMode Const OPAQUE = 2 Const TRANSPARENT = 1 Const LOGPIXELSY = 90 Const COLOR_WINDOW = 5 Const Message = "Hello !" Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Private Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal nHeight As Long, ByVal nWidth As Long, ByVal nEscapement As Long, ByVal nOrientation As Long, ByVal fnWeight As Long, ByVal fdwItalic As Boolean, ByVal fdwUnderline As Boolean, ByVal fdwStrikeOut As Boolean, ByVal fdwCharSet As Long, ByVal fdwOutputPrecision As Long, ByVal fdwClipPrecision As Long, ByVal fdwQuality As Long, ByVal fdwPitchAndFamily As Long, ByVal lpszFace As String) As Long Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long Private Declare Function MulDiv Lib "kernel32" (ByVal nNumber As Long, ByVal nNumerator As Long, ByVal nDenominator As Long) As Long Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long Private Declare Function GetSysColorBrush Lib "user32" (ByVal nIndex As Long) As Long Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Dim mDC As Long, mBitmap As Long Private Sub Form_Click() Unload Me End Sub Private Sub Form_Load() Dim mRGN As Long, Cnt As Long, mBrush As Long, R As RECT 'Create a device context, compatible with the screen mDC = CreateCompatibleDC(GetDC(0)) 'Create a bitmap, compatible with the screen mBitmap = CreateCompatibleBitmap(GetDC(0), Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY) 'Select the bitmap nito the device context SelectObject mDC, mBitmap 'Set the bitmap's backmode to transparent SetBkMode mDC, TRANSPARENT 'Set the rectangles' values SetRect R, 0, 0, Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY 'Fill the rect with the default window-color FillRect mDC, R, GetSysColorBrush(COLOR_WINDOW) For Cnt = 0 To 350 Step 30 'Select the new font into the form's device context and delete the old font DeleteObject SelectObject(mDC, CreateMyFont(24, Cnt)) 'Print some text TextOut mDC, (Me.Width / Screen.TwipsPerPixelX) / 2, (Me.Height / Screen.TwipsPerPixelY) / 2, Message, Len(Message) Next Cnt 'Create an elliptical region mRGN = CreateEllipticRgn(0, 0, Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY) 'Set the window region SetWindowRgn Me.hWnd, mRGN, True 'delete our elliptical region DeleteObject mRGN End Sub Function CreateMyFont(nSize As Integer, nDegrees As Long) As Long 'Create a specified font CreateMyFont = CreateFont(-MulDiv(nSize, GetDeviceCaps(GetDC(0), LOGPIXELSY), 72), 0, nDegrees * 10, 0, FW_NORMAL, False, False, False, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH, "Times New Roman") End Function Private Sub Form_Paint() 'Copy the picture to the form BitBlt Me.hdc, 0, 0, Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY, mDC, 0, 0, vbSrcCopy End Sub Private Sub Form_Unload(Cancel As Integer) 'clean up DeleteDC mDC DeleteObject mBitmap End Sub

 

نام تابع: CreateFontIndirect

اعلان: Declare Function CreateFontIndirect Lib "gdi32.dll" Alias "CreateFontIndirectA" (lplf As LOGFONT) As Long


سيستم عامل: NT , 2000 , 98 , 95 , CE


توضيحات: براي ايجاد يك شي از نوع فونت مورد استفاده قرار ميگيرد.(يك فونت با استفاده از يك سري خواص يك نوشته را روي يك ديوايس ميكشد).فونتي كه توسط اين تابع ايجاد ميگردد حتما بايد خواصش با ساختار فونت لاجيكال تعريف شده همخوان باشد. پس از پايان برنامه استفاده كننده از فونت بايد با استفاده از تابع DeleteObject فونت حذف شود.


مقدار بازگشتي: اگر تابع با اشكال مواجه شود مقدار صفر برميگرداند(در ويندوز NTو2000 بااستفاده از تابعGetLastError نوع خطا مشخص ميشود)اگر موفقيت آميز باشد هندل فونت ايجاد شده را برميگرداند.


پارامترها: lplf يك پارامتر از نوع ساختاريLOGFONT كه خواص و خصوصيات فونت مورد نياز در آن قرار دارد.


ثابتهاي مورد استفاده: ---


کتابخانه: GDI32


توابع مرتبط: CreateFont , SelectObject


نکات: ---


کد نمونه:

'In general section Private Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long Private Const LF_FACESIZE = 32 Private Type LOGFONT lfHeight As Long lfWidth As Long lfEscapement As Long lfOrientation As Long lfWeight As Long lfItalic As Byte lfUnderline As Byte lfStrikeOut As Byte lfCharSet As Byte lfOutPrecision As Byte lfClipPrecision As Byte lfQuality As Byte lfPitchAndFamily As Byte lfFaceName(LF_FACESIZE) As Byte End Type 'In form Private Sub Form_Load() Dim RotateMe As LOGFONT 'Set graphic-mode to 'persistent graphic' Me.AutoRedraw = True 'Rotate degrees Deg = 270 'Size (in points) Size = 20 'Set the rotation degree RotateMe.lfEscapement = Deg * 10 'Set the height of the font RotateMe.lfHeight = (Size * -20) / Screen.TwipsPerPixelY 'Create the font rFont = CreateFontIndirect(RotateMe) 'Select the font n the Form's device context Curent = SelectObject(Me.hdc, rFont) 'Print some text ... Me.CurrentX = 500 Me.CurrentY = 200 Me.Print ":-)" End Sub

 

نام تابع: EnumFontFamilies

اعلان: Declare Function EnumFontFamilies Lib "gdi32.dll" Alias "EnumFontFamiliesA" (ByVal hdc As Long, ByVal lpszFamily As Any, ByVal lpEnumFontFamProc As Long, ByVal lParam As Long) As Long


سيستم عامل: NT , 2000 , 98 , 95


توضيحات: اين تابع همه فونتهاي موجود جهت استفاده در يك ديوايس را ميشمارد. يك ويژگي اين تابع آن است كه ميتواند فونتهاي هم نوع را نيز بشمارد بعد شمارش فونت ها (تك تك ) تابع خاص CallBack را فراخاني كرده و پردازش ميكند.


مقدار بازگشتي: مقدار برگشتي اين تابع مقداري است كه آخرين بار كه تابع CallBack برگردانده است.


پارامترها: hdc هندل يك كنتكست ديوايس كه ميخواهيم فونت هاي آن را بشماريم. lpszFamily نام يك نوع فونت از فونتهاي مورد استفاده اگر بخواهيد تك تك فونت هاي موجود را بدون توجه به نوع آن بشماريد بايد مقدار صفر را قراردهيد.(توجه كنيد در ويژوال بيسيك بجاي مقدار صفر بايد از تابع CLng(0) استفاده نماييد. lpEnumFontFamProc يك اشاره گر به تابع EnumFontFamProc كه به نام تابع CallBack شناخته ميشود. كه ميتوان بااستفاده از اين تابع اطلاعاتي راجع به هر فونت بدست آورد. lParam اطلاعات اضافي ديگري كه به تابعي كه آدرس آن در lpEnumFontFamProc قرار دارد برگردانده ميشود.


ثابتهاي مورد استفاده: ---


کتابخانه: GDI32


توابع مرتبط: EnumFontFamiliesEx


نکات: ---


کد نمونه:

'In a module Public Const NTM_REGULAR = &H40& Public Const NTM_BOLD = &H20& Public Const NTM_ITALIC = &H1& Public Const TMPF_FIXED_PITCH = &H1 Public Const TMPF_VECTOR = &H2 Public Const TMPF_DEVICE = &H8 Public Const TMPF_TRUETYPE = &H4 Public Const ELF_VERSION = 0 Public Const ELF_CULTURE_LATIN = 0 Public Const RASTER_FONTTYPE = &H1 Public Const DEVICE_FONTTYPE = &H2 Public Const TRUETYPE_FONTTYPE = &H4 Public Const LF_FACESIZE = 32 Public Const LF_FULLFACESIZE = 64 Type LOGFONT lfHeight As Long lfWidth As Long lfEscapement As Long lfOrientation As Long lfWeight As Long lfItalic As Byte lfUnderline As Byte lfStrikeOut As Byte lfCharSet As Byte lfOutPrecision As Byte lfClipPrecision As Byte lfQuality As Byte lfPitchAndFamily As Byte lfFaceName(LF_FACESIZE) As Byte End Type Type NEWTEXTMETRIC tmHeight As Long tmAscent As Long tmDescent As Long tmInternalLeading As Long tmExternalLeading As Long tmAveCharWidth As Long tmMaxCharWidth As Long tmWeight As Long tmOverhang As Long tmDigitizedAspectX As Long tmDigitizedAspectY As Long tmFirstChar As Byte tmLastChar As Byte tmDefaultChar As Byte tmBreakChar As Byte tmItalic As Byte tmUnderlined As Byte tmStruckOut As Byte tmPitchAndFamily As Byte tmCharSet As Byte ntmFlags As Long ntmSizeEM As Long ntmCellHeight As Long ntmAveWidth As Long End Type Declare Function EnumFontFamilies Lib "gdi32" Alias "EnumFontFamiliesA" (ByVal hDC As Long, ByVal lpszFamily As String, ByVal lpEnumFontFamProc As Long, LParam As Any) As Long Function EnumFontFamProc(lpNLF As LOGFONT, lpNTM As NEWTEXTMETRIC, ByVal FontType As Long, LParam As Long) As Long Dim FaceName As String 'convert the returned string to Unicode FaceName = StrConv(lpNLF.lfFaceName, vbUnicode) 'print the form on Form1 Form1.Print Left$(FaceName, InStr(FaceName, vbNullChar) - 1) 'continue enumeration EnumFontFamProc = 1 End Function 'In a form Private Sub Form_Load() Dim hDC As Long 'set graphics mode to persistent Me.AutoRedraw = True 'enumerates the fonts EnumFontFamilies Me.hDC, vbNullString, AddressOf EnumFontFamProc, ByVal 0& End Sub

 

نام تابع: EnumFontFamiliesEx

اعلان: Declare Function EnumFontFamiliesEx Lib "gdi32.dll" Alias "EnumFontFamiliesExA" (ByVal hdc As Long, lpLogfont As LOGFONT, ByVal lpEnumFontFamExProc As Long, ByVal lParam As Long, ByVal dwFlags As Long) As Long


سيستم عامل: NT , 2000 , 98 , 95


توضيحات: همه فونتهاي موجود در يك ديوايس را جهت استفاده ميشمارد. اين تابع همه فونتهاي با وجه مشترك يك كاراكتر ست و يا سبك خاص( يا همه فونتها را ) ميشمارد.رفتار اين تابع براي دو فونت مشابه ولي از دو كاراكتر ست متفاوت (براي مثال فونت Times New Roman از كاراكتر ست انسي(ANSI) و همين فونت از كاراكتر ست سيريليك(Cyrillic) ) متفاوت است. البته اين نوع فونتهارا نميتوان با يك دستور مشخص شمارش نمود.


مقدار بازگشتي: مقدار برگشتي اين تابع مقداري است كه آخرين بار كه تابع CallBack برگردانده است.


پارامترها: hdc هندل يك ديوايس كنتكست كه ميخواهيم فونتهاي آن را شمارش كنيم. lpLogfont از نوع LogFont ميباشد و مشخصه نوع كاراكترست يا نوع فونت (و يا هيچ كدام) در آن قرا دارد. مقدار متغير lfCharset از LogFont مشخص كننده نوع كاراكتر ست مورد نياز است كه ميتواند نام يك كاراكتر ست يا مقدار DEFAULT_CHARSET و بدون مقدار باشد. اگر بخواهيم براساس نوع فونت باشد مقدار به lfFaceName ميدهيم و اگر بخواهيم بر اساس پيچ باشد به متغير lfPitchAndFamily مقدار ميدهيم. lpEnumFontFamExProc يك اشاره گر به يك تابع از نوع CallBack با نام EnumFontFamExProc . lParam يك متغير اضافي كه ميتواند به تابه CallBack ارسال گردد. dwFlags فعلا غير فعال است و بايد صفر باشد.


ثابتهاي مورد استفاده: ---


کتابخانه: GDI32


توابع مرتبط: EnumFontFamilies


نکات: ---


کد نمونه:

'In a module Public Const NTM_REGULAR = &H40& Public Const NTM_BOLD = &H20& Public Const NTM_ITALIC = &H1& Public Const TMPF_FIXED_PITCH = &H1 Public Const TMPF_VECTOR = &H2 Public Const TMPF_DEVICE = &H8 Public Const TMPF_TRUETYPE = &H4 Public Const ELF_VERSION = 0 Public Const ELF_CULTURE_LATIN = 0 Public Const RASTER_FONTTYPE = &H1 Public Const DEVICE_FONTTYPE = &H2 Public Const TRUETYPE_FONTTYPE = &H4 Public Const LF_FACESIZE = 32 Public Const LF_FULLFACESIZE = 64 Type LOGFONT lfHeight As Long lfWidth As Long lfEscapement As Long lfOrientation As Long lfWeight As Long lfItalic As Byte lfUnderline As Byte lfStrikeOut As Byte lfCharSet As Byte lfOutPrecision As Byte lfClipPrecision As Byte lfQuality As Byte lfPitchAndFamily As Byte lfFaceName(LF_FACESIZE) As Byte End Type Type NEWTEXTMETRIC tmHeight As Long tmAscent As Long tmDescent As Long tmInternalLeading As Long tmExternalLeading As Long tmAveCharWidth As Long tmMaxCharWidth As Long tmWeight As Long tmOverhang As Long tmDigitizedAspectX As Long tmDigitizedAspectY As Long tmFirstChar As Byte tmLastChar As Byte tmDefaultChar As Byte tmBreakChar As Byte tmItalic As Byte tmUnderlined As Byte tmStruckOut As Byte tmPitchAndFamily As Byte tmCharSet As Byte ntmFlags As Long ntmSizeEM As Long ntmCellHeight As Long ntmAveWidth As Long End Type Declare Function EnumFontFamiliesEx Lib "gdi32" Alias "EnumFontFamiliesExA" (ByVal hdc As Long, lpLogFont As LOGFONT, ByVal lpEnumFontProc As Long, ByVal LParam As Long, ByVal dw As Long) As Long Function EnumFontFamProc(lpNLF As LOGFONT, lpNTM As NEWTEXTMETRIC, ByVal FontType As Long, LParam As Long) As Long Dim FaceName As String 'convert the returned string to Unicode FaceName = StrConv(lpNLF.lfFaceName, vbUnicode) 'print the form on Form1 Form1.Print Left$(FaceName, InStr(FaceName, vbNullChar) - 1) 'continue enumeration EnumFontFamProc = 1 End Function 'In a form Private Sub Form_Load() Dim LF As LOGFONT 'set graphics mode to persistent Me.AutoRedraw = True 'enumerates the fonts EnumFontFamiliesEx Me.hdc, LF, AddressOf EnumFontFamProc, ByVal 0&, 0 End Sub