home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / Font_Combo2109744152008.psc / FontCombo.ctl < prev    next >
Text File  |  2008-04-15  |  54KB  |  1,852 lines

  1. VERSION 5.00
  2. Begin VB.UserControl FontCombo 
  3.    AutoRedraw      =   -1  'True
  4.    ClientHeight    =   4230
  5.    ClientLeft      =   0
  6.    ClientTop       =   0
  7.    ClientWidth     =   5760
  8.    ForeColor       =   &H80000008&
  9.    ScaleHeight     =   282
  10.    ScaleMode       =   3  'Pixel
  11.    ScaleWidth      =   384
  12.    ToolboxBitmap   =   "FontCombo.ctx":0000
  13.    Begin VB.Timer TmrAutoText 
  14.       Enabled         =   0   'False
  15.       Left            =   3840
  16.       Top             =   90
  17.    End
  18.    Begin VB.Timer TmrFocus 
  19.       Enabled         =   0   'False
  20.       Interval        =   100
  21.       Left            =   3330
  22.       Top             =   90
  23.    End
  24.    Begin VB.PictureBox PicPreview 
  25.       Appearance      =   0  'Flat
  26.       AutoRedraw      =   -1  'True
  27.       BackColor       =   &H80000005&
  28.       ForeColor       =   &H80000008&
  29.       Height          =   885
  30.       Left            =   3330
  31.       ScaleHeight     =   57
  32.       ScaleMode       =   3  'Pixel
  33.       ScaleWidth      =   147
  34.       TabIndex        =   1
  35.       TabStop         =   0   'False
  36.       Top             =   810
  37.       Visible         =   0   'False
  38.       Width           =   2235
  39.    End
  40.    Begin VB.PictureBox PicList 
  41.       Appearance      =   0  'Flat
  42.       AutoRedraw      =   -1  'True
  43.       BackColor       =   &H80000005&
  44.       ForeColor       =   &H80000008&
  45.       Height          =   3045
  46.       Left            =   0
  47.       ScaleHeight     =   201
  48.       ScaleMode       =   3  'Pixel
  49.       ScaleWidth      =   217
  50.       TabIndex        =   0
  51.       TabStop         =   0   'False
  52.       Top             =   780
  53.       Visible         =   0   'False
  54.       Width           =   3285
  55.       Begin VB.VScrollBar VScroll1 
  56.          CausesValidation=   0   'False
  57.          Height          =   2595
  58.          Left            =   2760
  59.          TabIndex        =   2
  60.          TabStop         =   0   'False
  61.          Top             =   120
  62.          Width           =   240
  63.       End
  64.       Begin VB.Shape SelBox 
  65.          BackColor       =   &H8000000D&
  66.          BackStyle       =   1  'Opaque
  67.          BorderStyle     =   0  'Transparent
  68.          DrawMode        =   14  'Copy Pen
  69.          FillColor       =   &H8000000D&
  70.          Height          =   285
  71.          Left            =   0
  72.          Top             =   600
  73.          Width           =   2565
  74.       End
  75.    End
  76.    Begin VB.Timer TmrOver 
  77.       Enabled         =   0   'False
  78.       Interval        =   100
  79.       Left            =   2820
  80.       Top             =   90
  81.    End
  82.    Begin VB.Shape FocusBox 
  83.       BackColor       =   &H8000000D&
  84.       BackStyle       =   1  'Opaque
  85.       BorderStyle     =   0  'Transparent
  86.       DrawMode        =   14  'Copy Pen
  87.       FillColor       =   &H8000000D&
  88.       Height          =   285
  89.       Left            =   0
  90.       Top             =   30
  91.       Visible         =   0   'False
  92.       Width           =   2565
  93.    End
  94. End
  95. Attribute VB_Name = "FontCombo"
  96. Attribute VB_GlobalNameSpace = False
  97. Attribute VB_Creatable = True
  98. Attribute VB_PredeclaredId = False
  99. Attribute VB_Exposed = True
  100. Option Explicit
  101.  
  102. Dim mEnabled As Boolean
  103. Dim mBorderStyle As CfBdrStyle
  104. Dim mSorted As Boolean
  105. Dim inRct As Boolean
  106. Dim tPos As Integer
  107. Dim mButtonBackColor As Long
  108. Dim mButtonForeColor As Long
  109. Dim mButtonOverColor As Long
  110. Dim mButtonBorderStyle As CfBdrStyle
  111. Dim mShowFocus As Boolean
  112.  
  113. Private mListFont() As String
  114. Private mListCount As Integer
  115. Private mListPos As Integer
  116.  
  117. Private mUsedList() As String
  118. Private mUsedCount As Integer
  119. Private mUsedBackColor As Long
  120. Private mUsedForeColor As Long
  121.  
  122. Private mRecent() As tpRecents
  123. Private mRecentCount As Integer
  124. Private mRecentMax As Integer
  125. Private mRecentBackColor As Long
  126. Private mRecentForeColor As Long
  127.  
  128. Private mPreviewText As String
  129. Private mShowPreview As Boolean
  130. Private mShowFontName As Boolean
  131. Private mPreviewSize As Integer
  132. Private mShowFontInCombo As Boolean
  133. Private mComboFontCount As Integer
  134. Private mComboFontSize As Integer
  135. Private mComboFontBold As Boolean
  136. Private mComboFontItalic As Boolean
  137. Private mComboWidth As Single
  138. Private mForeColor As Long
  139. Private mBackColor As Long
  140. Private mComboForeColor As Long
  141. Private mComboBackColor As Long
  142. Private mComboSelectColor As Long
  143. Private mUseMouseWheel As Boolean
  144. Private mAutoText As String
  145.  
  146. Private CloseMe As Boolean
  147.  
  148. Dim doNothing As Boolean
  149. Dim fList() As tpRecents
  150. Dim fPos As Integer
  151. Private bCancel As Boolean
  152.  
  153. Dim Resultat As Long
  154. Dim Ident As Long
  155. Dim Donnee As String
  156. Dim TailleBuffer As Long
  157.  
  158. Dim Btn As CfRECT
  159. Dim uRct As CfRECT
  160.  
  161. Private MouseCoords As CfPOINTAPI
  162.  
  163. Dim mXPStyle As Boolean
  164.  
  165. Private Declare Function CloseThemeData Lib "uxtheme.dll" (ByVal hTheme As Long) As Long
  166. Private Declare Function DrawThemeBackground Lib "uxtheme.dll" (ByVal hTheme As Long, ByVal lhDC As Long, ByVal iPartId As Long, ByVal iStateId As Long, pRect As CfRECT, pClipRect As CfRECT) As Long
  167. Private Declare Function OpenThemeData Lib "uxtheme.dll" (ByVal hWnd As Long, ByVal pszClassList As Long) As Long
  168.  
  169. Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
  170. Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As CfRECT) As Long
  171. Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
  172. Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
  173. Private Declare Function GetFocus Lib "user32.dll" () As Long
  174. Private Declare Function GetCursorPos Lib "user32" (lpPoint As CfPOINTAPI) As Long
  175. Private Declare Function DrawEdge Lib "user32" (ByVal hDC As Long, Qrc As CfRECT, ByVal Edge As CfBdrStyle, ByVal grfFlags As CfEdgeStyle) As Long
  176. Private Declare Function SetRect Lib "user32.dll" (ByRef lpRect As CfRECT, ByVal rLeft As Long, ByVal rTop As Long, ByVal rRight As Long, ByVal rBottom As Long) As Long
  177. Private Declare Function FillRect Lib "user32.dll" (ByVal hDC As Long, ByRef lpRect As CfRECT, ByVal hBrush As Long) As Long
  178. Private Declare Function FrameRect Lib "user32.dll" (ByVal hDC As Long, ByRef lpRect As CfRECT, ByVal hBrush As Long) As Long
  179. Private Declare Function CreateSolidBrush Lib "gdi32.dll" (ByVal crColor As Long) As Long
  180. Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long
  181. Private Declare Function PtInRect Lib "user32.dll" (ByRef lpRect As CfRECT, ByVal X As Long, ByVal Y As Long) As Long
  182. Private Declare Function TranslateColor Lib "OLEPRO32.DLL" Alias "OleTranslateColor" (ByVal clr As OLE_COLOR, ByVal palet As Long, col As Long) As Long
  183. Private Declare Function SetPixel Lib "gdi32.dll" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
  184. Private Declare Function DrawText Lib "user32.dll" Alias "DrawTextA" (ByVal hDC As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As CfRECT, ByVal wFormat As Long) As Long
  185. Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal lByteLen As Long)
  186. Private Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg As tMSG, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long) As Long
  187. Private Declare Function TranslateMessage Lib "user32" (lpMsg As tMSG) As Long
  188. Private Declare Function DispatchMessage Lib "user32" Alias "DispatchMessageA" (lpMsg As tMSG) As Long
  189.  
  190. Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  191. Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hkey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
  192. Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hkey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
  193.  
  194. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  195.  
  196. Private Const HWND_TOP As Long = 0
  197. Private Const HWND_BOTTOM As Long = 1
  198. Private Const HWND_TOPMOST = -1
  199. Private Const HWND_NOTOPMOST = -2
  200. Private Const SWP_NOACTIVATE = &H10
  201. Private Const SWP_SHOWWINDOW = &H40
  202. Private Const SWP_FRAMECHANGED As Long = &H20
  203. Private Const GWL_EXSTYLE = (-20)
  204. Private Const WS_EX_TOOLWINDOW = &H80
  205. Private Const DT_BOTTOM = &H8
  206. Private Const DT_CALCRECT = &H400
  207. Private Const DT_CENTER = &H1
  208. Private Const DT_EXPANDTABS = &H40
  209. Private Const DT_EXTERNALLEADING = &H200
  210. Private Const DT_LEFT = &H0
  211. Private Const DT_NOCLIP = &H100
  212. Private Const DT_NOPREFIX = &H800
  213. Private Const DT_RIGHT = &H2
  214. Private Const DT_SINGLELINE = &H20
  215. Private Const DT_TABSTOP = &H80
  216. Private Const DT_TOP = &H0
  217. Private Const DT_VCENTER = &H4
  218. Private Const DT_WORDBREAK = &H10
  219. Private Const DT_WORD_ELLIPSIS As Long = &H40000
  220. Private Const ERROR_SUCCESS = 0&
  221. Private Const WM_SETFOCUS As Long = &H7
  222. Private Const WM_MOUSEWHEEL = 522
  223. Private Const PM_REMOVE = &H1
  224.  
  225. Public Enum CfBdrStyle
  226.     sNone = 0
  227.     sRaised = &H1 Or &H4
  228.     sSunken = &H2 Or &H8
  229.     sBump = &H1 Or &H8
  230.     sEtched = &H2 Or &H4
  231.     sSmoothRaised = &H4
  232.     sSmoothSunken = &H2
  233. End Enum
  234.  
  235. Public Enum CfEdgeStyle
  236.     edgeAll = &HF
  237.     edgeLeft = &H2
  238.     edgeTop = &H4
  239.     edgeRight = &H1
  240.     edgeBottom = &H8
  241. End Enum
  242.  
  243. Public Enum HkeyLoc2
  244.     HKEY_CLASSES_ROOT = &H80000000
  245.     HKEY_CURRENT_USER = &H80000001
  246.     HKEY_LOCAL_MACHINE = &H80000002
  247.     HKEY_USERS = &H80000003
  248.     HKEY_DYN_DATA = &H80000004
  249. End Enum
  250.  
  251. Private Enum eBtnState
  252.     bUp = 0
  253.     bOver = 1
  254.     bDown = 2
  255. End Enum
  256.  
  257. Private Enum sTxtPosition
  258.     TopLeft = 0
  259.     TopCenter = 1
  260.     TopRight = 2
  261.     MiddleLeft = 3
  262.     MiddleCenter = 4
  263.     MiddleRight = 5
  264.     BottomLeft = 6
  265.     BottomCenter = 7
  266.     BottomRight = 8
  267. End Enum
  268.  
  269. Private Enum HkeyLoc
  270.     HKEY_CLASSES_ROOT = &H80000000
  271.     HKEY_CURRENT_USER = &H80000001
  272.     HKEY_LOCAL_MACHINE = &H80000002
  273.     HKEY_USERS = &H80000003
  274.     HKEY_DYN_DATA = &H80000004
  275. End Enum
  276.  
  277. Private Type CfRECT
  278.     Left As Long
  279.     Top As Long
  280.     Right As Long
  281.     Bottom As Long
  282. End Type
  283.  
  284. Private Type tpRecents
  285.     fName As String
  286.     fIndex As String
  287.     fRecent As Boolean
  288. End Type
  289.  
  290. Private Type CfPOINTAPI
  291.     X As Long
  292.     Y As Long
  293. End Type
  294.  
  295. Private Type tMSG
  296.     hWnd As Long
  297.     nMsg As Long
  298.     wParam As Long
  299.     lParam As Long
  300.     time As Long
  301.     pt As CfPOINTAPI
  302. End Type
  303.  
  304. Private Msg As tMSG
  305.  
  306. Public Event SelectedFontChanged(NewFontName As String)
  307. Public Event Click()
  308. Public Event DblClick()
  309. Public Event KeyDown(KeyCode As Integer, Shift As Integer)
  310. Public Event KeyPress(KeyAscii As Integer)
  311. Public Event KeyUp(KeyCode As Integer, Shift As Integer)
  312. Public Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  313. Public Event MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  314. Public Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  315. Public Event FontNotFound(FontName As String)
  316.  
  317. Public Function FontExist(Font2Find As String, Optional StartPos As Integer = 0) As Integer
  318. Dim I As Integer
  319.  
  320. FontExist = -1
  321.  
  322. For I = StartPos To mListCount
  323.     If LCase(mListFont(I)) Like LCase(Font2Find) Then
  324.     FontExist = I
  325.     Exit For
  326.     End If
  327. Next I
  328. End Function
  329.  
  330. Private Function DrawTheme(sClass As String, ByVal iPart As Long, ByVal iState As Long, rtRect As CfRECT) As Boolean
  331. Dim hTheme  As Long
  332. Dim lResult As Long
  333.  
  334. On Error GoTo NoXP
  335.  
  336. hTheme = OpenThemeData(UserControl.hWnd, StrPtr(sClass))
  337.  
  338. If (hTheme) Then
  339. lResult = DrawThemeBackground(hTheme, UserControl.hDC, iPart, iState, rtRect, rtRect)
  340. DrawTheme = IIf(lResult, False, True)
  341. Else
  342. DrawTheme = False
  343. End If
  344.  
  345. Call CloseThemeData(hTheme)
  346. Exit Function
  347.  
  348. NoXP:
  349. DrawTheme = False
  350. End Function
  351.  
  352. Public Property Get ButtonForeColor() As OLE_COLOR
  353. ButtonForeColor = mButtonForeColor
  354. End Property
  355.  
  356. Public Property Get ListIndex() As Integer
  357. Attribute ListIndex.VB_MemberFlags = "400"
  358. ListIndex = mListPos
  359. End Property
  360.  
  361. Public Property Let ListIndex(ByVal vNewValue As Integer)
  362. mListPos = vNewValue
  363. End Property
  364.  
  365. Public Property Get ListCount() As Integer
  366. Attribute ListCount.VB_MemberFlags = "400"
  367. ListCount = mListCount
  368. End Property
  369.  
  370. Private Sub PicList_KeyDown(KeyCode As Integer, Shift As Integer)
  371. UserControl_KeyDown KeyCode, Shift
  372. End Sub
  373.  
  374. Private Sub PicList_KeyPress(KeyAscii As Integer)
  375. UserControl_KeyPress KeyAscii
  376. End Sub
  377.  
  378.  
  379. Private Sub PicList_KeyUp(KeyCode As Integer, Shift As Integer)
  380. UserControl_KeyUp KeyCode, Shift
  381. End Sub
  382.  
  383.  
  384. Private Sub PicList_LostFocus()
  385. PicList.Visible = False
  386. PicPreview.Visible = False
  387. TmrFocus.Enabled = False
  388. CloseMe = True
  389. End Sub
  390.  
  391. Private Sub PicPreview_KeyDown(KeyCode As Integer, Shift As Integer)
  392. UserControl_KeyDown KeyCode, Shift
  393. End Sub
  394.  
  395.  
  396. Private Sub PicPreview_KeyPress(KeyAscii As Integer)
  397. UserControl_KeyPress KeyAscii
  398. End Sub
  399.  
  400.  
  401. Private Sub PicPreview_KeyUp(KeyCode As Integer, Shift As Integer)
  402. UserControl_KeyUp KeyCode, Shift
  403. End Sub
  404.  
  405.  
  406. Private Sub TmrAutoText_Timer()
  407. mAutoText = ""
  408. TmrAutoText.Enabled = False
  409. End Sub
  410.  
  411. Private Sub TmrFocus_Timer()
  412. Dim Focus As Long
  413.  
  414. Focus = GetFocus
  415.  
  416. 'If (Focus <> PicList.hWnd And Focus <> UserControl.hWnd And _
  417. 'Focus <> PicPreview.hWnd And Focus <> VScroll1.hWnd) Or CloseMe = True Then
  418. If (Focus <> UserControl.hWnd) Or CloseMe = True Then
  419. bCancel = True
  420. PicPreview.Visible = False
  421. PicList.Visible = False
  422. TmrFocus.Enabled = False
  423. CloseMe = True
  424. End If
  425. End Sub
  426. Private Sub PicList_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  427. Dim tI As Integer
  428.  
  429. tI = Int(Y \ (mComboFontSize * 2))
  430.  
  431. If tI < mRecentCount Then
  432. mListPos = mRecent(tI).fIndex
  433. Else
  434. mListPos = fList(tI - mRecentCount).fIndex
  435. End If
  436. End Sub
  437.  
  438.  
  439. Private Sub PicList_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  440. On Local Error Resume Next
  441. Dim tFont As String
  442. Dim tI As Integer
  443.  
  444. tI = Int(Y \ (mComboFontSize * 2))
  445.  
  446. fPos = tI
  447.  
  448. If TmrAutoText.Enabled = False Then
  449. SelBox.Move 0, CLng(Y \ (mComboFontSize * 2)) * (mComboFontSize * 2), PicList.ScaleWidth + 2, (mComboFontSize * 2) + 2
  450.  
  451.     If tI < mRecentCount Then
  452.     tFont = mRecent(tI).fName
  453.     Else
  454.     tFont = fList(tI - mRecentCount).fName
  455.     End If
  456.  
  457. ShowFont tFont
  458. DoEvents
  459. End If
  460.  
  461. If TmrAutoText.Enabled = True Then Exit Sub
  462.  
  463. Do
  464.     GetCursorPos MouseCoords
  465.     If WindowFromPoint(MouseCoords.X, MouseCoords.Y) = PicList.hWnd Then
  466.         If mUseMouseWheel = True Then
  467.         GetMessage Msg, Parent.hWnd, 0, 0
  468.         DispatchMessage Msg
  469.         TranslateMessage Msg
  470.         DoEvents
  471.             With Msg
  472.                 If .nMsg = WM_MOUSEWHEEL Then
  473.                     If VScroll1.Value < VScroll1.Max And Sgn(.wParam) < 0 Then
  474.                         If VScroll1.Value + 3 > VScroll1.Max Then
  475.                         VScroll1.Value = VScroll1.Max
  476.                         Else
  477.                         VScroll1.Value = VScroll1.Value + 3
  478.                         End If
  479.                     Else
  480.                         If VScroll1.Value - 3 < 0 Then
  481.                         VScroll1.Value = 0
  482.                         Else
  483.                         VScroll1.Value = VScroll1.Value - 3
  484.                         End If
  485.                     End If
  486.                 End If
  487.             End With
  488.         End If
  489.     ElseIf CloseMe = False Then
  490.     If WindowFromPoint(MouseCoords.X, MouseCoords.Y) = UserControl.hWnd Then Exit Do
  491.     GetMessage Msg, Parent.hWnd, 0, 0
  492.     DispatchMessage Msg
  493.     TranslateMessage Msg
  494.     DoEvents
  495.         If Msg.nMsg = 513 Then
  496.         CloseMe = True
  497.         Exit Do
  498.         End If
  499.     Else
  500.     Exit Do
  501.     End If
  502.     DoEvents
  503. Loop
  504.  
  505. End Sub
  506.  
  507. Private Sub PicList_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  508. SetRecents mListFont(mListPos), mListPos
  509. PicList.Visible = False
  510. PicPreview.Visible = False
  511. TmrFocus.Enabled = False
  512. DrawControl , True
  513. CloseMe = True
  514. RaiseEvent SelectedFontChanged(mListFont(mListPos))
  515. End Sub
  516.  
  517. Private Sub TmrOver_Timer()
  518. Dim Pos As CfPOINTAPI
  519. Dim WFP As Long
  520.  
  521. GetCursorPos Pos
  522. WFP = WindowFromPoint(Pos.X, Pos.Y)
  523.  
  524.     If WFP <> Me.hWnd Then
  525.     DrawControl bUp
  526.     TmrOver.Enabled = False
  527.     End If
  528. End Sub
  529.  
  530. Private Sub UserControl_Click()
  531. RaiseEvent Click
  532. End Sub
  533.  
  534. Private Sub UserControl_DblClick()
  535. RaiseEvent DblClick
  536. End Sub
  537.  
  538. Private Sub UserControl_GotFocus()
  539. If mShowFocus = True Then
  540. FocusBox.Visible = True
  541. Else
  542. FocusBox.Visible = False
  543. End If
  544. End Sub
  545.  
  546. Private Sub UserControl_Initialize()
  547. CloseMe = False
  548.  
  549. SetWindowLong PicList.hWnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW
  550. SetParent PicList.hWnd, 0
  551. SetWindowLong PicPreview.hWnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW
  552. SetParent PicPreview.hWnd, 0
  553. End Sub
  554.  
  555. Private Sub UserControl_InitProperties()
  556. mEnabled = True
  557. mPreviewText = Ambient.DisplayName
  558. mBorderStyle = sSunken
  559. mButtonBorderStyle = sRaised
  560. mShowPreview = True
  561. mShowFontName = True
  562. mPreviewSize = 36
  563. mSorted = True
  564. mShowFontInCombo = True
  565. mComboFontCount = 20
  566. mComboFontSize = 8
  567. mComboFontBold = False
  568. mComboFontItalic = False
  569. mComboWidth = 250
  570. mRecentMax = 4
  571. mRecentBackColor = vbWindowBackground
  572. mRecentForeColor = vbWindowText
  573. mForeColor = vbWindowText
  574. mBackColor = vbWindowBackground
  575. mComboForeColor = vbWindowText
  576. mComboBackColor = vbWindowBackground
  577. mComboSelectColor = vbHighlight
  578. mButtonBackColor = vbButtonFace
  579. mButtonForeColor = vbButtonText
  580. mUseMouseWheel = False
  581. Set UserControl.Font = Ambient.Font
  582. mUsedBackColor = vbInfoBackground
  583. mUsedForeColor = vbInfoText
  584. mXPStyle = True
  585. mShowFocus = True
  586. End Sub
  587.  
  588. Private Sub UserControl_KeyDown(KeyCode As Integer, Shift As Integer)
  589. Dim kCode As String
  590. Dim fI As Integer
  591. Dim kC As Boolean
  592.  
  593. If PicList.Visible = True Then
  594.     Select Case KeyCode
  595.         Case vbKeyUp
  596.             If VScroll1.Value > 0 Then
  597.             VScroll1.Value = VScroll1.Value - 1
  598.             End If
  599.         Case vbKeyDown
  600.             If VScroll1.Value < VScroll1.Max Then
  601.             VScroll1.Value = VScroll1.Value + 1
  602.             End If
  603.         Case vbKeyPageUp
  604.             If VScroll1.Value - VScroll1.LargeChange > 0 Then
  605.             VScroll1.Value = VScroll1.Value - VScroll1.LargeChange
  606.             Else
  607.             VScroll1.Value = VScroll1.Min
  608.             End If
  609.         Case vbKeyPageDown
  610.             If VScroll1.Value + VScroll1.LargeChange < VScroll1.Max Then
  611.             VScroll1.Value = VScroll1.Value + VScroll1.LargeChange
  612.             Else
  613.             VScroll1.Value = VScroll1.Max
  614.             End If
  615.         Case vbKeyHome
  616.             VScroll1.Value = 0
  617.         Case vbKeyEnd
  618.             VScroll1.Value = VScroll1.Max
  619.     End Select
  620.  
  621. If mSorted = False Then Exit Sub
  622. kCode = LCase(Chr(KeyCode))
  623.     If Asc(kCode) >= 97 And Asc(kCode) <= 122 Then
  624.     kC = mAutoText = kCode
  625.         If kC = False Then mAutoText = mAutoText & kCode
  626.     fI = FontExist(mAutoText & "*", mListPos + IIf(kC = True, 1, 0)) ' check from current position
  627.         If fI >= 0 Then
  628.         TmrAutoText.Enabled = False
  629.         mListPos = fI
  630.             If fI <= VScroll1.Max Then
  631.             VScroll1.Value = fI
  632.             Else
  633.             VScroll1.Value = VScroll1.Max
  634.             End If
  635.         
  636.         SelBox.Move 0, (fI - VScroll1.Value + mRecentCount) * (mComboFontSize * 2), PicList.ScaleWidth + 2, (mComboFontSize * 2) + 2
  637.             If kC = False Then
  638.             TmrAutoText.Interval = 1500
  639.             Else
  640.             TmrAutoText.Interval = 800
  641.             End If
  642.         TmrAutoText.Enabled = True
  643.         Else
  644.         fI = FontExist(mAutoText & "*") 'check from position 0
  645.             If fI >= 0 Then
  646.             TmrAutoText.Enabled = False
  647.             mListPos = fI
  648.             VScroll1.Value = fI
  649.             TmrAutoText.Interval = 1500
  650.             TmrAutoText.Enabled = True
  651.             Else
  652.             mAutoText = ""
  653.             End If
  654.         End If
  655.     End If
  656. End If
  657. RaiseEvent KeyDown(KeyCode, Shift)
  658. End Sub
  659.  
  660. Private Sub UserControl_KeyPress(KeyAscii As Integer)
  661. RaiseEvent KeyPress(KeyAscii)
  662. End Sub
  663.  
  664.  
  665. Private Sub UserControl_KeyUp(KeyCode As Integer, Shift As Integer)
  666. RaiseEvent KeyUp(KeyCode, Shift)
  667. End Sub
  668.  
  669.  
  670. Private Sub UserControl_LostFocus()
  671. FocusBox.Visible = False
  672. End Sub
  673.  
  674. Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  675. On Local Error Resume Next
  676. If Button = 1 Then
  677. inRct = PtInRect(uRct, X, Y)
  678.     If inRct = True Then
  679.     DrawControl bDown, True
  680.     DoEvents
  681.         If PicList.Visible = False Then
  682.         ShowList
  683.         Else
  684.         PicList.Visible = False
  685.         PicPreview.Visible = False
  686.         TmrFocus.Enabled = False
  687.         CloseMe = True
  688.         End If
  689.     End If
  690. End If
  691. RaiseEvent MouseDown(Button, Shift, X, Y)
  692.  
  693. End Sub
  694.  
  695. Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  696. If Button = 0 Then
  697. DrawControl bOver, True
  698. TmrOver.Enabled = True
  699. End If
  700.  
  701. RaiseEvent MouseMove(Button, Shift, X, Y)
  702. End Sub
  703.  
  704.  
  705. Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  706. If Button = 1 Then
  707.     If inRct = True Then DrawControl bUp
  708. inRct = False
  709. End If
  710. RaiseEvent MouseUp(Button, Shift, X, Y)
  711. End Sub
  712.  
  713. Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  714. With PropBag
  715.     mEnabled = .ReadProperty("Enabled", True)
  716.     mPreviewText = .ReadProperty("PreviewText", Ambient.DisplayName)
  717.     mBorderStyle = .ReadProperty("BorderStyle", sSunken)
  718.     mButtonBorderStyle = .ReadProperty("ButtonBorderStyle", sRaised)
  719.     mShowPreview = .ReadProperty("ShowPreview", True)
  720.     mShowFontName = .ReadProperty("ShowFontName", True)
  721.     mPreviewSize = .ReadProperty("PreviewSize", 36)
  722.     mSorted = .ReadProperty("Sorted", True)
  723.     mShowFontInCombo = .ReadProperty("ShowFontInCombo", True)
  724.     mComboFontCount = .ReadProperty("ComboFontCount", 20)
  725.     mComboFontSize = .ReadProperty("ComboFontSize", 8)
  726.     mComboFontBold = .ReadProperty("ComboFontBold", False)
  727.     mComboFontItalic = .ReadProperty("ComboFontItalic", False)
  728.     mComboWidth = .ReadProperty("ComboWidth", 250)
  729.     mRecentMax = .ReadProperty("RecentMax", 4)
  730.     mRecentBackColor = .ReadProperty("RecentBackColor", vbWindowBackground)
  731.     mRecentForeColor = .ReadProperty("RecentForeColor", vbWindowText)
  732.     mForeColor = .ReadProperty("ForeColor", vbWindowText)
  733.     mBackColor = .ReadProperty("BackColor", vbWindowBackground)
  734.     mComboForeColor = .ReadProperty("ComboForeColor", vbWindowText)
  735.     mComboBackColor = .ReadProperty("ComboBackColor", vbWindowBackground)
  736.     mComboSelectColor = .ReadProperty("ComboSelectColor", vbHighlight)
  737.     mButtonBackColor = .ReadProperty("ButtonBackColor", vbButtonFace)
  738.     mButtonForeColor = .ReadProperty("ButtonForeColor", vbButtonText)
  739.     mButtonOverColor = .ReadProperty("ButtonOverColor", vbBlue)
  740.     mUseMouseWheel = .ReadProperty("UseMouseWheel", False)
  741.     Set UserControl.Font = .ReadProperty("Font", Ambient.Font)
  742.     mUsedBackColor = .ReadProperty("UsedBackColor", vbInfoBackground)
  743.     mUsedForeColor = .ReadProperty("UsedForeColor", vbInfoText)
  744.     mXPStyle = .ReadProperty("XPStyle", True)
  745.     mShowFocus = .ReadProperty("ShowFocus", True)
  746. End With
  747.  
  748. UserControl.ForeColor = mForeColor
  749. UserControl.BackColor = mBackColor
  750. FocusBox.BackColor = mComboSelectColor
  751.  
  752. ReDim mRecent(mRecentMax)
  753.  
  754. If Ambient.UserMode = True Then
  755. FillList
  756.     If mSorted = True Then SortList
  757. End If
  758.  
  759. DrawControl , True
  760.  
  761. End Sub
  762.  
  763. Private Sub UserControl_Resize()
  764. Dim tBdr As Single
  765. Dim V As Integer
  766.  
  767. If mXPStyle = False Then
  768. V = 0
  769.     Select Case mBorderStyle
  770.         Case sNone
  771.         tBdr = 0
  772.         Case sSmoothRaised, sSmoothSunken
  773.         tBdr = 1
  774.         Case Else
  775.         tBdr = 2
  776.     End Select
  777. Else
  778. V = 2
  779. tBdr = 1
  780. End If
  781.  
  782. UserControl.Height = ScaleY(TextHeight("X") + (tBdr * 2) + 4 + V, vbPixels, vbTwips)
  783.  
  784. If UserControl.Width < 600 Then UserControl.Width = 600
  785.  
  786. FocusBox.Move tBdr + 1, tBdr + 1, UserControl.ScaleWidth - tBdr - 20 + V, UserControl.ScaleHeight - (tBdr * 2) - 1
  787.  
  788. SetRect uRct, 0, 0, UserControl.ScaleWidth, UserControl.ScaleHeight
  789. SetRect Btn, UserControl.ScaleWidth - tBdr - 17, tBdr, UserControl.ScaleWidth - tBdr, UserControl.ScaleHeight - tBdr
  790. DrawControl bUp, True
  791. End Sub
  792.  
  793. Public Property Get Enabled() As Boolean
  794. Enabled = mEnabled
  795. End Property
  796.  
  797. Public Property Let Enabled(ByVal vNewValue As Boolean)
  798. mEnabled = vNewValue
  799. DrawControl , True
  800. PropertyChanged "Enabled"
  801. End Property
  802. Private Sub DrawControl(Optional eDraw As eBtnState = bUp, Optional DrawAll As Boolean = False)
  803. Dim Br As Long
  804. Dim tC As Long
  805. Static OldDr As eBtnState
  806. Dim tCol As Long
  807.  
  808. UserControl.Enabled = mEnabled
  809.  
  810. mXPStyle = mXPStyle And DrawTheme("Button", 1, 1, Btn)
  811.  
  812. If mXPStyle = False Then
  813. TranslateColor mButtonBackColor, 0, tC
  814. Br = CreateSolidBrush(tC)
  815.  
  816.     If mEnabled = False Then
  817.     Cls
  818.     FillRect UserControl.hDC, Btn, Br
  819.     DrawEdge UserControl.hDC, uRct, mBorderStyle, edgeAll
  820.     DrawEdge UserControl.hDC, Btn, mButtonBorderStyle, edgeAll
  821.     tCol = UserControl.ForeColor
  822.     UserControl.ForeColor = &H80000011
  823.     UserControl.CurrentY = ((ScaleHeight - TextHeight("X")) / 2) - 1
  824.     UserControl.CurrentX = 4
  825.         If Ambient.UserMode = True And mListCount > 0 Then
  826.         UserControl.Print mListFont(mListPos)
  827.         Else
  828.         UserControl.Print Ambient.DisplayName
  829.         End If
  830.     UserControl.ForeColor = tCol
  831.     DrawArw
  832.     DeleteObject Br
  833.     Exit Sub
  834.     End If
  835.  
  836. If OldDr = eDraw And DrawAll = False Then Exit Sub
  837. UserControl.Cls
  838.  
  839. UserControl.CurrentY = ((ScaleHeight - TextHeight("X")) / 2) - 1
  840. UserControl.CurrentX = 4
  841.     If Ambient.UserMode = True And mListCount > 0 Then
  842.     UserControl.Print mListFont(mListPos)
  843.     Else
  844.     UserControl.Print Ambient.DisplayName
  845.     End If
  846.  
  847. Select Case eDraw
  848.     Case bUp
  849.         DrawEdge UserControl.hDC, uRct, mBorderStyle, edgeAll
  850.         FillRect UserControl.hDC, Btn, Br
  851.         DrawEdge UserControl.hDC, Btn, ButtonBorderStyle, edgeAll
  852.     Case bOver
  853.         DrawEdge UserControl.hDC, uRct, mBorderStyle, edgeAll
  854.         FillRect UserControl.hDC, Btn, Br
  855.         DrawEdge UserControl.hDC, Btn, ButtonBorderStyle, edgeAll
  856.     Case bDown
  857.         DrawEdge UserControl.hDC, uRct, mBorderStyle, edgeAll
  858.         FillRect UserControl.hDC, Btn, Br
  859.         DrawEdge UserControl.hDC, Btn, InvBdr(ButtonBorderStyle), edgeAll
  860. End Select
  861.  
  862. DeleteObject Br
  863.  
  864.     If eDraw = bOver Then
  865.     DrawArw mButtonOverColor
  866.     Else
  867.     DrawArw
  868.     End If
  869. Else
  870. UserControl.Cls
  871.     If mEnabled = True Then
  872.         Select Case eDraw
  873.             Case bUp
  874.                 DrawTheme "ComboBox", 2, 1, uRct
  875.                 DrawTheme "ComboBox", 1, 1, Btn
  876.             Case bOver
  877.                 DrawTheme "ComboBox", 2, 2, uRct
  878.                 DrawTheme "ComboBox", 1, 2, Btn
  879.             Case bDown
  880.                 DrawTheme "ComboBox", 2, 3, uRct
  881.                 DrawTheme "ComboBox", 1, 3, Btn
  882.         End Select
  883.     Else
  884.     DrawTheme "ComboBox", 2, 4, uRct
  885.     DrawTheme "ComboBox", 1, 4, Btn
  886.     tCol = UserControl.ForeColor
  887.     UserControl.ForeColor = &H80000011
  888.     UserControl.CurrentY = ((ScaleHeight - TextHeight("X")) / 2) - 1
  889.     UserControl.CurrentX = 4
  890.     UserControl.Print mListFont(mListPos)
  891.     UserControl.ForeColor = tCol
  892.     Exit Sub
  893.     End If
  894. UserControl.CurrentY = ((ScaleHeight - TextHeight("X")) / 2) - 1
  895. UserControl.CurrentX = 4
  896.     If Ambient.UserMode = True And mListCount > 0 Then
  897.     UserControl.Print mListFont(mListPos)
  898.     Else
  899.     UserControl.Print Ambient.DisplayName
  900.     End If
  901. End If
  902.  
  903. OldDr = eDraw
  904. Refresh
  905. End Sub
  906.  
  907. Private Sub DrawArw(Optional ArrowColor As Long = -1)
  908. Dim ColUp As Long
  909. Dim tCol As Long
  910.  
  911. If ArrowColor = -1 Then
  912. tCol = mButtonForeColor
  913. Else
  914. tCol = ArrowColor
  915. End If
  916.  
  917. If mEnabled = False Then
  918. TranslateColor vbGrayText, 0, ColUp
  919. Else
  920. TranslateColor tCol, 0, ColUp
  921. End If
  922.  
  923. SetPixel UserControl.hDC, Btn.Left - 1 + (Btn.Right - Btn.Left) \ 2, Btn.Top - 1 + (Btn.Bottom - Btn.Top) \ 2, ColUp
  924. SetPixel UserControl.hDC, Btn.Left + 1 + (Btn.Right - Btn.Left) \ 2, Btn.Top - 1 + (Btn.Bottom - Btn.Top) \ 2, ColUp
  925. SetPixel UserControl.hDC, Btn.Left - 2 + (Btn.Right - Btn.Left) \ 2, Btn.Top - 1 + (Btn.Bottom - Btn.Top) \ 2, ColUp
  926. SetPixel UserControl.hDC, Btn.Left + 2 + (Btn.Right - Btn.Left) \ 2, Btn.Top - 1 + (Btn.Bottom - Btn.Top) \ 2, ColUp
  927. SetPixel UserControl.hDC, Btn.Left - 3 + (Btn.Right - Btn.Left) \ 2, Btn.Top - 1 + (Btn.Bottom - Btn.Top) \ 2, ColUp
  928. SetPixel UserControl.hDC, Btn.Left + 3 + (Btn.Right - Btn.Left) \ 2, Btn.Top - 1 + (Btn.Bottom - Btn.Top) \ 2, ColUp
  929. SetPixel UserControl.hDC, Btn.Left + (Btn.Right - Btn.Left) \ 2, Btn.Top - 1 + (Btn.Bottom - Btn.Top) \ 2, ColUp
  930.  
  931. SetPixel UserControl.hDC, Btn.Left - 1 + (Btn.Right - Btn.Left) \ 2, Btn.Top + (Btn.Bottom - Btn.Top) \ 2, ColUp
  932. SetPixel UserControl.hDC, Btn.Left + 1 + (Btn.Right - Btn.Left) \ 2, Btn.Top + (Btn.Bottom - Btn.Top) \ 2, ColUp
  933. SetPixel UserControl.hDC, Btn.Left - 2 + (Btn.Right - Btn.Left) \ 2, Btn.Top + (Btn.Bottom - Btn.Top) \ 2, ColUp
  934. SetPixel UserControl.hDC, Btn.Left + 2 + (Btn.Right - Btn.Left) \ 2, Btn.Top + (Btn.Bottom - Btn.Top) \ 2, ColUp
  935. SetPixel UserControl.hDC, Btn.Left + (Btn.Right - Btn.Left) \ 2, Btn.Top + (Btn.Bottom - Btn.Top) \ 2, ColUp
  936.  
  937. SetPixel UserControl.hDC, Btn.Left - 1 + (Btn.Right - Btn.Left) \ 2, Btn.Top + 1 + (Btn.Bottom - Btn.Top) \ 2, ColUp
  938. SetPixel UserControl.hDC, Btn.Left + 1 + (Btn.Right - Btn.Left) \ 2, Btn.Top + 1 + (Btn.Bottom - Btn.Top) \ 2, ColUp
  939. SetPixel UserControl.hDC, Btn.Left + (Btn.Right - Btn.Left) \ 2, Btn.Top + 1 + (Btn.Bottom - Btn.Top) \ 2, ColUp
  940.  
  941. SetPixel UserControl.hDC, Btn.Left + (Btn.Right - Btn.Left) \ 2, Btn.Top + 2 + (Btn.Bottom - Btn.Top) \ 2, ColUp
  942.  
  943. Refresh
  944. End Sub
  945.  
  946. Private Sub ShowList()
  947. Dim CB As CfRECT
  948.  
  949. CloseMe = False
  950.  
  951. GetWindowRect UserControl.hWnd, CB
  952. tPos = mListPos
  953.  
  954. PicList.Width = ScaleX(mComboWidth, vbPixels, vbTwips)
  955. PicList.Height = ScaleY(((mComboFontSize * 2) * (mComboFontCount + mRecentCount) + 2), vbPixels, vbTwips)
  956. VScroll1.Move PicList.ScaleWidth - 18, (mComboFontSize * 2) * mRecentCount, 18, PicList.ScaleHeight - ((mComboFontSize * 2) * mRecentCount)
  957.  
  958.  
  959. If CB.Bottom + (PicList.Height / Screen.TwipsPerPixelY) < Screen.Height / Screen.TwipsPerPixelY Then
  960. SetWindowPos PicList.hWnd, HWND_TOP, CB.Left, CB.Bottom, PicList.Width / Screen.TwipsPerPixelX, _
  961. PicList.Height / Screen.TwipsPerPixelY, SWP_NOACTIVATE Or SWP_SHOWWINDOW
  962. Else
  963. SetWindowPos PicList.hWnd, HWND_TOP, CB.Left, CB.Top - (PicList.Height / Screen.TwipsPerPixelY), _
  964. PicList.Width / Screen.TwipsPerPixelX, PicList.Height / Screen.TwipsPerPixelY, SWP_NOACTIVATE Or SWP_SHOWWINDOW
  965. End If
  966.  
  967. SetWindowPos PicPreview.hWnd, HWND_TOP, (PicList.Left + PicList.Width) / Screen.TwipsPerPixelX, _
  968. (PicList.Top / Screen.TwipsPerPixelY), PicPreview.Width / Screen.TwipsPerPixelX, _
  969. PicPreview.Height / Screen.TwipsPerPixelY, SWP_NOACTIVATE
  970.  
  971. fPos = mListPos
  972.  
  973. DrawList
  974.  
  975. UserControl.SetFocus
  976.  
  977. TmrFocus.Enabled = True
  978.  
  979. End Sub
  980.  
  981. Private Sub ShowFont(fName As String)
  982. Dim tRc As CfRECT
  983. Dim tStr As String
  984. Static OldFont As String
  985. Dim Br As Long
  986. Dim tC As Long
  987.  
  988. If fName = "" Or mShowPreview = False Then Exit Sub
  989.  
  990. If Trim(mPreviewText) = "" Then
  991. tStr = fName
  992. Else
  993. tStr = mPreviewText
  994. End If
  995.  
  996. If fName <> OldFont Then
  997. OldFont = fName
  998. Else
  999. Exit Sub
  1000. End If
  1001.  
  1002. PicPreview.FontName = fName
  1003. PicPreview.FontSize = mPreviewSize
  1004. PicPreview.FontBold = False
  1005. PicPreview.FontItalic = False
  1006. PicPreview.Cls
  1007. PicPreview.Height = (PicPreview.TextHeight(tStr) * Screen.TwipsPerPixelY) + 200
  1008. PicPreview.Width = (PicPreview.TextWidth(tStr) * Screen.TwipsPerPixelX) + 200
  1009.  
  1010.     If PicPreview.Width > Screen.Width / 2 Then PicPreview.Width = Screen.Width / 2
  1011.  
  1012.     If Screen.Width - (PicList.Left + PicList.Width) < PicPreview.Width Then
  1013.     PicPreview.Left = PicList.Left - PicPreview.Width
  1014.     Else
  1015.     PicPreview.Left = PicList.Left + PicList.Width
  1016.     End If
  1017.  
  1018. SetRect tRc, 0, 0, PicPreview.ScaleWidth, PicPreview.ScaleHeight
  1019. DrawTxt PicPreview.hDC, tStr, tRc, MiddleCenter, False, True, True
  1020.  
  1021. If mShowFontName = True Then
  1022. TranslateColor mComboForeColor, 0, tC
  1023. Br = CreateSolidBrush(vbBlack)
  1024.  
  1025. PicPreview.FontName = "MS Sans Serif"
  1026. PicPreview.FontSize = 8
  1027. PicPreview.FontBold = False
  1028. PicPreview.FontItalic = False
  1029. PicPreview.Height = PicPreview.Height + (PicPreview.TextHeight("X") * Screen.TwipsPerPixelY)
  1030. SetRect tRc, -1, PicPreview.ScaleHeight - PicPreview.TextHeight("X") - 2, PicPreview.ScaleWidth + 1, PicPreview.ScaleHeight + 1
  1031. DrawTxt PicPreview.hDC, fName, tRc, MiddleCenter
  1032. FrameRect PicPreview.hDC, tRc, Br
  1033. DeleteObject Br
  1034. End If
  1035.     
  1036. If PicPreview.Visible = False Then PicPreview.Visible = True
  1037. PicPreview.Refresh
  1038. End Sub
  1039.  
  1040. Private Sub DrawTxt(ObjhDC As Long, oText As String, TxtRect As CfRECT, mPosition As sTxtPosition, _
  1041. Optional MultiLine As Boolean = False, Optional WordWrap As Boolean = False, _
  1042. Optional WordEllipsis As Boolean = False)
  1043. Dim tFormat As Long
  1044.  
  1045. Select Case mPosition
  1046.     Case TopLeft
  1047.     tFormat = DT_TOP + DT_LEFT
  1048.     Case TopCenter
  1049.     tFormat = DT_TOP + DT_CENTER
  1050.     Case TopRight
  1051.     tFormat = DT_TOP + DT_RIGHT
  1052.     Case MiddleLeft
  1053.     tFormat = DT_VCENTER + DT_LEFT
  1054.     Case MiddleCenter
  1055.     tFormat = DT_VCENTER + DT_CENTER
  1056.     Case MiddleRight
  1057.     tFormat = DT_VCENTER + DT_RIGHT
  1058.     Case BottomLeft
  1059.     tFormat = DT_BOTTOM + DT_LEFT
  1060.     Case BottomCenter
  1061.     tFormat = DT_BOTTOM + DT_CENTER
  1062.     Case BottomRight
  1063.     tFormat = DT_BOTTOM + DT_RIGHT
  1064. End Select
  1065.  
  1066. If MultiLine = False Then tFormat = tFormat + DT_SINGLELINE
  1067.  
  1068. If WordWrap = True And MultiLine = True Then tFormat = tFormat + DT_WORDBREAK
  1069.  
  1070. If WordEllipsis = True Then tFormat = tFormat + DT_WORD_ELLIPSIS
  1071.  
  1072. tFormat = tFormat + DT_NOCLIP
  1073.  
  1074. DrawText ObjhDC, oText, Len(oText), TxtRect, tFormat
  1075. End Sub
  1076.  
  1077. Private Sub mgSort(ByVal pStart As Long, ByVal pEnd As Long)
  1078. Dim m As Long
  1079. Dim n As Long
  1080. Dim tStr1 As String
  1081.  
  1082. m = pStart
  1083. n = pEnd
  1084.  
  1085. tStr1 = LCase(mListFont((pStart + pEnd) \ 2))
  1086.  
  1087. Do
  1088.     Do While LCase(mListFont(m)) < tStr1
  1089.     m = m + 1
  1090.     Loop
  1091.     Do While LCase(mListFont(n)) > tStr1
  1092.     n = n - 1
  1093.     Loop
  1094.     If m <= n Then
  1095.     SwapStrings mListFont(m), mListFont(n)
  1096.     m = m + 1
  1097.     n = n - 1
  1098.     End If
  1099. Loop Until m > n
  1100.  
  1101. If pStart < n Then Call mgSort(pStart, n)
  1102. If m < pEnd Then Call mgSort(m, pEnd)
  1103.  
  1104. End Sub
  1105. Private Function ReadValue(MyHkey As HkeyLoc, myKey As String, MyValue As String, Optional ByVal MyDefaultData As String = "") As String
  1106. On Error GoTo ReadValue_Error
  1107.  
  1108. Resultat = 0
  1109. Ident = 0
  1110. TailleBuffer = 0
  1111.  
  1112. Resultat = RegCreateKey(MyHkey, myKey, Ident)
  1113. If Resultat <> 0 Then
  1114. Exit Function
  1115. End If
  1116.  
  1117. Resultat = RegQueryValueEx(Ident, MyValue, 0&, 1, 0&, TailleBuffer)
  1118. If TailleBuffer < 2 Then
  1119. ReadValue = MyDefaultData
  1120. Exit Function
  1121. End If
  1122. Donnee = String(TailleBuffer + 1, " ")
  1123.  
  1124. Resultat = RegQueryValueEx(Ident, MyValue, 0&, 1, ByVal Donnee, TailleBuffer)
  1125. Donnee = Left$(Donnee, TailleBuffer - 1)
  1126. ReadValue = Donnee
  1127.  
  1128. On Error GoTo 0
  1129. ReadValue_Error:
  1130. Exit Function
  1131.  
  1132. End Function
  1133.  
  1134. Private Sub SetRecents(Optional CurRecent As String, Optional CurIndex As Integer)
  1135. Dim m As Integer
  1136. Dim n As Integer
  1137. Dim TmpLast() As tpRecents
  1138. Dim A%, b%
  1139. Dim myLast As tpRecents
  1140.  
  1141. For n = 0 To mRecentMax - 1
  1142.     If mRecent(0).fName = CurRecent Then
  1143.         If n <> 0 Then
  1144.         myLast = mRecent(0)
  1145.         mRecent(0) = mRecent(n)
  1146.         mRecent(n) = myLast
  1147.         End If
  1148.     Exit For
  1149.     End If
  1150. Next n
  1151.  
  1152. ReDim TmpLast(mRecentMax)
  1153.  
  1154. If CurRecent = "" Then
  1155. TmpLast = mRecent
  1156. Else
  1157.     For n = 1 To mRecentMax
  1158.         myLast = mRecent(n - 1)
  1159.         If Len(Trim(myLast.fName)) > 0 Then
  1160.         TmpLast(n) = myLast
  1161.         End If
  1162.     Next n
  1163. TmpLast(0).fName = CurRecent
  1164. TmpLast(0).fIndex = CurIndex
  1165. End If
  1166.  
  1167. For A% = 0 To mRecentMax
  1168.     For b% = 0 To mRecentMax
  1169.         If b% <> A% And Len(TmpLast(A%).fName) > 0 Then
  1170.             If TmpLast(A%).fName = TmpLast(b%).fName Then
  1171.             TmpLast(b%).fName = ""
  1172.             b% = b% - 1
  1173.             End If
  1174.         End If
  1175.     Next b%
  1176. Next A%
  1177.  
  1178. m = 0
  1179.  
  1180. ReDim mRecent(mRecentMax)
  1181.  
  1182. For n = 0 To mRecentMax - 1
  1183.     If Len(Trim(TmpLast(n).fName)) > 0 Then
  1184.     mRecent(m).fName = TmpLast(n).fName
  1185.     mRecent(m).fIndex = TmpLast(n).fIndex
  1186.     mRecent(m).fRecent = True
  1187.     m = m + 1
  1188.     End If
  1189. Next n
  1190. mRecentCount = m
  1191.  
  1192. End Sub
  1193. Private Function SetValue(MyHkey As HkeyLoc, myKey As String, MyValue As String, ByVal MyData As String)
  1194. On Error GoTo SetValue_Error
  1195.  
  1196. Resultat = 0
  1197. Ident = 0
  1198. TailleBuffer = 0
  1199. Resultat = RegCreateKey(MyHkey, myKey, Ident)
  1200. If Resultat = 0 Then
  1201. Resultat = RegSetValueEx(Ident, MyValue, 0&, 1, ByVal MyData, Len(MyData) + 1)
  1202. End If
  1203.  
  1204. On Error GoTo 0
  1205. Exit Function
  1206.  
  1207. SetValue_Error:
  1208.  
  1209. End Function
  1210.  
  1211. Private Sub SortList()
  1212. Dim n As Long
  1213. Dim tStart As Long
  1214. Dim tEnd As Long
  1215. Dim bStr1 As String
  1216. Dim bStr2 As String
  1217. Dim qRec As Long
  1218.  
  1219. mgSort 0, mListCount
  1220.  
  1221. tStart = 0
  1222.     Do
  1223.     bStr1 = mListFont(tStart)
  1224.     qRec = 0
  1225.         For n = tStart To mListCount
  1226.         bStr2 = mListFont(n)
  1227.             If LCase(bStr1) = LCase(bStr2) Then
  1228.             qRec = qRec + 1
  1229.             Else
  1230.             Exit For
  1231.             End If
  1232.         Next n
  1233.     tEnd = tStart + qRec
  1234.     mgSort tStart, tEnd - 1
  1235.     tStart = tEnd
  1236.     Loop While tEnd < mListCount
  1237. End Sub
  1238.  
  1239. Private Sub SwapStrings(String1 As String, String2 As String)
  1240. Dim tHold As Long
  1241. CopyMem tHold, ByVal VarPtr(String1), 4
  1242. CopyMem ByVal VarPtr(String1), ByVal VarPtr(String2), 4
  1243. CopyMem ByVal VarPtr(String2), tHold, 4
  1244. End Sub
  1245. Private Sub DrawList()
  1246. On Local Error Resume Next
  1247. Dim I As Integer
  1248. Dim Br As Long
  1249. Dim tC As Long
  1250. Dim Rct As CfRECT
  1251.  
  1252. TranslateColor mRecentBackColor, 0, tC
  1253. Br = CreateSolidBrush(tC)
  1254.  
  1255. PicList.Cls
  1256.  
  1257. doNothing = True
  1258.  
  1259. VScroll1.Max = mListCount - mComboFontCount + mRecentCount
  1260. VScroll1.LargeChange = ((mListCount + mRecentCount) \ mComboFontCount) + 1
  1261.  
  1262. SetList
  1263.  
  1264. SetRect Rct, 0, 0, PicList.ScaleWidth, mRecentCount * (mComboFontSize * 2)
  1265. FillRect PicList.hDC, Rct, Br
  1266.  
  1267. DeleteObject Br
  1268.  
  1269. TranslateColor mUsedBackColor, 0, tC
  1270. Br = CreateSolidBrush(tC)
  1271.  
  1272. PicList.Line (0, mRecentCount * (mComboFontSize * 2))-(PicList.ScaleWidth, mRecentCount * (mComboFontSize * 2))
  1273.  
  1274.     For I = 0 To mRecentCount - 1
  1275.     PicList.CurrentX = 2
  1276.     PicList.CurrentY = (I * (mComboFontSize * 2)) + 2
  1277.     
  1278.     If mShowFontInCombo = True Then PicList.FontName = mRecent(I).fName
  1279.     PicList.FontSize = mComboFontSize
  1280.     PicList.FontItalic = mComboFontItalic
  1281.     PicList.FontBold = mComboFontBold
  1282.     
  1283.         If IsUsed(mRecent(I).fName) = False Then
  1284.         PicList.ForeColor = mRecentForeColor
  1285.         Else
  1286.         SetRect Rct, 0, I * (mComboFontSize * 2), PicList.ScaleWidth, (I + 1) * (mComboFontSize * 2)
  1287.         FillRect PicList.hDC, Rct, Br
  1288.         PicList.ForeColor = mUsedForeColor
  1289.         End If
  1290.     
  1291.     PicList.Print mRecent(I).fName
  1292.     Next I
  1293.  
  1294. For I = 0 To mComboFontCount - 1
  1295.     If IsUsed(fList(I).fName) = False Then
  1296.     PicList.ForeColor = mComboForeColor
  1297.     Else
  1298.     SetRect Rct, 0, (I * (mComboFontSize * 2)) + ((mComboFontSize * 2) * mRecentCount) + 2, PicList.ScaleWidth, ((I + 1) * (mComboFontSize * 2)) + ((mComboFontSize * 2) * mRecentCount)
  1299.     FillRect PicList.hDC, Rct, Br
  1300.     PicList.ForeColor = mUsedForeColor
  1301.     End If
  1302.     
  1303. PicList.CurrentX = 2
  1304. PicList.CurrentY = (I * (mComboFontSize * 2)) + 2 + ((mComboFontSize * 2) * mRecentCount)
  1305.  
  1306. If mShowFontInCombo = True Then PicList.FontName = fList(I).fName
  1307. PicList.FontSize = mComboFontSize
  1308. PicList.FontItalic = mComboFontItalic
  1309. PicList.FontBold = mComboFontBold
  1310.  
  1311. PicList.Print fList(I).fName
  1312. Next I
  1313.  
  1314. DeleteObject Br
  1315.  
  1316. SelBox.Move 0, (fPos - VScroll1.Value + mRecentCount) * (mComboFontSize * 2), PicList.ScaleWidth + 2, (mComboFontSize * 2) + 2
  1317.  
  1318. doNothing = False
  1319. End Sub
  1320.  
  1321. Private Function IsUsed(FontName As String) As Boolean
  1322. Dim I As Integer
  1323. Dim F As Boolean
  1324.  
  1325. For I = 0 To mUsedCount - 1
  1326.     If LCase(mUsedList(I)) = LCase(FontName) Then
  1327.     F = True
  1328.     Exit For
  1329.     End If
  1330. Next I
  1331.  
  1332. IsUsed = F
  1333. End Function
  1334. Private Sub SetList()
  1335. Dim I As Integer
  1336. Dim RecQ As Integer
  1337. Dim Start As Integer
  1338.  
  1339. ReDim fList(mComboFontCount)
  1340.  
  1341. Start = fPos
  1342.  
  1343. If Start + mComboFontCount > mListCount Then
  1344. Start = mListCount - mComboFontCount
  1345. End If
  1346.  
  1347. VScroll1.Value = Start
  1348.  
  1349. For I = Start To Start + mComboFontCount - RecQ
  1350. fList(RecQ).fName = mListFont(I)
  1351. fList(RecQ).fIndex = I
  1352. fList(RecQ).fRecent = False
  1353. RecQ = RecQ + 1
  1354. Next I
  1355. End Sub
  1356.  
  1357. Public Property Get PreviewText() As String
  1358. PreviewText = mPreviewText
  1359. End Property
  1360.  
  1361. Public Property Let PreviewText(ByVal vNewValue As String)
  1362. mPreviewText = vNewValue
  1363. PropertyChanged "PreviewText"
  1364. End Property
  1365.  
  1366. Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  1367. With PropBag
  1368.     .WriteProperty "Enabled", mEnabled, True
  1369.     .WriteProperty "PreviewText", mPreviewText, Ambient.DisplayName
  1370.     .WriteProperty "BorderStyle", mBorderStyle, sSunken
  1371.     .WriteProperty "ButtonBorderStyle", mButtonBorderStyle, sRaised
  1372.     .WriteProperty "ShowPreview", mShowPreview, True
  1373.     .WriteProperty "ShowFontName", mShowFontName, True
  1374.     .WriteProperty "PreviewSize", mPreviewSize, 36
  1375.     .WriteProperty "Sorted", mSorted, True
  1376.     .WriteProperty "ShowFontInCombo", mShowFontInCombo, True
  1377.     .WriteProperty "ComboFontCount", mComboFontCount, 20
  1378.     .WriteProperty "ComboFontSize", mComboFontSize, 8
  1379.     .WriteProperty "ComboFontBold", mComboFontBold, False
  1380.     .WriteProperty "ComboFontItalic", mComboFontItalic, False
  1381.     .WriteProperty "ComboWidth", mComboWidth, 250
  1382.     .WriteProperty "RecentMax", mRecentMax, 4
  1383.     .WriteProperty "RecentBackColor", mRecentBackColor, vbWindowBackground
  1384.     .WriteProperty "RecentForeColor", mRecentForeColor, vbWindowText
  1385.     .WriteProperty "ForeColor", mForeColor, vbWindowText
  1386.     .WriteProperty "BackColor", mBackColor, vbWindowBackground
  1387.     .WriteProperty "ComboForeColor", mComboForeColor, vbWindowText
  1388.     .WriteProperty "ComboBackColor", mComboBackColor, vbWindowBackground
  1389.     .WriteProperty "ComboSelectColor", mComboSelectColor, vbHighlight
  1390.     .WriteProperty "ButtonBackColor", mButtonBackColor, vbButtonFace
  1391.     .WriteProperty "ButtonForeColor", mButtonForeColor, vbButtonText
  1392.     .WriteProperty "ButtonOverColor", mButtonOverColor, vbBlue
  1393.     .WriteProperty "UseMouseWheel", mUseMouseWheel, False
  1394.     .WriteProperty "Font", UserControl.Font, Ambient.Font
  1395.     .WriteProperty "UsedBackColor", mUsedBackColor, vbInfoBackground
  1396.     .WriteProperty "UsedForeColor", mUsedForeColor, vbInfoText
  1397.     .WriteProperty "XPStyle", mXPStyle, True
  1398.     .WriteProperty "ShowFocus", mShowFocus, True
  1399. End With
  1400. End Sub
  1401.  
  1402. Public Property Get BorderStyle() As CfBdrStyle
  1403. BorderStyle = mBorderStyle
  1404. End Property
  1405.  
  1406. Public Property Let BorderStyle(ByVal vNewValue As CfBdrStyle)
  1407. mBorderStyle = vNewValue
  1408. UserControl_Resize
  1409. PropertyChanged "BorderStyle"
  1410. End Property
  1411.  
  1412. Private Function InvBdr(Bdr As CfBdrStyle) As CfBdrStyle
  1413. Select Case Bdr
  1414.     Case sNone
  1415.     InvBdr = sNone
  1416.     Case sRaised
  1417.     InvBdr = sSunken
  1418.     Case sSunken
  1419.     InvBdr = sRaised
  1420.     Case sBump
  1421.     InvBdr = sEtched
  1422.     Case sEtched
  1423.     InvBdr = sBump
  1424.     Case sSmoothRaised
  1425.     InvBdr = sSmoothSunken
  1426.     Case sSmoothSunken
  1427.     InvBdr = sSmoothRaised
  1428. End Select
  1429. End Function
  1430.  
  1431. Public Property Get ShowPreview() As Boolean
  1432. ShowPreview = mShowPreview
  1433. End Property
  1434.  
  1435. Public Property Let ShowPreview(ByVal vNewValue As Boolean)
  1436. mShowPreview = vNewValue
  1437. PropertyChanged "ShowPreview"
  1438. End Property
  1439.  
  1440. Public Property Get PreviewSize() As Integer
  1441. PreviewSize = mPreviewSize
  1442. End Property
  1443.  
  1444. Public Property Let PreviewSize(ByVal vNewValue As Integer)
  1445. If vNewValue > 10 And vNewValue < 200 Then
  1446. mPreviewSize = vNewValue
  1447. PropertyChanged "PreviewSize"
  1448. End If
  1449. End Property
  1450.  
  1451. Public Property Get Sorted() As Boolean
  1452. Sorted = mSorted
  1453. End Property
  1454.  
  1455. Public Property Let Sorted(ByVal vNewValue As Boolean)
  1456. Dim I As Integer
  1457. Dim fI As Integer
  1458. mSorted = vNewValue
  1459.  
  1460. If Ambient.UserMode = True Then
  1461. FillList
  1462. If mSorted = True Then SortList
  1463.     For I = 0 To mRecentCount - 1
  1464.     fI = FontExist(mRecent(I).fName)
  1465.     mRecent(I).fIndex = fI
  1466.     Next I
  1467. End If
  1468. DrawControl , True
  1469.  
  1470. PropertyChanged "Sorted"
  1471. End Property
  1472.  
  1473. Public Property Get ListFont(Index As Integer) As String
  1474. ListFont = mListFont(Index)
  1475. End Property
  1476.  
  1477.  
  1478. Public Property Get SelectedFont() As String
  1479. Attribute SelectedFont.VB_MemberFlags = "400"
  1480. SelectedFont = mListFont(mListPos)
  1481. End Property
  1482.  
  1483. Public Property Let SelectedFont(ByVal vNewValue As String)
  1484. Dim I As Integer
  1485.  
  1486. I = FontExist(vNewValue)
  1487. If I > -1 Then
  1488. mListPos = I
  1489. RaiseEvent SelectedFontChanged(mListFont(mListPos))
  1490. DrawControl , True
  1491. Else
  1492. RaiseEvent FontNotFound(vNewValue)
  1493. End If
  1494. End Property
  1495.  
  1496. Public Property Get ShowFontInCombo() As Boolean
  1497. ShowFontInCombo = mShowFontInCombo
  1498. End Property
  1499.  
  1500. Public Property Let ShowFontInCombo(ByVal vNewValue As Boolean)
  1501. mShowFontInCombo = vNewValue
  1502. PropertyChanged "ShowFontInCombo"
  1503. End Property
  1504.  
  1505. Public Property Get ComboFontCount() As Integer
  1506. ComboFontCount = mComboFontCount
  1507. End Property
  1508.  
  1509. Public Property Let ComboFontCount(ByVal vNewValue As Integer)
  1510. If vNewValue > 50 Or vNewValue < 5 Then vNewValue = 20
  1511. mComboFontCount = vNewValue
  1512.  
  1513. PropertyChanged "ComboFontCount"
  1514. End Property
  1515.  
  1516. Public Property Get ComboFontSize() As Integer
  1517. ComboFontSize = mComboFontSize
  1518. End Property
  1519.  
  1520. Public Property Let ComboFontSize(ByVal vNewValue As Integer)
  1521. If vNewValue > 50 Or vNewValue < 6 Then vNewValue = 8
  1522.  
  1523. mComboFontSize = vNewValue
  1524. PropertyChanged "ComboFontSize"
  1525. End Property
  1526.  
  1527. Public Property Get ComboWidth() As Single
  1528. ComboWidth = mComboWidth
  1529. End Property
  1530.  
  1531. Public Property Let ComboWidth(ByVal vNewValue As Single)
  1532. mComboWidth = vNewValue
  1533. PropertyChanged "ComboWidth"
  1534. End Property
  1535.  
  1536. Public Property Get RecentMax() As Integer
  1537. Attribute RecentMax.VB_Description = "If you don't want to use Recents feature enter 0"
  1538. RecentMax = mRecentMax
  1539. End Property
  1540.  
  1541. Public Property Let RecentMax(ByVal vNewValue As Integer)
  1542. mRecentMax = vNewValue
  1543. PropertyChanged "RecentMax"
  1544. End Property
  1545.  
  1546. Public Property Get RecentBackColor() As OLE_COLOR
  1547. RecentBackColor = mRecentBackColor
  1548. End Property
  1549.  
  1550. Public Property Let RecentBackColor(ByVal vNewValue As OLE_COLOR)
  1551. mRecentBackColor = vNewValue
  1552. PropertyChanged "RecentBackColor"
  1553. End Property
  1554.  
  1555. Public Property Get RecentForeColor() As OLE_COLOR
  1556. RecentForeColor = mRecentForeColor
  1557. End Property
  1558.  
  1559. Public Property Let RecentForeColor(ByVal vNewValue As OLE_COLOR)
  1560. mRecentForeColor = vNewValue
  1561. PropertyChanged "RecentForeColor"
  1562. End Property
  1563.  
  1564. Public Property Get ForeColor() As OLE_COLOR
  1565. ForeColor = mForeColor
  1566. End Property
  1567.  
  1568. Public Property Let ForeColor(ByVal vNewValue As OLE_COLOR)
  1569. mForeColor = vNewValue
  1570. UserControl.ForeColor = mForeColor
  1571. DrawControl , True
  1572. PropertyChanged "ForeColor"
  1573. End Property
  1574.  
  1575. Public Property Get BackColor() As OLE_COLOR
  1576. BackColor = mBackColor
  1577. End Property
  1578.  
  1579. Public Property Let BackColor(ByVal vNewValue As OLE_COLOR)
  1580. mBackColor = vNewValue
  1581. UserControl.BackColor = mBackColor
  1582. DrawControl , True
  1583. PropertyChanged "BackColor"
  1584. End Property
  1585.  
  1586. Public Property Get ComboForeColor() As OLE_COLOR
  1587. ComboForeColor = mComboForeColor
  1588. End Property
  1589.  
  1590. Public Property Let ComboForeColor(ByVal vNewValue As OLE_COLOR)
  1591. mComboForeColor = vNewValue
  1592. PropertyChanged "ComboForeColor"
  1593. End Property
  1594.  
  1595. Public Property Get ComboBackColor() As OLE_COLOR
  1596. ComboBackColor = mComboBackColor
  1597. End Property
  1598.  
  1599. Public Property Let ComboBackColor(ByVal vNewValue As OLE_COLOR)
  1600. mComboBackColor = vNewValue
  1601. PropertyChanged "ComboBackColor"
  1602. End Property
  1603.  
  1604. Public Property Get ComboSelectColor() As OLE_COLOR
  1605. ComboSelectColor = mComboSelectColor
  1606. End Property
  1607.  
  1608. Public Property Let ComboSelectColor(ByVal vNewValue As OLE_COLOR)
  1609. mComboSelectColor = vNewValue
  1610. PropertyChanged "ComboSelectColor"
  1611. End Property
  1612.  
  1613. Public Sub LoadRecentFonts(MyHkey As HkeyLoc2, MyGroup As String, MySection As String, myKey As String)
  1614. Dim I As Integer
  1615. Dim fN As String
  1616. Dim fI As Integer
  1617.  
  1618. ReDim mRecent(mRecentMax)
  1619.  
  1620. For I = 0 To mRecentMax - 1
  1621. fN = ReadValue(MyHkey, MyGroup & "\" & MySection & "\" & myKey, "RecentFontName" & I + 1, "")
  1622. fI = FontExist(fN)
  1623.     If fI > -1 Then
  1624.     mRecent(I).fName = fN
  1625.     mRecent(I).fIndex = fI
  1626.     End If
  1627. Next I
  1628. SetRecents
  1629. End Sub
  1630. Public Sub SaveRecentFonts(MyHkey As HkeyLoc2, MyGroup As String, MySection As String, myKey As String)
  1631. Dim I As Integer
  1632.  
  1633. For I = 0 To mRecentCount - 1
  1634. SetValue MyHkey, MyGroup & "\" & MySection & "\" & myKey, "RecentFontName" & I + 1, mRecent(I).fName
  1635. Next I
  1636. End Sub
  1637.  
  1638. Public Property Get UseMouseWheel() As Boolean
  1639. UseMouseWheel = mUseMouseWheel
  1640. End Property
  1641.  
  1642. Public Property Let UseMouseWheel(ByVal vNewValue As Boolean)
  1643. mUseMouseWheel = vNewValue
  1644. PropertyChanged "UseMouseWheel"
  1645. End Property
  1646.  
  1647. Public Sub ClearRecent()
  1648. mRecentCount = 0
  1649. ReDim mRecent(0)
  1650. End Sub
  1651.  
  1652. Public Property Get Font() As StdFont
  1653. Set Font = UserControl.Font
  1654. End Property
  1655.  
  1656. Public Property Set Font(ByVal vNewValue As StdFont)
  1657. Set UserControl.Font = vNewValue
  1658. UserControl_Resize
  1659. PropertyChanged "Font"
  1660. End Property
  1661.  
  1662. Public Property Get hWnd() As Long
  1663. hWnd = UserControl.hWnd
  1664. End Property
  1665.  
  1666. Public Property Get ShowFontName() As Boolean
  1667. ShowFontName = mShowFontName
  1668. End Property
  1669.  
  1670. Public Property Let ShowFontName(ByVal vNewValue As Boolean)
  1671. mShowFontName = vNewValue
  1672. PropertyChanged "ShowFontName"
  1673. End Property
  1674.  
  1675. Private Sub FillList()
  1676. Dim I As Integer
  1677.  
  1678. mListCount = Screen.FontCount - 1
  1679. ReDim mListFont(mListCount)
  1680.  
  1681. For I = 0 To Screen.FontCount - 1
  1682. mListFont(I) = Screen.Fonts(I)
  1683. Next I
  1684. End Sub
  1685.  
  1686. Public Property Get ComboFontBold() As Boolean
  1687. Attribute ComboFontBold.VB_MemberFlags = "400"
  1688. ComboFontBold = mComboFontBold
  1689. End Property
  1690.  
  1691. Public Property Let ComboFontBold(ByVal vNewValue As Boolean)
  1692. mComboFontBold = vNewValue
  1693. PropertyChanged "ComboFontBold"
  1694. End Property
  1695.  
  1696. Public Property Get ComboFontItalic() As Boolean
  1697. Attribute ComboFontItalic.VB_MemberFlags = "400"
  1698. ComboFontItalic = mComboFontItalic
  1699. End Property
  1700.  
  1701. Public Property Let ComboFontItalic(ByVal vNewValue As Boolean)
  1702. mComboFontItalic = vNewValue
  1703. PropertyChanged "ComboFontItalic"
  1704. End Property
  1705.  
  1706. Public Property Get ButtonBackColor() As OLE_COLOR
  1707. ButtonBackColor = mButtonBackColor
  1708. End Property
  1709.  
  1710. Public Property Let ButtonBackColor(ByVal vNewValue As OLE_COLOR)
  1711. mButtonBackColor = vNewValue
  1712. DrawControl , True
  1713. PropertyChanged "ButtonBackColor"
  1714. End Property
  1715.  
  1716. Public Property Get ButtonOverColor() As OLE_COLOR
  1717. ButtonOverColor = mButtonOverColor
  1718. End Property
  1719.  
  1720. Public Property Let ButtonOverColor(ByVal vNewValue As OLE_COLOR)
  1721. mButtonOverColor = vNewValue
  1722. PropertyChanged "ButtonOverColor"
  1723. End Property
  1724.  
  1725. Public Property Let ButtonForeColor(ByVal vNewValue As OLE_COLOR)
  1726. mButtonForeColor = vNewValue
  1727. DrawControl , True
  1728. PropertyChanged "ButtonForeColor"
  1729. End Property
  1730.  
  1731. Public Property Get ButtonBorderStyle() As CfBdrStyle
  1732. ButtonBorderStyle = mButtonBorderStyle
  1733. End Property
  1734.  
  1735. Public Property Let ButtonBorderStyle(ByVal vNewValue As CfBdrStyle)
  1736. mButtonBorderStyle = vNewValue
  1737. DrawControl , True
  1738. PropertyChanged "ButtonBorderStyle"
  1739. End Property
  1740.  
  1741. Public Function AddToUsedList(FontName As String) As Integer
  1742. Dim I As Integer
  1743. Dim F As Boolean
  1744.  
  1745. For I = 0 To mUsedCount - 1
  1746.     If LCase(mUsedList(I)) = LCase(FontName) Then
  1747.     F = True
  1748.     Exit For
  1749.     End If
  1750. Next I
  1751.  
  1752. If F = False Then
  1753. mUsedCount = mUsedCount + 1
  1754. ReDim Preserve mUsedList(mUsedCount)
  1755. mUsedList(mUsedCount - 1) = FontName
  1756. AddToUsedList = mUsedCount - 1
  1757. Else
  1758. AddToUsedList = -1
  1759. End If
  1760. End Function
  1761.  
  1762. Public Sub RemoveFromUsedList(FontName As String)
  1763. Dim I As Integer
  1764. Dim tUL() As String
  1765. Dim fQ As Integer
  1766.  
  1767. ReDim tUL(mUsedCount)
  1768.  
  1769. fQ = 1
  1770.  
  1771. For I = 0 To mUsedCount - 1
  1772.     If LCase(mUsedList(I)) <> LCase(FontName) Then
  1773.     tUL(fQ - 1) = mUsedList(I)
  1774.     fQ = fQ + 1
  1775.     End If
  1776. Next I
  1777.  
  1778. mUsedList = tUL
  1779.  
  1780. mUsedCount = fQ
  1781. ReDim Preserve mUsedList(mUsedCount)
  1782. End Sub
  1783.  
  1784. Public Property Get UsedCount() As Integer
  1785. UsedCount = mUsedCount
  1786. End Property
  1787.  
  1788. Public Sub ClearUsedList()
  1789. mUsedCount = 0
  1790. ReDim mUsedList(0)
  1791. End Sub
  1792.  
  1793. Public Property Get UsedBackColor() As OLE_COLOR
  1794. UsedBackColor = mUsedBackColor
  1795. End Property
  1796.  
  1797. Public Property Let UsedBackColor(ByVal vNewValue As OLE_COLOR)
  1798. mUsedBackColor = vNewValue
  1799. PropertyChanged "UsedBackColor"
  1800. End Property
  1801.  
  1802. Public Property Get UsedForeColor() As OLE_COLOR
  1803. UsedForeColor = mUsedForeColor
  1804. End Property
  1805.  
  1806. Public Property Let UsedForeColor(ByVal vNewValue As OLE_COLOR)
  1807. mUsedForeColor = vNewValue
  1808. PropertyChanged "UsedForeColor"
  1809. End Property
  1810.  
  1811. Public Property Get XPStyle() As Boolean
  1812. XPStyle = mXPStyle
  1813. End Property
  1814.  
  1815. Public Property Let XPStyle(ByVal vNewValue As Boolean)
  1816. mXPStyle = vNewValue
  1817.  
  1818. UserControl_Resize
  1819. PropertyChanged "XPStyle"
  1820. End Property
  1821.  
  1822. Public Property Get ShowFocus() As Boolean
  1823. ShowFocus = mShowFocus
  1824. End Property
  1825.  
  1826. Public Property Let ShowFocus(ByVal vNewValue As Boolean)
  1827. mShowFocus = vNewValue
  1828. PropertyChanged "ShowFocus"
  1829. End Property
  1830.  
  1831. Private Sub VScroll1_Change()
  1832. Dim tFont As String
  1833.  
  1834. If doNothing = True Then Exit Sub
  1835. fPos = VScroll1.Value
  1836. DrawList
  1837.  
  1838. tFont = fList(fPos - VScroll1.Value).fName
  1839.  
  1840. ShowFont tFont
  1841. End Sub
  1842.  
  1843. Private Sub VScroll1_GotFocus()
  1844. PicList.SetFocus
  1845. End Sub
  1846.  
  1847. Private Sub VScroll1_KeyDown(KeyCode As Integer, Shift As Integer)
  1848. UserControl_KeyDown KeyCode, Shift
  1849. End Sub
  1850.  
  1851.  
  1852.