Announcement

Collapse

Forum Guidelines

This forum is for finished source code that is working properly. If you have questions about this or any other source code, please post it in one of the Discussion Forums, not here.
See more
See less

Choose a Font

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Choose a Font

    Here's an Include for Choosing/Setting fonts some may find useful

    '
    Code:
     
    'Example call -
       'ans = Font_Choose(fn$, fnum, fnum1, Row, Col)
       '  If ans = 1 Then 'font change made
       '     'Do stuff here       
       '  end if
    
    '***************************************************
    '****** Choose Font ********************************
    '***************************************************
    '
    'Type CHOOSEFONTAPI
    '    lStructSize    As Dword
    '    hWndOwner      As Dword
    '    hDC            As Dword
    '    lpLogFont      As LOGFONT Ptr
    '    iPointSize     As Long
    '    Flags          As Dword
    '    rgbColors      As Dword
    '    lCustData      As Long
    '    lpfnHook       As Dword
    '    lpTemplateName As Asciiz Ptr
    '    hInstance      As Dword
    '    lpszStyle      As Asciiz Ptr
    '    nFontType      As Word         'size?
    '    Alignment      As Word
    '    nSizeMin       As Long
    '    nSizeMax       As Long
    'End Type
    '
    '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 As Asciiz * %LF_FACESIZE
    'End Type
    'End Type
    'Michael Matthias via Poffs  
    'http://www.powerbasic.com/support/pbforums/showthread.php?p=294981#post294981
    '
    'Send these values for current Font and set g_Font_Col & g_Font_Row to where
    ' you want the Font Dialog to display
    'Example call -
       'ans = Font_Choose(fn$, fnum, fnum1, Row, Col)
       '  If ans = 1 Then 'font change made
       '
    Function Font_Choose(Font_Name$, Font_Size&, Font_Weight&, Font_Row&, Font_Col&) As Long
    '
     Local cf As ChooseFontApi       ' comdlg32 
     Local lf As LogFont
       cf.lstructSize  = SizeOf(cf)
       cf.flags        = %CF_EFFECTS Or _
                         %CF_SCREENFONTS Or _ 'screen fonts only
                         %CF_INITTOLOGFONTSTRUCT 'to use to pass values
    '
      ' -----  to enable the hook procedure--------------
      cf.flags        = cf.flags Or %CF_ENABLEHOOK 'add hook to flags
      cf.lpfnhook    = CodePtr(Font_CfHookPRoc)
     ' --- to use available 'lparam' to hold desired row and column ----
      ' since neither value will exceed 65536, we'll just pack this info
      ' into the available (LONG) integer                         
      cf.lCustData   =  MakLng(FONT_COL&, FONT_ROW&) 
       'try this myself
      cf.nSizeMin = Font_Col&
      cf.nSizeMax  = Font_Row&
      ' -------------------------------------------------  
    '
      Local hDC As Long 'ala Dave Biggs
      Local CyPixels As Long 
        hDC = GetDC(%HWND_DESKTOP)
         CyPixels  = GetDeviceCaps(hDC, %LOGPIXELSY)
         ReleaseDC %HWND_DESKTOP, hDC
         Font_Size& = 0 - (Font_Size& * CyPixels) / 72 'to send to font control
     '
        'For display in Font Control
       If Font_Weight& = 0 Then 
          Font_Weight& = 400 'normal
         Else
          Font_Weight& = 700 'bold
       End If   
    '   
      'send to initialize
       cf.lpLogFont    = VarPtr(lf) 'to pass values
       lf.lfFaceName = Trim$(Font_Name$) & $Nul 'Works
       lf.lfWeight = Font_Weight& 
       lf.lfHeight = Font_Size&
    '
       Function = ChooseFont(cf)   'call Font Dialog
    '   
       'Returned values
       Font_Name$ = lf.lfFaceName  
       Font_Size& = cf.iPointSize / 10'seems to work
       Font_Weight& = lf.lfWeight
    '
          ' for PB Font use
       If Font_Weight& < 401 Then 
          Font_Weight& = 0 'normal
         Else
          Font_Weight& = 1 'bold
       End If   
    End Function
    '''''''''''''''''''''''''''''''''''''''''''''''''''
    'Return Value
    'If the hook procedure returns zero, the default dialog box procedure processes the message.
    'If the hook procedure returns a nonzero value, the default dialog box procedure ignores the message.
    Function  Font_CfHookPRoc (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
      Local pCF   As ChooseFontAPI Ptr, iRow As Long, iCol As Long
    '
        Select Case As Long   wMsg
             Case %WM_INITDIALOG
                 pCF    = lparam     ' on WM_INITDIALOG, lparam is PTR to CHOOSEFONT structure
                                     ' with which the ChoosefFont() function was called
                 'iRow = LoWrd(@pCF.lcustdata)   ' unpack row and column....
                 'iCol = HiWrd(@pCF.lcustdata)
                  'my Try
                 iRow = @Pcf.nSizeMin 
                 iCol = @Pcf.nSizeMax
     '
                Local pI As Integer Ptr 
                  pCF = lparam
                  pI  = VarPtr (@pCF.lcustdata) 
                  iRow = @pi
                  Incr  pI 
                  iCol = @pI
      '           
                  SetWindowPos  hWnd, %HWND_TOP, iRow, icol, %Null, %Null, %SWP_NOSIZE   ' also OK
        End Select
    '    
        Function = 0  ' allow the rest of the default processing
    '    
    End Function
    '
    '
    Function Font_Center_Dialog Alias "Font_Center_Dialog" (ByVal hWnd As Long) Export As Long
       ' centers given Window on the desktop and forces to top
       Local rDW As RECT, rDlg As RECT
       GetClientRect GetDesktopWindow, Rdw
       GetWindowRect hWnd, rDlg
       SetWindowPos hWnd,_
            %HWND_TOP,_
           ((rDW.nright - rDW.nleft + 1) - (rDlg.nright - rDlg.nleft +1)) \2, _
           ((rDw.nBottom - rDW.nTop + 1) - (rDlg.nbottom - rDlg.nTop + 1)) \ 2, _
           0&,_
           0&, _
           %SWP_NOSIZE
    End Function
    '***************************************************
    '***************************************************
    '**********************************************************************
    '
    It's a pretty day. I hope you enjoy it.

    Gösta

    JWAM: (Quit Smoking): http://www.SwedesDock.com/smoking
    LDN - A Miracle Drug: http://www.SwedesDock.com/LDN/
Working...
X