home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 4_2005-2006.ISO / data / Zips / VB_Skinner193083982005.psc / VBskinner / Skin.ctl < prev    next >
Text File  |  2005-08-09  |  16KB  |  460 lines

  1. VERSION 5.00
  2. Begin VB.UserControl Skin 
  3.    Alignable       =   -1  'True
  4.    AutoRedraw      =   -1  'True
  5.    ClientHeight    =   2730
  6.    ClientLeft      =   0
  7.    ClientTop       =   0
  8.    ClientWidth     =   7920
  9.    DataSourceBehavior=   1  'vbDataSource
  10.    EditAtDesignTime=   -1  'True
  11.    ScaleHeight     =   2730
  12.    ScaleWidth      =   7920
  13.    Begin VB.PictureBox Skinpic 
  14.       AutoRedraw      =   -1  'True
  15.       Height          =   855
  16.       Left            =   1350
  17.       Picture         =   "Skin.ctx":0000
  18.       ScaleHeight     =   795
  19.       ScaleWidth      =   4275
  20.       TabIndex        =   2
  21.       TabStop         =   0   'False
  22.       Top             =   990
  23.       Visible         =   0   'False
  24.       Width           =   4335
  25.    End
  26.    Begin VB.PictureBox TitleBar 
  27.       Appearance      =   0  'Flat
  28.       AutoRedraw      =   -1  'True
  29.       BackColor       =   &H80000002&
  30.       BorderStyle     =   0  'None
  31.       ForeColor       =   &H80000008&
  32.       Height          =   300
  33.       Left            =   0
  34.       ScaleHeight     =   300
  35.       ScaleWidth      =   7935
  36.       TabIndex        =   0
  37.       Top             =   0
  38.       Width           =   7935
  39.       Begin VB.Label CapLabel 
  40.          AutoSize        =   -1  'True
  41.          BackStyle       =   0  'Transparent
  42.          Caption         =   "Title Bar"
  43.          Height          =   195
  44.          Left            =   120
  45.          TabIndex        =   1
  46.          Top             =   60
  47.          Width           =   585
  48.       End
  49.    End
  50. End
  51. Attribute VB_Name = "Skin"
  52. Attribute VB_GlobalNameSpace = False
  53. Attribute VB_Creatable = True
  54. Attribute VB_PredeclaredId = False
  55. Attribute VB_Exposed = False
  56. '----------------------------------------------------------------------------------------------------------
  57. '
  58. '
  59. '           Author : Rajeev P
  60. '           Email ID : Rajeev_Punnalil@hotmail.com
  61. '
  62. '           All of u might have used vbskinner which is not free
  63. '           for pro version .Here i have included all skinner featured
  64. '           Except for rounded edges . If u guys have any suggestions
  65. '           please contact me at Rajeev_punnalil@hotmail.com. U may make
  66. '           and may redistribute this code as long as this commented lines
  67. '           are retainded in all of them.
  68. '
  69. '----------------------------------------------------------------------------------------------------------
  70. '           Note : Retain The above lines in all redistributed versions
  71. '
  72. '
  73. '           This code uses skins from vbskinner so u can go there and download
  74. '           more skin files if u want . Enjoy!
  75. '
  76. '           IMPORTANT !
  77. '           ------------
  78. '           Remember to change form borderstyle to 0-none
  79. '           Use 'send to back' on the skinner actvex
  80. '
  81. '           Improvements over last version
  82. '           ---------------
  83. '           Thanks a lot for ur wonderful response which made me lookback to my code
  84. '           and i found some wonderful imporvements over the last one!
  85. '           1) It doesnot use iterative method any more and hence it is really fast now
  86. '               ,Thanks to the guy who suggested c++ which made me think about optimising the code
  87. '           2) Form resize has been added ,Thanks to
  88. '
  89. '           Thanks
  90. '           ------
  91. '               Thanks for all ur suggestions . A special thanks to merlin,he got
  92. '           the idea of the project correct ! plz add suggestions !
  93. '----------------------------------------------------------------------------------------------------------
  94. Option Explicit
  95. Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
  96. Private Declare Function ReleaseCapture Lib "user32" () As Long
  97. 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
  98.  
  99.  
  100.  
  101. Private Type ButtonLocation
  102.     Close_Left As Integer
  103.     Close_Right As Integer
  104.     Min_Left As Integer
  105.     Min_Right As Integer
  106.     Max_Left As Integer
  107.     Max_Right As Integer
  108. End Type
  109.  
  110. Private skinned As Boolean
  111. Private skinfile As String
  112. Private Bool_Min As Boolean
  113. Private Bool_Max As Boolean
  114. Private frm As Form
  115. Private initok As Boolean
  116. Private locate As ButtonLocation
  117. Public Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  118. Public Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  119. Private inrgn As Boolean
  120.  
  121. Private Sub Init_PaintSkin() ' Runs Routines which paints the skin
  122. If initok = True Then
  123.     UserControl.Cls
  124.     DrawTitleBar
  125.     Draw_Close_Defaults
  126.     Draw_Min_Defaults
  127.     Draw_Max_Defaults frm.WindowState
  128.     Draw_BackGround
  129. End If
  130. End Sub
  131. Public Sub ChangeSkin(filename As String) ' For changing skin during run time
  132.     If initok = False Then Exit Sub
  133.     SaveSetting frm.Caption, "skin", "main", filename
  134.     On Error Resume Next
  135.     If Not filename = "" Then
  136.         Skinpic.Picture = LoadPicture(filename)
  137.     End If
  138.     Init_PaintSkin
  139. End Sub
  140. Private Sub InitAllocate() 'avoiding some redundant code from allocating effort to increase speed
  141.     frm.BorderStyle = 0
  142.     TitleBar.Top = 0
  143.     TitleBar.Left = 0
  144.     CapLabel.Top = 75
  145.     CapLabel.Caption = frm.Caption
  146.     TitleBar.Height = 300
  147. End Sub
  148. Public Sub allocate() ' allocate locations of various buttons depending on settings
  149.     Dim level As Integer
  150.     UserControl.Width = frm.Width
  151.     UserControl.Height = frm.Height
  152.     TitleBar.Width = frm.Width
  153.     locate.Close_Left = frm.Width - 300
  154.     locate.Close_Right = frm.Width - 105
  155.     
  156.     If Bool_Max Then 'allocate Max button if present
  157.         locate.Max_Left = frm.Width - 510
  158.         locate.Max_Right = frm.Width - 330
  159.         level = level + 1
  160.     End If
  161.     
  162.     If Bool_Min Then 'allocate min button if present depend on weather maxbutton is present or not
  163.         If level = 1 Then
  164.             locate.Min_Left = frm.Width - 720
  165.             locate.Min_Right = frm.Width - 480
  166.         Else
  167.             locate.Min_Left = frm.Width - 510
  168.             locate.Min_Right = frm.Width - 330
  169.         End If
  170.     End If
  171.     Init_PaintSkin
  172.     
  173. End Sub
  174.  
  175. Public Function GetSkinTheme() As Long ' Returns usercontrol's backcolor
  176.     GetSkinTheme = UserControl.BackColor
  177. End Function
  178. Private Sub Draw_BackGround()
  179.     'This Part has been drastically improved from last version
  180.     'iteration techniques are avoided producing faster o/p
  181. If initok = True Then
  182.     Skinpic.ScaleMode = 3
  183.     UserControl.BackColor = GetPixel(Skinpic.hdc, 2400 / 15, 0)
  184.     Skinpic.ScaleMode = 1
  185.     UserControl.PaintPicture Skinpic.Picture, 0, 0, 75, frm.ScaleHeight, 2370, 240, 75, 240
  186.     UserControl.PaintPicture Skinpic.Picture, frm.ScaleWidth - 75, 0, 75, frm.ScaleHeight, 2955, 210, 75, 285
  187.     UserControl.PaintPicture Skinpic.Picture, 0, TitleBar.Height, frm.ScaleWidth, 75, 2595, 0, 270, 75
  188.     UserControl.PaintPicture Skinpic.Picture, 0, frm.ScaleHeight - 75, frm.ScaleWidth, 75, 2595, 645, 270, 75
  189. Else
  190.     MsgBox "Add The Following Lines To your code" & vbNewLine & "skinner1.init_skin me", vbOKOnly
  191. End If
  192. End Sub
  193. Private Sub DrawTitleBar() 'Draws Title Bar, iteration avoided !
  194. If initok = True Then
  195.     TitleBar.PaintPicture Skinpic.Picture, 0, 0, frm.ScaleWidth, 375, 300, 210, 270, 435
  196. Else
  197.     MsgBox "Add The Following Lines To your code" & vbNewLine & "skinner1.init_skin me", vbOKOnly
  198. End If
  199. End Sub
  200. Private Sub CapLabel_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Helps in moving the form
  201. If initok = True Then
  202.     TitleBar_MouseMove Button, 0, X, Y
  203. Else
  204.     MsgBox "Add The Following Lines To your code" & vbNewLine & "skinner1.init_skin me", vbOKOnly
  205. End If
  206. End Sub
  207.  
  208.  
  209.  
  210. Private Sub TitleBar_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Determines titlebar mousedown
  211. If initok = True Then
  212.     If X > locate.Close_Left And X < locate.Close_Right Then
  213.         Unload frm
  214.     Else
  215.     If X > locate.Min_Left And X < locate.Min_Right Then
  216.         frm.WindowState = 1
  217.         Draw_Min_Defaults
  218.     Else
  219.     If X > locate.Max_Left And X < locate.Max_Right Then
  220.         If frm.WindowState = 0 Then
  221.             UserControl.Cls
  222.             TitleBar.Cls
  223.             frm.WindowState = 2
  224.             allocate
  225.             Init_PaintSkin
  226.         Else
  227.             TitleBar.Cls
  228.             UserControl.Cls
  229.             frm.WindowState = 0
  230.             allocate
  231.             Init_PaintSkin
  232.         End If
  233.     Draw_Max_Defaults frm.WindowState
  234.     End If
  235.     End If
  236.     End If
  237. Else
  238.     MsgBox "Add The Following Lines To your code" & vbNewLine & "skinner1.init_skin me", vbOKOnly
  239. End If
  240. End Sub
  241.  
  242. Private Sub ResetBar() 'Resetes to default
  243. If initok = True Then
  244.     Draw_Close_Defaults
  245.     Draw_Min_Defaults
  246.     Draw_Max_Defaults frm.WindowState
  247. Else
  248.     MsgBox "Add The Following Lines To your code" & vbNewLine & "skinner1.init_skin me", vbOKOnly
  249. End If
  250. End Sub
  251.  
  252.  
  253. Private Sub Draw_Close_Defaults() 'Draws close default
  254. If locate.Close_Right = 0 Then Exit Sub
  255. If initok = True Then
  256.     TitleBar.PaintPicture Skinpic.Picture, locate.Close_Left, 90, 195, 195, 0, 0, 195, 195
  257. Else
  258.     MsgBox "Add The Following Lines To your code" & vbNewLine & "skinner1.init_skin me", vbOKOnly
  259. End If
  260. End Sub
  261. Private Sub Draw_Close_Move() 'Draws close mouse over
  262. If locate.Close_Right = 0 Then Exit Sub
  263. If initok = True Then
  264.     TitleBar.PaintPicture Skinpic.Picture, locate.Close_Left, 90, 195, 195, 210, 0, 195, 195
  265. Else
  266.     MsgBox "Add The Following Lines To your code" & vbNewLine & "skinner1.init_skin me", vbOKOnly
  267. End If
  268. End Sub
  269. Private Sub Draw_Close_Down() 'Draws Close Mouse Down
  270. If locate.Close_Right = 0 Then Exit Sub
  271. If initok = True Then
  272.     TitleBar.PaintPicture Skinpic.Picture, locate.Close_Left, 90, 195, 195, 420, 0, 195, 195
  273. Else
  274.     MsgBox "Add The Following Lines To your code" & vbNewLine & "skinner1.init_skin me", vbOKOnly
  275. End If
  276. End Sub
  277.  
  278. Private Sub Draw_Min_Defaults() 'Draws Min Default
  279. If locate.Min_Right = 0 Then Exit Sub
  280. If initok = True Then
  281.     TitleBar.PaintPicture Skinpic.Picture, locate.Min_Left, 90, 195, 195, 1890, 0, 195, 195
  282. Else
  283.     MsgBox "Add The Following Lines To your code" & vbNewLine & "skinner1.init_skin me", vbOKOnly
  284. End If
  285. End Sub
  286. Private Sub Draw_Min_Move() 'Draws min mouse move
  287. If locate.Min_Right = 0 Then Exit Sub
  288. If initok = True Then
  289.     TitleBar.PaintPicture Skinpic.Picture, locate.Min_Left, 90, 195, 195, 2100, 0, 195, 195
  290. Else
  291.     MsgBox "Add The Following Lines To your code" & vbNewLine & "skinner1.init_skin me", vbOKOnly
  292. End If
  293. End Sub
  294. Private Sub Draw_Max_Defaults(ByVal State As Integer) 'Draws max defaults
  295. If locate.Max_Right = 0 Then Exit Sub
  296. If State = 2 Then
  297.     TitleBar.PaintPicture Skinpic.Picture, locate.Max_Left, 90, 195, 195, 630, 0, 195, 195
  298. Else
  299.     TitleBar.PaintPicture Skinpic.Picture, locate.Max_Left, 90, 195, 195, 1260, 0, 195, 195
  300. End If
  301. End Sub
  302. Private Sub Draw_Max_Move(ByVal State As Integer) 'Draws max mouse move
  303. If locate.Max_Right = 0 Then Exit Sub
  304. If State = 2 Then
  305.     TitleBar.PaintPicture Skinpic.Picture, locate.Max_Left, 90, 195, 195, 840, 0, 195, 195
  306. Else
  307.     TitleBar.PaintPicture Skinpic.Picture, locate.Max_Left, 90, 195, 195, 1470, 0, 195, 195
  308. End If
  309. End Sub
  310.  
  311. Private Sub TitleBar_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Title Bar Mouse move
  312. If initok = True Then
  313. If X > locate.Close_Left And X < locate.Close_Right Then
  314.     Draw_Close_Move
  315.     Draw_Min_Defaults
  316.     Draw_Max_Defaults frm.WindowState
  317. Else
  318.     Draw_Close_Defaults
  319. If X > locate.Min_Left And X < locate.Min_Right Then
  320.     Draw_Min_Move
  321.     Draw_Max_Defaults frm.WindowState
  322.     Draw_Close_Defaults
  323. Else
  324. If X > locate.Max_Left And X < locate.Max_Right Then
  325.     Draw_Max_Move frm.WindowState
  326.     Draw_Min_Defaults
  327.     Draw_Close_Defaults
  328. Else
  329.     ReleaseCapture
  330.     SendMessage frm.hwnd, &HA1, 2, 0
  331. End If
  332. End If
  333. End If
  334. Else
  335.     MsgBox "Add The Following Lines To your code" & vbNewLine & "skinner1.init_skin me", vbOKOnly
  336.         
  337. End If
  338. End Sub
  339.  
  340.  
  341.  
  342. Private Sub UserControl_Initialize()
  343.     TitleBar.Width = UserControl.Width
  344. End Sub
  345.  
  346. ' Various propertis of skinner
  347. Public Property Let ButtonMin(Temp As Boolean)
  348.     Bool_Min = Temp
  349. End Property
  350.  
  351. Public Property Let ButtonMax(Temp As Boolean)
  352.     Bool_Max = Temp
  353. End Property
  354. Public Property Let Caption(Temp As String)
  355.     CapLabel = Temp
  356. End Property
  357. Public Property Get ButtonMin() As Boolean
  358.     ButtonMin = Bool_Min
  359. End Property
  360.  
  361. Public Property Get ButtonMax() As Boolean
  362.     ButtonMax = Bool_Max
  363. End Property
  364.  
  365. Public Property Get Caption() As String
  366.     Caption = CapLabel.Caption
  367. End Property
  368. Public Property Set Skin(Skn As Picture)
  369.     Set Skinpic.Picture = Skn
  370.     If initok Then Init_PaintSkin
  371. End Property
  372. Public Property Get Skin() As Picture
  373.        Set Skin = Skinpic.Picture
  374. End Property
  375.  
  376.  
  377. Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  378.     RaiseEvent MouseDown(Button, Shift, X, Y)
  379. End Sub
  380. 'Form resize added in routine usercontrol - mouseup,mousemove!
  381. Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  382.     If Button = 1 Then
  383.         If X > UserControl.Width - 200 Or Y > UserControl.Height / 15 - 200 Then
  384.             inrgn = True
  385.         Else
  386.             If Not inrgn Then
  387.                 ReleaseCapture
  388.                 SendMessage frm.hwnd, &HA1, 2, 0
  389.             End If
  390.         End If
  391.     Else
  392.         If X > UserControl.Width - 200 And Y > UserControl.Height - 200 Then
  393.         UserControl.MousePointer = 8
  394.     Else
  395.         If X > UserControl.Width - 200 And Y < UserControl.Height - 200 Then
  396.             UserControl.MousePointer = 9
  397.         Else
  398.             If X < UserControl.Width - 200 And Y > UserControl.Height - 200 Then
  399.                 UserControl.MousePointer = 7
  400.             Else
  401.                 UserControl.MousePointer = 0
  402.             End If
  403.         End If
  404.     End If
  405.         RaiseEvent MouseMove(Button, Shift, X, Y)
  406.     End If
  407.     ResetBar
  408. End Sub
  409.  
  410.  
  411.  
  412. Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  413.        On Error Resume Next
  414.        If inrgn = True Then
  415.             If UserControl.MousePointer = 8 Or UserControl.MousePointer = 9 Then frm.Width = X
  416.             If UserControl.MousePointer = 8 Or UserControl.MousePointer = 7 Then frm.Height = Y
  417.             allocate
  418.         inrgn = False
  419.        End If
  420.        UserControl.MousePointer = 0
  421. End Sub
  422.  
  423. Private Sub UserControl_Resize()
  424.     TitleBar.Height = 300
  425. End Sub
  426.  
  427. ' Property Bag Additions
  428. Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  429.  With PropBag
  430.     Call .ReadProperty("Caption", "")
  431.     Bool_Max = .ReadProperty("ButtonMax", True)
  432.     Bool_Min = .ReadProperty("ButtonMin", True)
  433.     Set Skinpic = .ReadProperty("Skin", Skinpic.Picture)
  434.     
  435.  End With
  436. End Sub
  437. Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  438.  With PropBag
  439.     Call .WriteProperty("Caption", CapLabel.Caption, "")
  440.     Call .WriteProperty("Skin", Skinpic, Skinpic.Picture)
  441.     Call .WriteProperty("ButtonMax", Bool_Max, True)
  442.     Call .WriteProperty("ButtonMin", Bool_Min, True)
  443.     
  444. End With
  445. End Sub
  446.  
  447. 'Initializes with form control .. Vital part of the code
  448.  
  449. Public Sub Init_Skin(frm1 As Form)
  450.     initok = True
  451.     Set frm = frm1
  452.     Dim filename As String
  453.     filename = GetSetting(frm.Caption, "skin", "main", "")
  454.     InitAllocate
  455.     
  456.     allocate
  457.     If Not filename = "" Then ChangeSkin filename
  458. End Sub
  459.  
  460.