home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 4_2005-2006.ISO / data / Zips / Letter_Dro191067782005.psc / Controls / ucTitleBar.ctl
Text File  |  2005-07-07  |  7KB  |  236 lines

  1. VERSION 5.00
  2. Begin VB.UserControl ucTitleBar 
  3.    ClientHeight    =   420
  4.    ClientLeft      =   0
  5.    ClientTop       =   0
  6.    ClientWidth     =   2370
  7.    ScaleHeight     =   420
  8.    ScaleWidth      =   2370
  9. End
  10. Attribute VB_Name = "ucTitleBar"
  11. Attribute VB_GlobalNameSpace = False
  12. Attribute VB_Creatable = True
  13. Attribute VB_PredeclaredId = False
  14. Attribute VB_Exposed = False
  15. ' ucTitleBar.ctl \ redbird77@earthlink.net \ 2005 July 06
  16. ' ___________________________________________________________________
  17. '
  18. ' A simple TitleBar control for a form with no titlebar.
  19. '
  20. ' Possible enhancements:
  21. ' 1. More exposed properties and events.  More customizeable.
  22. ' 2. More buttons other than "exit".  Perhaps an enumeration of standard
  23. '    titlebar buttons (minimize, maximize, system menu, help, etc.)
  24. ' 3. To add to #2, some nifty buttons like always-on-top and minimize-to-
  25. '    system-tray.
  26. ' 4. All the above buttons represented with icons or text. (+ tooltips).
  27. ' 5. An Align property like a picturebox.
  28. ' 6. But of course - gradients!
  29.  
  30. Option Explicit
  31.  
  32. Private Const HTCAPTION        As Long = 2
  33. Private Const WM_NCLBUTTONDOWN As Long = &HA1
  34.  
  35. Private Declare Function ReleaseCapture Lib "user32" () As Long
  36. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  37.  
  38. Private Const DEF_CAPTION           As String = "Caption"
  39. Private Const DEF_CAPTIONFORECOLOR  As Long = vbWindowText
  40. Private Const DEF_CAPTIONBACKCOLOR  As Long = vbButtonFace
  41. Private Const DEF_PADDING           As Long = 6
  42.  
  43. Private m_lCaptionForeColor As OLE_COLOR
  44. Private m_lCaptionBackColor As OLE_COLOR
  45. Private m_sCaption          As String
  46. Private m_oFont             As StdFont
  47. Attribute m_oFont.VB_VarHelpID = -1
  48. Private m_lPadding          As Long
  49. Private m_lWidth            As Long
  50.  
  51. Private Sub UserControl_Show()
  52.  
  53.     ' Must I wait til here to get this info, or I get a "Client Site Not
  54.     ' Available" error?
  55.     m_lWidth = UserControl.Parent.Width
  56.     
  57. End Sub
  58.  
  59. Private Sub UserControl_Terminate()
  60.  
  61.     Set m_oFont = Nothing
  62.  
  63. End Sub
  64.  
  65. Private Sub UserControl_InitProperties()
  66.  
  67. ' This sub is called only once, when the control is first placed on a form.
  68. ' Subsequently, the UserControl_Paint event is fired.
  69.  
  70.     ' Set the default UserControl properties.
  71.     m_sCaption = DEF_CAPTION
  72.     m_lCaptionForeColor = DEF_CAPTIONFORECOLOR
  73.     m_lCaptionBackColor = DEF_CAPTIONBACKCOLOR
  74.     m_lPadding = DEF_PADDING
  75.     
  76.     ' The default font is the parent's font.
  77.     Set m_oFont = Ambient.Font
  78.     
  79. End Sub
  80.  
  81. Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  82.    
  83. Dim r   As Long
  84.  
  85.     ' Clicked in caption-area, move parent form.
  86.     If X < UserControl.Width - UserControl.TextWidth("X") Then
  87.     
  88.         r = ReleaseCapture()
  89.         r = SendMessage(UserControl.Parent.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, ByVal 0&)
  90.     
  91.     ' Clicked in exit-area, close parent form.
  92.     Else
  93.     
  94.         Unload UserControl.Parent
  95.     
  96.     End If
  97.  
  98. End Sub
  99.  
  100. Private Sub UserControl_Paint()
  101.  
  102.     With UserControl
  103.  
  104.         Set .Font = m_oFont
  105.         .Height = .TextHeight(m_sCaption) + (m_lPadding * Screen.TwipsPerPixelY)
  106.     
  107.         ' Draw caption.
  108.         .Cls
  109.         
  110.         .CurrentX = (4 * Screen.TwipsPerPixelY) ' 4 is hardcoded for now.
  111.         .CurrentY = (.Height \ 2) - (.TextHeight(m_sCaption) \ 2)
  112.         
  113.         .ForeColor = m_lCaptionForeColor
  114.         .BackColor = m_lCaptionBackColor
  115.         
  116.         UserControl.Print m_sCaption
  117.         
  118.         ' Draw exit.
  119.         .CurrentX = (.Width - (4 * Screen.TwipsPerPixelX)) - .TextWidth("X")
  120.         .CurrentY = (.Height \ 2) - (.TextHeight("X") \ 2)
  121.         
  122.         UserControl.Print "X"
  123.         
  124.         ' Draw border.
  125.         UserControl.Line (0, 0)- _
  126.                          (.Width - 1 * Screen.TwipsPerPixelX, _
  127.                           .Height - 1 * Screen.TwipsPerPixelY), m_lCaptionForeColor, B
  128.         
  129.     End With
  130.  
  131. End Sub
  132.  
  133. Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  134.  
  135. ' Still trying to get the whole Font property implemented correctly.
  136.  
  137.     m_sCaption = PropBag.ReadProperty("Caption", DEF_CAPTION)
  138.     m_lCaptionForeColor = PropBag.ReadProperty("CaptionForeColor", DEF_CAPTIONFORECOLOR)
  139.     m_lCaptionBackColor = PropBag.ReadProperty("CaptionBackColor", DEF_CAPTIONBACKCOLOR)
  140.     Set m_oFont = PropBag.ReadProperty("Font", Ambient.Font)
  141.     m_lPadding = PropBag.ReadProperty("Padding", DEF_PADDING)
  142.     
  143.     Call UserControl.Refresh
  144.     
  145. End Sub
  146.  
  147. Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  148.  
  149.     Call PropBag.WriteProperty("Caption", m_sCaption, DEF_CAPTION)
  150.     Call PropBag.WriteProperty("CaptionForeColor", m_lCaptionForeColor, DEF_CAPTIONFORECOLOR)
  151.     Call PropBag.WriteProperty("CaptionBackColor", m_lCaptionBackColor, DEF_CAPTIONBACKCOLOR)
  152.     Call PropBag.WriteProperty("Font", m_oFont) ', DEF_FONT)
  153.     Call PropBag.WriteProperty("Padding", m_lPadding, DEF_PADDING)
  154.     
  155. End Sub
  156.  
  157. Public Property Get Caption() As String
  158.  
  159.     Caption = m_sCaption
  160.  
  161. End Property
  162.  
  163. Public Property Let Caption(ByVal n As String)
  164.  
  165.     m_sCaption = n
  166.     
  167.     Call UserControl.PropertyChanged("Caption")
  168.     Call UserControl.Refresh
  169.  
  170. End Property
  171.  
  172. Public Property Get CaptionBackColor() As OLE_COLOR
  173.  
  174.     CaptionBackColor = m_lCaptionBackColor
  175.     
  176. End Property
  177.  
  178. Public Property Let CaptionBackColor(ByVal n As OLE_COLOR)
  179.  
  180.     m_lCaptionBackColor = n
  181.  
  182.     Call UserControl.PropertyChanged("CaptionBackColor")
  183.     Call UserControl.Refresh
  184.  
  185. End Property
  186.  
  187. Public Property Get CaptionForeColor() As OLE_COLOR
  188.  
  189.     CaptionForeColor = m_lCaptionForeColor
  190.  
  191. End Property
  192.  
  193. Public Property Let CaptionForeColor(ByVal n As OLE_COLOR)
  194.  
  195.     m_lCaptionForeColor = n
  196.  
  197.     Call UserControl.PropertyChanged("CaptionForeColor")
  198.     Call UserControl.Refresh
  199.  
  200. End Property
  201.  
  202. Public Property Get Font() As StdFont
  203.  
  204.     Set Font = m_oFont
  205.  
  206. End Property
  207.  
  208. Public Property Set Font(ByRef n As StdFont)
  209.  
  210.     With m_oFont
  211.         .Bold = n.Bold
  212.         .Italic = n.Italic
  213.         .Name = n.Name
  214.         .Size = n.Size
  215.     End With
  216.  
  217.     Call UserControl.PropertyChanged("Font")
  218.     Call UserControl.Refresh
  219.  
  220. End Property
  221.  
  222. Public Property Get Padding() As Long
  223.  
  224.     Padding = m_lPadding
  225.  
  226. End Property
  227.  
  228. Public Property Let Padding(ByVal n As Long)
  229.  
  230.     m_lPadding = n
  231.  
  232.     Call UserControl.PropertyChanged("Padding")
  233.     Call UserControl.Refresh
  234.     
  235. End Property
  236.