home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 7_2009-2012.ISO / data / zips / Xp_style_S21706612172009.psc / XPSlider_Firstversion / XPSlider.ctl < prev   
Text File  |  2009-12-15  |  17KB  |  527 lines

  1. VERSION 5.00
  2. Begin VB.UserControl XPSlider 
  3.    Appearance      =   0  'Flat
  4.    AutoRedraw      =   -1  'True
  5.    BackColor       =   &H80000005&
  6.    ClientHeight    =   1050
  7.    ClientLeft      =   0
  8.    ClientTop       =   0
  9.    ClientWidth     =   3075
  10.    BeginProperty Font 
  11.       Name            =   "Tahoma"
  12.       Size            =   8.25
  13.       Charset         =   0
  14.       Weight          =   400
  15.       Underline       =   0   'False
  16.       Italic          =   0   'False
  17.       Strikethrough   =   0   'False
  18.    EndProperty
  19.    ForeColor       =   &H80000006&
  20.    ScaleHeight     =   70
  21.    ScaleMode       =   3  'Pixel
  22.    ScaleWidth      =   205
  23.    ToolboxBitmap   =   "XPSlider.ctx":0000
  24.    Begin VB.CommandButton cmdRight 
  25.       BackColor       =   &H00000080&
  26.       Height          =   195
  27.       Left            =   2670
  28.       TabIndex        =   2
  29.       Top             =   45
  30.       Width           =   240
  31.    End
  32.    Begin VB.CommandButton cmdLeft 
  33.       BackColor       =   &H00000080&
  34.       Height          =   195
  35.       Left            =   180
  36.       TabIndex        =   1
  37.       Top             =   45
  38.       Width           =   240
  39.    End
  40.    Begin VB.PictureBox pic1 
  41.       AutoRedraw      =   -1  'True
  42.       BackColor       =   &H00FFFFFF&
  43.       BorderStyle     =   0  'None
  44.       FillColor       =   &H008080FF&
  45.       Height          =   120
  46.       Left            =   420
  47.       ScaleHeight     =   8
  48.       ScaleMode       =   3  'Pixel
  49.       ScaleWidth      =   151
  50.       TabIndex        =   0
  51.       Top             =   90
  52.       Width           =   2265
  53.       Begin VB.Label Label1 
  54.          Alignment       =   2  'Center
  55.          BackStyle       =   0  'Transparent
  56.          Caption         =   "0"
  57.          Height          =   165
  58.          Left            =   1140
  59.          TabIndex        =   3
  60.          Top             =   -30
  61.          Width           =   375
  62.       End
  63.       Begin VB.Image imgKnob 
  64.          Height          =   120
  65.          Left            =   0
  66.          Picture         =   "XPSlider.ctx":0312
  67.          Top             =   0
  68.          Width           =   240
  69.       End
  70.    End
  71. End
  72. Attribute VB_Name = "XPSlider"
  73. Attribute VB_GlobalNameSpace = False
  74. Attribute VB_Creatable = True
  75. Attribute VB_PredeclaredId = False
  76. Attribute VB_Exposed = False
  77. Option Explicit
  78.  
  79. Private mMin              As Long         'Minimum value range
  80. Private mMax              As Long         'Maximum value range
  81. Private mValue            As Long         'Current Value
  82. Private mSliderWH      As Long
  83. Private mBaseColor          As OLE_COLOR
  84. Private mMidColor          As OLE_COLOR
  85.  
  86. Event Changed()
  87.  
  88. Private Declare Function TranslateColor Lib "olepro32.dll" Alias "OleTranslateColor" (ByVal clr As OLE_COLOR, ByVal palet As Long, Col As Long) As Long
  89. '------------------------------------------------------------
  90. 'draw and set rectangular area of the control
  91. Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
  92. Private Declare Function FrameRect Lib "user32" (ByVal hDC As Long, lpRect As RECT, ByVal hBrush As Long) As Long
  93.  
  94. 'draw by pixel or by line
  95. Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
  96. Private Declare Function SetPixel Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
  97. Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
  98.  
  99. 'select and delete created objects
  100. Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
  101. Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
  102.  
  103. 'create regions of pixels and remove them to make the control transparent
  104. Private Declare Function CreateRectRgn Lib "gdi32" (ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Long
  105. Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
  106. Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
  107. Private Const RGN_DIFF As Long = 4
  108.  
  109. Private Type RECT
  110.   Left As Long
  111.   Top As Long
  112.   Right As Long
  113.   Bottom As Long
  114. End Type
  115.  
  116. Private Type POINTAPI
  117.   x As Long
  118.   y As Long
  119. End Type
  120.  
  121. Private Const m_def_ValueVis = True
  122. Private Const m_def_ValueCol = vbBlack
  123.  
  124. Private m_ValueVis As Boolean
  125. Private m_ValueCol As OLE_COLOR
  126.  
  127. Private rc As RECT
  128. Private W As Long, H As Long
  129. Private regMain As Long, rgn1 As Long
  130. Private R As Long, l As Long, t As Long, B As Long
  131.  
  132. Private Sub UserControl_Initialize()
  133.    m_ValueVis = m_def_ValueVis
  134.    m_ValueCol = m_def_ValueCol
  135. End Sub
  136.  
  137. Private Sub UserControl_Resize()
  138.   GetClientRect UserControl.hwnd, rc
  139.   With rc
  140.     R = .Right - 1: l = .Left: t = .Top: B = .Bottom
  141.     W = .Right: H = .Bottom
  142.   End With
  143.   
  144.   UserControl.Cls
  145.   UserControl.Height = 306
  146.   DrawButton
  147.   DrawRail
  148.   'set position and size of controls
  149.   cmdRight.Left = UserControl.ScaleWidth - 30
  150.   cmdRight.Top = 3
  151.   cmdLeft.Left = 12
  152.   cmdLeft.Top = 3
  153.   pic1.Left = 28
  154.   pic1.Top = 6
  155.   pic1.Width = cmdRight.Left - (cmdRight.Width * 2 - 15)
  156.   Label1.FontName = "Tahoma"
  157.   Label1.FontSize = 7
  158.   Label1.Left = imgKnob.Left + imgKnob.Width + 5
  159. End Sub
  160.  
  161. Private Sub UserControl_InitProperties()
  162.     mMin = 0
  163.     mMax = 100
  164.     mValue = 0
  165.     mSliderWH = 400
  166.     mBaseColor = vbBlue
  167.     mMidColor = &HFFFFFE
  168.     PositionSlider
  169. End Sub
  170.  
  171. Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  172.    With PropBag
  173.         mMin = .ReadProperty("Min", 0)
  174.         mMax = .ReadProperty("Max", 100)
  175.         mValue = .ReadProperty("Value", 50)
  176.         mSliderWH = .ReadProperty("SliderWid_Height", 315)
  177.         BaseColor = .ReadProperty("BaseColor", vbBlue)
  178.         MidColor = .ReadProperty("MidColor", mMidColor)
  179.         ValueVis = .ReadProperty("ValueVis", m_def_ValueVis)
  180.         ValueCol = .ReadProperty("ValueCol", m_def_ValueCol)
  181.     End With
  182.     PositionSlider
  183. End Sub
  184.  
  185. Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  186.     With PropBag
  187.         .WriteProperty "Min", mMin, 0
  188.         .WriteProperty "Max", mMax, 100
  189.         .WriteProperty "Value", mValue, 50
  190.         .WriteProperty "SliderWid_Height", mSliderWH, 315
  191.         .WriteProperty "BaseColor", mBaseColor, vbBlue
  192.         .WriteProperty "MidColor", mMidColor, vbWhite
  193.         .WriteProperty "ValueVis", m_ValueVis, m_def_ValueVis
  194.         .WriteProperty "ValueCol", m_ValueCol, m_def_ValueCol
  195.     End With
  196. End Sub
  197.  
  198. Private Sub pic1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  199. Dim lngPos                  As Long
  200. Dim sglScale                As Single
  201.     
  202.     With imgKnob
  203.             lngPos = ((x - mSliderWH / 2) \ 15) * 16
  204.             If lngPos < 0 Then
  205.                 lngPos = 0
  206.             ElseIf lngPos > pic1.ScaleWidth - mSliderWH Then
  207.                 lngPos = pic1.ScaleWidth - mSliderWH
  208.             End If
  209.             
  210.             .Left = lngPos
  211.             sglScale = (pic1.ScaleWidth - mSliderWH) / (mMax - mMin)
  212.             mValue = (lngPos / sglScale) + mMin
  213.             RaiseEvent Changed
  214.     End With
  215.     PositionSlider
  216.     If ValueVis = False Then Exit Sub
  217.       If mValue <= Max / 2 Then
  218.          Label1.Left = imgKnob.Left + imgKnob.Width + 5
  219.       Else
  220.          Label1.Left = imgKnob.Left - imgKnob.Width - (Label1.Width / 2)
  221.        End If
  222.      Label1.Caption = mValue
  223.    
  224. End Sub
  225.  
  226. Private Sub imgKnob_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
  227.  
  228. Dim lngPos                  As Long
  229. Dim sglScale                As Single
  230.  
  231.     If Button = vbLeftButton Then
  232.         With imgKnob
  233.                 lngPos = ((.Left + x - mSliderWH / 2) \ 15) * 16
  234.                 If lngPos < 0 Then
  235.                     lngPos = 0
  236.                 ElseIf lngPos > pic1.ScaleWidth - mSliderWH Then
  237.                     lngPos = pic1.ScaleWidth - mSliderWH
  238.                 End If
  239.                              
  240.                 .Left = lngPos
  241.                 sglScale = ((pic1.ScaleWidth - mSliderWH)) / (mMax - mMin)
  242.                 mValue = (lngPos / sglScale) + mMin
  243.                 RaiseEvent Changed
  244.                 If ValueVis = False Then Exit Sub
  245.                    If mValue <= Max / 2 Then
  246.                       Label1.Left = imgKnob.Left + imgKnob.Width + 5
  247.                    Else
  248.                       Label1.Left = imgKnob.Left - imgKnob.Width - (Label1.Width / 2)
  249.                    End If
  250.                    Label1.Caption = mValue
  251.                 
  252.         End With
  253.     End If
  254.     
  255. End Sub
  256.  
  257. Private Function PositionSlider()
  258.  
  259. Dim sglScale                As Single
  260.  
  261.     With imgKnob
  262.         If mMax - mMin <> 0 Then
  263.             sglScale = (pic1.ScaleWidth - mSliderWH) / (mMax - mMin)
  264.             .Left = (mValue - mMin) * sglScale
  265.         End If
  266.     End With
  267. End Function
  268.  
  269. Private Sub DrawButton()
  270. Dim pt As POINTAPI, Pen As Long, hPen As Long
  271. Dim I As Long, ColorR As Long, ColorG As Long, ColorB As Long
  272. Dim hBrush As Long
  273.  
  274.   With UserControl
  275.   
  276.     hBrush = CreateSolidBrush(RGB(0, 60, 116))
  277.     FrameRect UserControl.hDC, rc, hBrush
  278.     DeleteObject hBrush
  279.     
  280.     'Left top corner
  281.     SetPixel .hDC, l, t + 1, RGB(122, 149, 168)
  282.     SetPixel .hDC, l + 1, t + 1, RGB(37, 87, 131)
  283.     SetPixel .hDC, l + 1, t, RGB(122, 149, 168)
  284.     
  285.     'right top corner
  286.     SetPixel .hDC, R - 1, t, RGB(122, 149, 168)
  287.     SetPixel .hDC, R - 1, t + 1, RGB(37, 87, 131)
  288.     SetPixel .hDC, R, t + 1, RGB(122, 149, 168)
  289.     
  290.     'left bottom corner
  291.     SetPixel .hDC, l, B - 2, RGB(122, 149, 168)
  292.     SetPixel .hDC, l + 1, B - 2, RGB(37, 87, 131)
  293.     SetPixel .hDC, l + 1, B - 1, RGB(122, 149, 168)
  294.     
  295.     'right bottom corner
  296.     SetPixel .hDC, R, B - 2, RGB(122, 149, 168)
  297.     SetPixel .hDC, R - 1, B - 2, RGB(37, 87, 131)
  298.     SetPixel .hDC, R - 1, B - 1, RGB(122, 149, 168)
  299.   End With
  300.   
  301.   DeleteObject regMain
  302.   regMain = CreateRectRgn(0, 0, W, H)
  303.   rgn1 = CreateRectRgn(0, 0, 1, 1)            'Left top coner
  304.   CombineRgn regMain, regMain, rgn1, RGN_DIFF
  305.   DeleteObject rgn1
  306.   rgn1 = CreateRectRgn(0, H - 1, 1, H)      'Left bottom corner
  307.   CombineRgn regMain, regMain, rgn1, RGN_DIFF
  308.   DeleteObject rgn1
  309.   rgn1 = CreateRectRgn(W - 1, 0, W, 1)      'Right top corner
  310.   CombineRgn regMain, regMain, rgn1, RGN_DIFF
  311.   DeleteObject rgn1
  312.   rgn1 = CreateRectRgn(W - 1, H - 1, W, H) 'Right bottom corner
  313.   CombineRgn regMain, regMain, rgn1, RGN_DIFF
  314.   DeleteObject rgn1
  315.   SetWindowRgn UserControl.hwnd, regMain, True
  316.   
  317.   'draw screws
  318.   UserControl.DrawWidth = 1
  319.   UserControl.Circle (8, UserControl.ScaleHeight - 10), 3, vbBlack        'left screw bottom
  320.   UserControl.Line (8, UserControl.ScaleHeight - 12)-(9, UserControl.ScaleHeight - 6), &H404040
  321.   UserControl.Circle (UserControl.ScaleWidth - 10, UserControl.ScaleHeight - 10), 3, vbBlack        'right screw bottom
  322.   UserControl.Line (UserControl.ScaleWidth - 12, UserControl.ScaleHeight - 12)-(UserControl.ScaleWidth - 7, UserControl.ScaleHeight - 7), &H404040
  323. End Sub
  324.  
  325. Private Sub DrawRail()
  326. Dim x As Integer
  327. pic1.ScaleMode = 3
  328. For x = 0 To 7
  329.    Select Case x
  330.       Case 0, 7
  331.          pic1.ForeColor = BlendColors(BaseColor, MidColor, 45)
  332.       Case 1, 6
  333.          pic1.ForeColor = BlendColors(BaseColor, MidColor, 62)
  334.       Case 2, 5
  335.          pic1.ForeColor = BlendColors(BaseColor, MidColor, 72)
  336.       Case 3
  337.          pic1.ForeColor = BlendColors(BaseColor, MidColor, 100)
  338.       Case 4
  339.          pic1.ForeColor = BlendColors(BaseColor, MidColor, 82)
  340.    End Select
  341.    pic1.Line (0, x)-(pic1.ScaleWidth, x)
  342. Next x
  343.    pic1.Line (0, 0)-(0, 8)
  344.    pic1.Line (pic1.ScaleWidth - 1, 0)-(pic1.ScaleWidth - 1, 8)
  345.    pic1.ScaleMode = 1
  346. End Sub
  347.  
  348. Private Sub cmdRight_Click()
  349.    Value = Value + 1
  350.  
  351.    If ValueVis = False Then Exit Sub
  352.       If mValue <= Max / 2 Then
  353.          Label1.Left = imgKnob.Left + imgKnob.Width + 5
  354.       Else
  355.          Label1.Left = imgKnob.Left - imgKnob.Width - (Label1.Width / 2)
  356.        End If
  357.      Label1.Caption = mValue
  358.    
  359. End Sub
  360.  
  361. Private Sub cmdLeft_Click()
  362.    Value = Value - 1
  363.  
  364.    If ValueVis = False Then Exit Sub
  365.       If mValue <= Max / 2 Then
  366.          Label1.Left = imgKnob.Left + imgKnob.Width + 5
  367.       Else
  368.          Label1.Left = imgKnob.Left - imgKnob.Width - (Label1.Width / 2)
  369.        End If
  370.      Label1.Caption = mValue
  371.    
  372. End Sub
  373.  
  374. Public Sub GetRGB(R As Integer, G As Integer, B As Integer, ByVal Color As Long)
  375.     Dim TempValue As Long
  376.     
  377.     TranslateColor Color, 0, TempValue
  378.     
  379.     R = TempValue And &HFF&
  380.     G = (TempValue And &HFF00&) / 2 ^ 8
  381.     B = (TempValue And &HFF0000) / 2 ^ 16
  382. End Sub
  383.  
  384. Public Function BlendColors(ByVal Color1 As Long, ByVal Color2 As Long, ByVal Percentage As Single) As Long
  385.     On Error Resume Next
  386.     
  387.     Dim R(2) As Integer, G(2) As Integer, B(2) As Integer
  388.     Dim fPercentage(2) As Single
  389.     Dim DAmt(2) As Single
  390.     
  391.     Percentage = SetBound(Percentage, 0, 100)
  392.     
  393.     GetRGB R(0), G(0), B(0), Color1
  394.     GetRGB R(1), G(1), B(1), Color2
  395.     
  396.     DAmt(0) = R(1) - R(0): fPercentage(0) = (DAmt(0) / 100) * Percentage
  397.     DAmt(1) = G(1) - G(0): fPercentage(1) = (DAmt(1) / 100) * Percentage
  398.     DAmt(2) = B(1) - B(0): fPercentage(2) = (DAmt(2) / 100) * Percentage
  399.     
  400.     R(2) = R(0) + fPercentage(0)
  401.     G(2) = G(0) + fPercentage(1)
  402.     B(2) = B(0) + fPercentage(2)
  403.     
  404.     BlendColors = RGB(R(2), G(2), B(2))
  405. End Function
  406.  
  407. Private Function SetBound(ByVal Num As Single, ByVal MinNum As Single, ByVal MaxNum As Single) As Single
  408.  
  409.     If Num < MinNum Then
  410.         SetBound = MinNum
  411.     ElseIf Num > MaxNum Then
  412.         SetBound = MaxNum
  413.     Else
  414.         SetBound = Num
  415.     End If
  416. End Function
  417.  
  418. Public Property Get BaseColor() As OLE_COLOR
  419.    BaseColor = mBaseColor
  420. End Property
  421.  
  422. Public Property Let BaseColor(NewValue As OLE_COLOR)
  423.    mBaseColor = NewValue
  424.    PropertyChanged "BaseColor"
  425.    UserControl_Resize
  426.    DrawRail
  427. End Property
  428.  
  429. Public Property Get MidColor() As OLE_COLOR
  430.    MidColor = mMidColor
  431. End Property
  432.  
  433. Public Property Let MidColor(NewValue As OLE_COLOR)
  434.    mMidColor = NewValue
  435.    If mMidColor = vbWhite Then mMidColor = &HFFFFFE  ' Does'nt like vbWhite (HFFFFFF),I think its because of something in the BlendColors Procedure
  436.    PropertyChanged "MidColor"
  437.    UserControl_Resize
  438.    DrawRail
  439. End Property
  440.  
  441. Public Property Get Min() As Long
  442.     Min = mMin
  443. End Property
  444.  
  445. Public Property Let Min(NewValue As Long)
  446.  
  447.     If NewValue <= mMax Then
  448.         mMin = NewValue
  449.         If mValue < mMin Then
  450.             mValue = mMin
  451.             PropertyChanged "Value"
  452.         End If
  453.         PositionSlider
  454.         PropertyChanged "Min"
  455.     End If
  456. End Property
  457.  
  458. Public Property Get Max() As Long
  459.     Max = mMax
  460. End Property
  461.  
  462. Public Property Let Max(NewValue As Long)
  463.     If NewValue > mMin Then
  464.         mMax = NewValue
  465.         If mValue > mMax Then
  466.             mValue = mMax
  467.             PropertyChanged "Value"
  468.         End If
  469.         PositionSlider
  470.         PropertyChanged "Max"
  471.     End If
  472. End Property
  473.  
  474. Public Property Get SliderWid_Height() As Long
  475.     SliderWid_Height = mSliderWH
  476. End Property
  477.  
  478. Public Property Let SliderWid_Height(NewValue As Long)
  479.  
  480.    mSliderWH = NewValue
  481.    pic1.Width = mSliderWH
  482.    pic1.Height = UserControl.Height
  483.    PositionSlider
  484.    PropertyChanged "SliderWid_Height"
  485.    UserControl_Resize
  486. End Property
  487.  
  488. Public Property Get Value() As Long
  489.     Value = mValue
  490. End Property
  491.  
  492. Public Property Let Value(NewValue As Long)
  493.  
  494.     If NewValue < mMin Then
  495.         NewValue = mMin
  496.     
  497.     ElseIf NewValue > mMax Then
  498.         NewValue = mMax
  499.     End If
  500.     
  501.     mValue = NewValue
  502.     PositionSlider
  503.     
  504.     PropertyChanged "Value"
  505.     RaiseEvent Changed
  506.     
  507. End Property
  508.  
  509. Public Property Get ValueVis() As Boolean
  510.    ValueVis = m_ValueVis
  511. End Property
  512.  
  513. Public Property Let ValueVis(NewValueVis As Boolean)
  514.   m_ValueVis = NewValueVis
  515.   Label1.Visible = m_ValueVis
  516.   PropertyChanged "ValueVis"
  517.   UserControl_Resize
  518. End Property
  519.  
  520. Public Property Get ValueCol() As OLE_COLOR
  521.    nd Propl_Resize
  522. End Property
  523.  
  524. ) SliderWid_HRrs(BaseCoueCol() As OLE_lHeight - 12)liderWid_HRrs(Singlel.ScaleHeight - 12)-(UserControl.ScaleWidt1- 12)liderWin2)liderEnd PropeliderWH
  525. End Property
  526.  
  527. Public Property Let Sli