Search Tools Links Login

Dialog - font - using API


Visual Basic 6, or VB Classic

The following is reprinted for archival purposes from Gary Beene's Information Center, with permission from Mr. Beene himself.


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
Private Type ChooseFont
   lStructSize As Long
   hwndOwner As Long          ' caller's window handle
   hdc As Long                ' printer DC/IC or NULL
   lpLogFont As Long            ' LOGFONT          ' ptr. to a LOGFONT struct
   iPointSize As Long          ' 10 * size in points of selected font
   flags As Long               ' enum. type flags
   rgbColors As Long          ' returned text color
   lCustData As Long          ' data passed to hook fn.
   lpfnHook As Long            ' ptr. to hook function
   lpTemplateName As String      ' custom template name
   hInstance As Long          ' instance handle of.EXE that
                                  '    contains cust. dlg. template
   lpszStyle As String          ' return the style field here
                                  ' must be LF_FACESIZE or bigger
   nFontType As Integer          ' same value reported to the EnumFonts
                                  '    call back with the extra FONTTYPE_
                                  '    bits added
   MISSING_ALIGNMENT As Integer
   nSizeMin As Long            ' minimum pt size allowed &
   nSizeMax As Long            ' max pt size allowed if
                                  '    CF_LIMITSIZE is used
End Type
Private Declare Function ChooseFont Lib "comdlg32.dll" Alias "ChooseFontA" (pChoosefont As ChooseFont) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long )
Private Declare Function GlobalAlloc Lib "kernel32" ( ByVal wFlags As Long , ByVal dwBytes As Long ) As Long
Private Declare Function GlobalFree Lib "kernel32" ( ByVal hMem As Long ) As Long

Private Const GMEM_FIXED = &H0
Private Const GMEM_ZEROINIT = &H40
Private Const GPTR = (GMEM_FIXED Or GMEM_ZEROINIT)
Private Const CF_SCREENFONTS = &H1
Private Const CF_PRINTERFONTS = &H2
Private Const CF_BOTH = (CF_SCREENFONTS Or CF_PRINTERFONTS)
Private Const CF_SHOWHELP = &H4&
Private Const CF_ENABLEHOOK = &H8&
Private Const CF_ENABLETEMPLATE = &H10&
Private Const CF_ENABLETEMPLATEHANDLE = &H20&
Private Const CF_INITTOLOGFONTSTRUCT = &H40&
Private Const CF_USESTYLE = &H80&
Private Const CF_EFFECTS = &H100&
Private Const CF_APPLY = &H200&
Private Const CF_ANSIONLY = &H400&
Private Const CF_SCRIPTSONLY = CF_ANSIONLY
Private Const CF_NOVECTORFONTS = &H800&
Private Const CF_NOOEMFONTS = CF_NOVECTORFONTS
Private Const CF_NOSIMULATIONS = &H1000&
Private Const CF_LIMITSIZE = &H2000&
Private Const CF_FIXEDPITCHONLY = &H4000&
Private Const CF_WYSIWYG = &H8000 ' must also have CF_SCREENFONTS CF_PRINTERFONTS
Private Const CF_FORCEFONTEXIST = &H10000
Private Const CF_SCALABLEONLY = &H20000
Private Const CF_TTONLY = &H40000
Private Const CF_NOFACESEL = &H80000
Private Const CF_NOSTYLESEL = &H100000
Private Const CF_NOSIZESEL = &H200000
Private Const CF_SELECTSCRIPT = &H400000
Private Const CF_NOSCRIPTSEL = &H800000
Private Const CF_NOVERTFONTS = &H1000000


Sub ChooseFont ()
    Dim CF As ChooseFont, hMem As Long , LF As LOGFONT, aFontName As String
   hMem = GlobalAlloc(GPTR, Len(LF))
   CF.hInstance = App.hInstance
   CF.hwndOwner = hWnd
   CF.lpLogFont = hMem
   CF.lStructSize = Len(CF)
   CF.flags = CF_BOTH
    If ChooseFont(CF) Then
       CopyMemory LF, ByVal hMem, Len(LF)
       aFontName = Space$(LF_FACESIZE)
       CopyMemory ByVal aFontName, LF.lfFaceName(0), LF_FACESIZE
       With Picture1.Font
          .Name = CString(aFontName)
          .Bold = LF.lfWeight
          .Italic = LF.lfItalic
          .Size = CF.iPointSize / 10
          .Underline = LF.lfUnderline
          .Charset = LF.lfCharSet
          .Strikethrough = LF.lfStrikeOut
       End With
       Picture1.Cls
       Picture1_Paint
    End If
   GlobalFree hMem

End Sub

Private Function CString(aStr As String ) As String
   CString = ""
    Dim k As Long
   k = InStr(aStr, Chr $(0))
    If k Then
       CString = Left$(aStr, k - 1)
    End If
End Function

About this post

Posted: 2021-02-11
By: ArchiveBot
Viewed: 245 times

Categories

Visual Basic 6

Attachments

No attachments for this post


Loading Comments ...

Comments

No comments have been added for this post.

You must be logged in to make a comment.