home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / A_60-kB_mu205772422007.psc / chameleonButton.ctl < prev   
Text File  |  2007-03-15  |  72KB  |  1,643 lines

  1. VERSION 5.00
  2. Begin VB.UserControl chameleonButton 
  3.    AutoRedraw      =   -1  'True
  4.    ClientHeight    =   3600
  5.    ClientLeft      =   0
  6.    ClientTop       =   0
  7.    ClientWidth     =   4800
  8.    DefaultCancel   =   -1  'True
  9.    PropertyPages   =   "chameleonButton.ctx":0000
  10.    ScaleHeight     =   240
  11.    ScaleMode       =   3  '╣│»└
  12.    ScaleWidth      =   320
  13.    ToolboxBitmap   =   "chameleonButton.ctx":004A
  14.    Begin VB.Timer OverTimer 
  15.       Enabled         =   0   'False
  16.       Interval        =   3
  17.       Left            =   0
  18.       Top             =   0
  19.    End
  20. End
  21. Attribute VB_Name = "chameleonButton"
  22. Attribute VB_GlobalNameSpace = False
  23. Attribute VB_Creatable = True
  24. Attribute VB_PredeclaredId = False
  25. Attribute VB_Exposed = False
  26. Option Explicit
  27.  
  28. #Const isOCX = False
  29.  
  30. Private Const cbVersion As String = "2.0.6"
  31.  
  32. '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  33. '%             <<< GONCHUKI SYSTEMS >>>               %
  34. '%                                                    %
  35. '%                 CHAMELEON BUTTON                   %
  36. '%         copyright ⌐2001-2002 by gonchuki           %
  37. '%                                                    %
  38. '%  this custom control will emulate the most common  %
  39. '%      command buttons that everyone knows.          %
  40. '%                                                    %
  41. '%  it took me three months to develop this control   %
  42. '% but that was a first step, now eight months after, %
  43. '%  it turned out to be a very professional control.  %
  44. '%                                                    %
  45. '%     ALL THE CODE WAS WRITTEN FROM SCRATCH!!!       %
  46. '%                                                    %
  47. '%   ever wanted to add cool buttons to your app???   %
  48. '%          this is the BEST solution!!!              %
  49. '%                                                    %
  50. '%        Copyright ⌐ 2001-2002 by gonchuki           %
  51. '%                                                    %
  52. '%    Commercial use of this control is FORBIDDEN     %
  53. '%       without explicitly permission from me        %
  54. '%    You can't either use any part of this code      %
  55. '%              without my permission                 %
  56. '%   You can use this code without asking for your    %
  57. '%  personal projects or for freeware, but remember   %
  58. '%           to give credits where its due            %
  59. '%                                                    %
  60. '%  If you are building an OCX version, you MUST set  %
  61. '%      the isOCX constant to true and inlcude the    %
  62. '%          original unmodified about form            %
  63. '%                                                    %
  64. '%            e-mail: gonchuki@yahoo.es               %
  65. '%                                                    %
  66. '%                  MADE IN URUGUAY                   %
  67. '%                                                    %
  68. '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  69.  
  70. '######################################################
  71. '#                    UPDTATE LOG                     #
  72. '#  all times are GMT -03:00                          #
  73. '#                                                    #
  74. '# November 9  - 03:00 am                             #
  75. '#              ╖ first release                       #
  76. '#                                                    #
  77. '# November 9  - 05:00 pm                             #
  78. '#              ╖ added ShowFocusRect property        #
  79. '#              ╖ added repaint before triggering the #
  80. '#                click event                         #
  81. '#                                                    #
  82. '# November 9  - 07:20 pm                             #
  83. '#              ╖ fixed the color shifting so it will #
  84. '#                display the correct color and not a #
  85. '#                weird one.                          #
  86. '#              ╖ improved Java button drawing        #
  87. '#              ╖ added custom colors capability      #
  88. '#                now it looks better than ever COOL! #
  89. '#              ╖ improved Flat button drawing        #
  90. '#                                                    #
  91. '# November 13 - 03:40 pm                             #
  92. '#              ╖ fixed the WinXP button colors and   #
  93. '#                styles. Note that as the colors are #
  94. '#                relative to a base, and for this    #
  95. '#                button i made a color work-around,  #
  96. '#                some colors will be un-reachable    #
  97. '#              ╖ added MouseMove event as requested  #
  98. '#                                                    #
  99. '# November 18 - 10:40 am                             #
  100. '#              ╖ translated all the line methods to  #
  101. '#                API calls. It's now faster than     #
  102. '#                ever. It will also decrease the     #
  103. '#                extra size of your exe!!!           #
  104. '#              ╖ improved Win32 button drawing       #
  105. '#              ╖ moved the direct calls to SetPixel  #
  106. '#                to use less inline .hDC calls       #
  107. '#              ╖ fixed KeyDown/KeyUp events so they  #
  108. '#                now act as they should              #
  109. '#                                                    #
  110. '# November 23 - 3:55 pm  (not updating on PSC...)    #
  111. '#              ╖ upgraded version to 1.1             #
  112. '#              ╖ added FontBold, and other similar   #
  113. '#                properties as requested             #
  114. '#              ╖ greatly improved drawing speed by   #
  115. '#                replacing lots of duplicated code   #
  116. '#                with the new-brand function made by #
  117. '#                me: "DrawFrame"                     #
  118. '#              ╖ fixed MouseDown/MouseUp events so   #
  119. '#                they now act as they should         #
  120. '#              ╖ added MousePointer property         #
  121. '#                                                    #
  122. '# December 1  - 10:10 pm                             #
  123. '#              ╖ replaced the RECT types assignment  #
  124. '#                in the resize event with API calls  #
  125. '#                that take 3/4 the time of raw vb    #
  126. '#              ╖ added "use container" to the color  #
  127. '#                schemes                             #
  128. '#              ╖ button now initializes with it's    #
  129. '#                caption set as it's name            #
  130. '#                                                    #
  131. '# December 23 - 2:00 pm                              #
  132. '#              ╖ finally got all the code in API by  #
  133. '#                replacing the Usercontrol.ForeColor #
  134. '#                calls with CreatePen API            #
  135. '#              ╖ added support for wrapping captions #
  136. '#              ╖ changed a bit the XP button gradient#
  137. '#                thanks to Ghuran Kartal for this    #
  138. '#              ╖ added refresh sub to force a button #
  139. '#                redraw.                             #
  140. '#              ╖ MouseIcon property added            #
  141. '#              ╖ MouseOver/MouseOut events added and #
  142. '#                also a ForeOver property is provided#
  143. '#                to change font color on mouse over. #
  144. '#                this also fixed the WinXP button,   #
  145. '#                which design is now perfect.        #
  146. '#              ╖ added FlatHover button style that is#
  147. '#                the real toolbar button.            #
  148. '#                                                    #
  149. '# January 1  - 11:15 am                 year 2002!!! #
  150. '#              ╖ some minor fixes                    #
  151. '#              ╖ new release!!!                      #
  152. '#                                                    #
  153. '# January 5  - 10:15 am                              #
  154. '#              ╖ fixed the memory leaks (only 1% of  #
  155. '#                gdi is lost per 15-20 runs of demo) #
  156. '#              ╖ the font assignment has changed     #
  157. '#              ╖ fixed a very rare and random bug in #
  158. '#                the XP-button. Problem was in the   #
  159. '#                DrawLine sub. Thanks goes to Dennis #
  160. '#                Vanderspek                          #
  161. '#              ╖ changed Mid and LCase to the faster #
  162. '#                Mid$ and LCase$ way                 #
  163. '#                                                    #
  164. '# January 22  - 11:55 pm                             #
  165. '#              ╖ fixed the "not redrawing" bug under #
  166. '#                Win 2K/NT/ME.                       #
  167. '#              ╖ fixed a bug that prevented hot keys #
  168. '#                to work properly                    #
  169. '#              ╖ fixed the font alignment problem    #
  170. '#                many many thanks to Carles P.V.     #
  171. '#                                                    #
  172. '# February 6  - 4:15 pm                              #
  173. '#              ╖ fixed property assignment problems  #
  174. '#              ╖ fixed "Use Container" color scheme  #
  175. '#              ╖ optimized a bit the code            #
  176. '#              ╖ fixed problem with system colors    #
  177. '#              ╖ added SoftBevel prop to allow the   #
  178. '#                buton to be "flatter"               #
  179. '#                                                    #
  180. '# February 8  - 10:15 pm                             #
  181. '#              ╖ fixed click event when user double  #
  182. '#                clicks on the button                #
  183. '#                                                    #
  184. '# February 10 - 2:35 pm                              #
  185. '#              ╖ added Office XP button style        #
  186. '#              ╖ added "DrawCaption" sub for easier  #
  187. '#                caption management                  #
  188. '#              ╖ changed focus rects for flat buttons#
  189. '#              ╖ added "DisableRefresh" sub to allow #
  190. '#                property changes without repainting #
  191. '#                until needed to do so.              #
  192. '#              ╖ added BackOver property             #
  193. '#                                                    #
  194. '# February 11 - 1:15 am                              #
  195. '#              ╖ added primitive support for pictures#
  196. '#              ╖ fixed colors when mouse re-enters   #
  197. '#                button area while holding the mouse #
  198. '#                button.                             #
  199. '#                                                    #
  200. '# February 12 - 4:30 pm                              #
  201. '#              ╖ finished with the picture property! #
  202. '#              ╖ Java focus rect fixed               #
  203. '#              ╖ Office XP style fixed               #
  204. '#              ╖ Changed "ConvertFromSystemColor" sub#
  205. '#                                                    #
  206. '# February 14 - 6:20 pm                              #
  207. '#              ╖ replaced the transparent blitting   #
  208. '#                function with one 10 times better   #
  209. '#              ╖ joined bitmaps & icons drawing      #
  210. '#              ╖ added "UseGreyscale" option         #
  211. '#                                                    #
  212. '# February 18 - 4:30 pm                              #
  213. '#              ╖ added embossed/engraved/shadowed fx #
  214. '#              ╖ added category for each property    #
  215. '#              ╖ added standard property pages       #
  216. '#                                                    #
  217. '# March 3 - 9:10 pm                                  #
  218. '#              ╖ fixed effects for XP styles         #
  219. '#              ╖ added mouseover detection function  #
  220. '#              ╖ some minor adjustments              #
  221. '#                                                    #
  222. '# March 31 - 2:55 am                                 #
  223. '#              ╖ upgraded to version 2.0             #
  224. '#              ╖ added transparent, 3D Hover and     #
  225. '#                oval button types                   #
  226. '#                                                    #
  227. '# April 1 - 9:45 pm                                  #
  228. '#              ╖ fixed transparent button drawing    #
  229. '#                                                    #
  230. '# April 19 - 6:00 pm                                 #
  231. '#              ╖ fixed Ofice XP button colors        #
  232. '#              ╖ added built-in hand cursor          #
  233. '#                                                    #
  234. '# May 11 - 12:40 pm                                  #
  235. '#              ╖ added KDE 2 button style!           #
  236. '#              ╖ slightly optimized Mac button code  #
  237. '#                                                    #
  238. '# May 16 - 7:00 pm                                   #
  239. '#              ╖ added version property              #
  240. '#              ╖ added complilation options for lite #
  241. '#                version (evaluation purpose only)   #
  242. '#              ╖ some optimizations for drawing fx   #
  243. '#                                                    #
  244. '# May 22 - 5:20 pm                                   #
  245. '#              ╖ added some code to make more robust #
  246. '#                the lite version                    #
  247. '#              ╖ added background picture option     #
  248. '#                                                    #
  249. '# June 29 - 4:00 pm                                  #
  250. '#              ╖ added CheckBoxBehaviour option to   #
  251. '#                allow the button behave as one of em#
  252. '#                                                    #
  253. '# July 25 - 11:55 pm                                 #
  254. '#              ╖ slightly optimized code, specially  #
  255. '#                by removing the slow IIf's          #
  256. '#              ╖ corrected default state for KDE2    #
  257. '#                                                    #
  258. '# August 1 - 12:30 pm                                #
  259. '#              ╖ NEW PUBLIC RELEASE!!!    (ver 2.04) #
  260. '#            2:40 pm                           2.05  #
  261. '#              ╖ button was not updating when "value"#
  262. '#                prop was changed by the code. Thanks#
  263. '#                to Steve and uZiGuLa.               #
  264. '#              ╖ fixed drawing for Win32 button while#
  265. '#                being CheckBox and Value = True     #
  266. '#                                                    #
  267. '# August 2 - 11:30 pm                                #
  268. '#              ╖ fixed (i hope) the problem with the #
  269. '#                WinXP disabled picture              #
  270. '#              ╖ fixed the "not redrawing" problem   #
  271. '#                                                    #
  272. '######################################################
  273.  
  274. Private Declare Function SetPixel Lib "gdi32" Alias "SetPixelV" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
  275.  
  276. Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
  277. Private Const COLOR_HIGHLIGHT = 13
  278. Private Const COLOR_BTNFACE = 15
  279. Private Const COLOR_BTNSHADOW = 16
  280. Private Const COLOR_BTNTEXT = 18
  281. Private Const COLOR_BTNHIGHLIGHT = 20
  282. Private Const COLOR_BTNDKSHADOW = 21
  283. Private Const COLOR_BTNLIGHT = 22
  284.  
  285. Private Declare Function OleTranslateColor Lib "oleaut32.dll" (ByVal lOleColor As Long, ByVal lHPalette As Long, lColorRef As Long) As Long
  286. Private Declare Function GetBkColor Lib "gdi32" (ByVal hdc As Long) As Long
  287. Private Declare Function GetTextColor Lib "gdi32" (ByVal hdc As Long) As Long
  288. Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
  289. Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
  290. Private Const DT_CALCRECT = &H400
  291. Private Const DT_WORDBREAK = &H10
  292. Private Const DT_CENTER = &H1 Or DT_WORDBREAK Or &H4
  293.  
  294. Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
  295. Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
  296. Private Declare Function FrameRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
  297. Private Declare Function DrawFocusRect Lib "user32" (ByVal hdc As Long, lpRect As RECT) As Long
  298. Private Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
  299.  
  300. Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
  301. Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
  302.  
  303. Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, lpPoint As POINTAPI) As Long
  304. Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
  305. Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
  306. Private Const PS_SOLID = 0
  307.  
  308. Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
  309. Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
  310. Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
  311. Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
  312. Private Const RGN_DIFF = 4
  313.  
  314. Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
  315. Private Declare Function InflateRect Lib "user32" (lpRect As RECT, ByVal X As Long, ByVal Y As Long) As Long
  316. Private Declare Function OffsetRect Lib "user32" (lpRect As RECT, ByVal X As Long, ByVal Y As Long) As Long
  317. Private Declare Function CopyRect Lib "user32" (lpDestRect As RECT, lpSourceRect As RECT) As Long
  318.  
  319. Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
  320. Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  321.  
  322. Private Declare Function SetCapture Lib "user32" (ByVal hWnd As Long) As Long
  323.  
  324. Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
  325. Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
  326.  
  327. Private Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
  328. Private Declare Function SetDIBitsToDevice Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal dx As Long, ByVal dy As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal Scan As Long, ByVal NumScans As Long, Bits As Any, BitsInfo As BITMAPINFO, ByVal wUsage As Long) As Long
  329.  
  330. Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
  331. Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
  332. Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
  333. Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
  334. Private Declare Function DrawIconEx Lib "user32" (ByVal hdc As Long, ByVal xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long
  335. Private Declare Function CreateBitmap Lib "gdi32" (ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long
  336. Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
  337.  
  338. Private Type RECT
  339.         Left As Long
  340.         Top As Long
  341.         Right As Long
  342.         Bottom As Long
  343. End Type
  344.  
  345. Private Type POINTAPI
  346.         X As Long
  347.         Y As Long
  348. End Type
  349.  
  350. Private Type BITMAPINFOHEADER
  351.         biSize As Long
  352.         biWidth As Long
  353.         biHeight As Long
  354.         biPlanes As Integer
  355.         biBitCount As Integer
  356.         biCompression As Long
  357.         biSizeImage As Long
  358.         biXPelsPerMeter As Long
  359.         biYPelsPerMeter As Long
  360.         biClrUsed As Long
  361.         biClrImportant As Long
  362. End Type
  363.  
  364. Private Type RGBTRIPLE
  365.         rgbBlue As Byte
  366.         rgbGreen As Byte
  367.         rgbRed As Byte
  368. End Type
  369.  
  370. Private Type BITMAPINFO
  371.         bmiHeader As BITMAPINFOHEADER
  372.         bmiColors As RGBTRIPLE
  373. End Type
  374.  
  375. Public Enum ButtonTypes
  376.     [Windows 16-bit] = 1    'the old-fashioned Win16 button
  377.     [Windows 32-bit] = 2    'the classic windows button
  378.     [Windows XP] = 3        'the new brand XP button totally owner-drawn
  379.     [Mac] = 4               'i suppose it looks exactly as a Mac button... i took the style from a GetRight skin!!!
  380.     [Java metal] = 5        'there are also other styles but not so different from windows one
  381.     [Netscape 6] = 6        'this is the button displayed in web-pages, it also appears in some java apps
  382.     [Simple Flat] = 7       'the standard flat button seen on toolbars
  383.     [Flat Highlight] = 8    'again the flat button but this one has no border until the mouse is over it
  384.     [Office XP] = 9         'the new Office XP button
  385.     '[MacOS-X] = 10         'this is a plan for the future...
  386.     [Transparent] = 11      'suggested from a user...
  387.     [3D Hover] = 12         'took this one from "Noteworthy Composer" toolbal
  388.     [Oval Flat] = 13        'a simple Oval Button
  389.     [KDE 2] = 14            'the great standard KDE2 button!
  390. End Enum
  391.  
  392. Public Enum ColorTypes
  393.     [Use Windows] = 1
  394.     [Custom] = 2
  395.     [Force Standard] = 3
  396.     [Use Container] = 4
  397. End Enum
  398.  
  399. Public Enum PicPositions
  400.     cbLeft = 0
  401.     cbRight = 1
  402.     cbTop = 2
  403.     cbBottom = 3
  404.     cbBackground = 4
  405. End Enum
  406.  
  407. Public Enum fx
  408.     cbNone = 0
  409.     cbEmbossed = 1
  410.     cbEngraved = 2
  411.     cbShadowed = 3
  412. End Enum
  413.  
  414. Private Const FXDEPTH As Long = &H28
  415.  
  416. 'events
  417. Public Event Click()
  418. Attribute Click.VB_MemberFlags = "200"
  419. Public Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  420. Public Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  421. Public Event MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  422. Public Event KeyPress(KeyAscii As Integer)
  423. Public Event KeyDown(KeyCode As Integer, Shift As Integer)
  424. Public Event KeyUp(KeyCode As Integer, Shift As Integer)
  425. Public Event MouseOver()
  426. Public Event MouseOut()
  427.  
  428. 'variables
  429. Private MyButtonType As ButtonTypes
  430. Private MyColorType As ColorTypes
  431. Private PicPosition As PicPositions
  432. Private SFX As fx 'font and picture effects
  433.  
  434. Private He As Long  'the height of the button
  435. Private Wi As Long  'the width of the button
  436.  
  437. Private BackC As Long 'back color
  438. Private BackO As Long 'back color when mouse is over
  439. Private ForeC As Long 'fore color
  440. Private ForeO As Long 'fore color when mouse is over
  441. Private MaskC As Long 'mask color
  442. Private OXPb As Long, OXPf As Long
  443. Private useMask As Boolean, useGrey As Boolean
  444. Private useHand As Boolean
  445.  
  446. Private picNormal As StdPicture, picHover As StdPicture
  447. Private pDC As Long, pBM As Long, oBM As Long 'used for the treansparent button
  448.  
  449. Private elTex As String     'current text
  450.  
  451. Private rc As RECT, rc2 As RECT, rc3 As RECT, fc As POINTAPI 'text and focus rect locations
  452. Private picPT As POINTAPI, picSZ As POINTAPI  'picture Position & Size
  453. Private rgnNorm As Long
  454.  
  455. Private LastButton As Byte, LastKeyDown As Byte
  456. Private isEnabled As Boolean, isSoft As Boolean
  457. Private HasFocus As Boolean, showFocusR As Boolean
  458.  
  459. Private cFace As Long, cLight As Long, cHighLight As Long, cShadow As Long, cDarkShadow As Long, cText As Long, cTextO As Long, cFaceO As Long, cMask As Long, XPFace As Long
  460.  
  461. Private lastStat As Byte, TE As String, isShown As Boolean  'used to avoid unnecessary repaints
  462. Private isOver As Boolean, inLoop As Boolean
  463.  
  464. Private Locked As Boolean
  465.  
  466. Private captOpt As Long
  467. Private isCheckbox As Boolean, cValue As Boolean
  468.  
  469. Private Sub OverTimer_Timer()
  470. If Not isMouseOver Then
  471.     OverTimer.Enabled = False
  472.     isOver = False
  473.     Call Redraw(0, True)
  474.     RaiseEvent MouseOut
  475. End If
  476. End Sub
  477.  
  478. Private Sub UserControl_AccessKeyPress(KeyAscii As Integer)
  479.     LastButton = 1
  480.     Call UserControl_Click
  481. End Sub
  482.  
  483. Private Sub UserControl_AmbientChanged(PropertyName As String)
  484.     If Not MyColorType = [Custom] Then
  485.         Call SetColors
  486.         Call Redraw(lastStat, True)
  487.     End If
  488. End Sub
  489.  
  490. Private Sub UserControl_Click()
  491. If LastButton = 1 And isEnabled Then
  492.     If isCheckbox Then cValue = Not cValue
  493.     Call Redraw(0, True) 'be sure that the normal status is drawn
  494.     UserControl.Refresh
  495.     RaiseEvent Click
  496. End If
  497. End Sub
  498.  
  499. Private Sub UserControl_DblClick()
  500. If LastButton = 1 Then
  501.     Call UserControl_MouseDown(1, 0, 0, 0)
  502.     SetCapture hWnd
  503. End If
  504. End Sub
  505.  
  506. Private Sub UserControl_GotFocus()
  507. HasFocus = True
  508. Call Redraw(lastStat, True)
  509. End Sub
  510.  
  511. Private Sub UserControl_Hide()
  512.     isShown = False
  513. End Sub
  514.  
  515. Private Sub UserControl_Initialize()
  516.     'this makes the control to be slow, remark this line if the "not redrawing" problem is not important for you: ie, you intercept the Load_Event (with breakpoint or messageBox) and the button does not repaint...
  517.     isShown = True
  518. End Sub
  519.  
  520. Private Sub UserControl_KeyDown(KeyCode As Integer, Shift As Integer)
  521. RaiseEvent KeyDown(KeyCode, Shift)
  522.  
  523. LastKeyDown = KeyCode
  524. Select Case KeyCode
  525.     Case 32 'spacebar pressed
  526.         Call Redraw(2, False)
  527.     Case 39, 40 'right and down arrows
  528.         SendKeys "{Tab}"
  529.     Case 37, 38 'left and up arrows
  530.         SendKeys "+{Tab}"
  531. End Select
  532. End Sub
  533.  
  534. Private Sub UserControl_KeyPress(KeyAscii As Integer)
  535. RaiseEvent KeyPress(KeyAscii)
  536. End Sub
  537.  
  538. Private Sub UserControl_KeyUp(KeyCode As Integer, Shift As Integer)
  539. RaiseEvent KeyUp(KeyCode, Shift)
  540.  
  541. If (KeyCode = 32) And (LastKeyDown = 32) Then 'spacebar pressed, and not cancelled by the user
  542.     If isCheckbox Then cValue = Not cValue
  543.     Call Redraw(0, False)
  544.     UserControl.Refresh
  545.     RaiseEvent Click
  546. End If
  547. End Sub
  548.  
  549. Private Sub UserControl_LostFocus()
  550. HasFocus = False
  551. Call Redraw(lastStat, True)
  552. End Sub
  553.  
  554. Private Sub UserControl_InitProperties()
  555.     isEnabled = True: showFocusR = True: useMask = True
  556.     elTex = Ambient.DisplayName
  557.     Set UserControl.Font = Ambient.Font
  558.     MyButtonType = [Windows 32-bit]
  559.     MyColorType = [Use Windows]
  560.     Call SetColors
  561.     BackC = cFace: BackO = BackC
  562.     ForeC = cText: ForeO = ForeC
  563.     MaskC = &HC0C0C0
  564.     Call CalcTextRects
  565. End Sub
  566.  
  567. Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  568. RaiseEvent MouseDown(Button, Shift, X, Y)
  569. LastButton = Button
  570. If Button <> 2 Then Call Redraw(2, False)
  571. End Sub
  572.  
  573. Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  574. RaiseEvent MouseMove(Button, Shift, X, Y)
  575. If Button < 2 Then
  576.     If Not isMouseOver Then
  577.         'we are outside the button
  578.         Call Redraw(0, False)
  579.     Else
  580.         'we are inside the button
  581.         If Button = 0 And Not isOver Then
  582.             OverTimer.Enabled = True
  583.             isOver = True
  584.             Call Redraw(0, True)
  585.             RaiseEvent MouseOver
  586.         ElseIf Button = 1 Then
  587.             isOver = True
  588.             Call Redraw(2, False)
  589.             isOver = False
  590.         End If
  591.     End If
  592. End If
  593. End Sub
  594.  
  595. Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  596. RaiseEvent MouseUp(Button, Shift, X, Y)
  597. If Button <> 2 Then Call Redraw(0, False)
  598. End Sub
  599.  
  600. '########## BUTTON PROPERTIES ##########
  601. Public Property Get BackColor() As OLE_COLOR
  602. Attribute BackColor.VB_ProcData.VB_Invoke_Property = ";Appearance"
  603. Attribute BackColor.VB_UserMemId = -501
  604. BackColor = BackC
  605. End Property
  606. Public Property Let BackColor(ByVal theCol As OLE_COLOR)
  607. BackC = theCol
  608. If Not Ambient.UserMode Then BackO = theCol
  609. Call SetColors
  610. Call Redraw(lastStat, True)
  611. PropertyChanged "BCOL"
  612. End Property
  613.  
  614. Public Property Get BackOver() As OLE_COLOR
  615. Attribute BackOver.VB_ProcData.VB_Invoke_Property = ";Appearance"
  616. BackOver = BackO
  617. End Property
  618. Public Property Let BackOver(ByVal theCol As OLE_COLOR)
  619. BackO = theCol
  620. Call SetColors
  621. Call Redraw(lastStat, True)
  622. PropertyChanged "BCOLO"
  623. End Property
  624.  
  625. Public Property Get ForeColor() As OLE_COLOR
  626. Attribute ForeColor.VB_ProcData.VB_Invoke_Property = ";Appearance"
  627. Attribute ForeColor.VB_UserMemId = -513
  628. ForeColor = ForeC
  629. End Property
  630. Public Property Let ForeColor(ByVal theCol As OLE_COLOR)
  631. ForeC = theCol
  632. If Not Ambient.UserMode Then ForeO = theCol
  633. Call SetColors
  634. Call Redraw(lastStat, True)
  635. PropertyChanged "FCOL"
  636. End Property
  637.  
  638. Public Property Get ForeOver() As OLE_COLOR
  639. Attribute ForeOver.VB_ProcData.VB_Invoke_Property = ";Appearance"
  640. ForeOver = ForeO
  641. End Property
  642. Public Property Let ForeOver(ByVal theCol As OLE_COLOR)
  643. ForeO = theCol
  644. Call SetColors
  645. Call Redraw(lastStat, True)
  646. PropertyChanged "FCOLO"
  647. End Property
  648.  
  649. Public Property Get MaskColor() As OLE_COLOR
  650. Attribute MaskColor.VB_ProcData.VB_Invoke_Property = ";Appearance"
  651. MaskColor = MaskC
  652. End Property
  653. Public Property Let MaskColor(ByVal theCol As OLE_COLOR)
  654. MaskC = theCol
  655. Call SetColors
  656. Call Redraw(lastStat, True)
  657. PropertyChanged "MCOL"
  658. End Property
  659.  
  660. Public Property Get ButtonType() As ButtonTypes
  661. Attribute ButtonType.VB_ProcData.VB_Invoke_Property = ";Appearance"
  662. ButtonType = MyButtonType
  663. End Property
  664.  
  665. Public Property Let ButtonType(ByVal newValue As ButtonTypes)
  666. MyButtonType = newValue
  667. If MyButtonType = [Java metal] And Not Ambient.UserMode Then
  668.     UserControl.FontBold = True
  669. ElseIf MyButtonType = 11 And isShown Then
  670.     Call GetParentPic
  671. End If
  672. Call UserControl_Resize
  673. PropertyChanged "BTYPE"
  674. End Property
  675.  
  676. Public Property Get Caption() As String
  677. Attribute Caption.VB_ProcData.VB_Invoke_Property = ";Text"
  678. Attribute Caption.VB_UserMemId = 0
  679. Caption = elTex
  680. End Property
  681.  
  682. Public Property Let Caption(ByVal newValue As String)
  683. elTex = newValue
  684. Call SetAccessKeys
  685. Call CalcTextRects
  686. Call Redraw(0, True)
  687. PropertyChanged "TX"
  688. End Property
  689.  
  690. Public Property Get Enabled() As Boolean
  691. Attribute Enabled.VB_ProcData.VB_Invoke_Property = ";Behavior"
  692. Attribute Enabled.VB_UserMemId = -514
  693. Enabled = isEnabled
  694. End Property
  695.  
  696. Public Property Let Enabled(ByVal newValue As Boolean)
  697. isEnabled = newValue
  698. Call Redraw(0, True)
  699. UserControl.Enabled = isEnabled
  700. PropertyChanged "ENAB"
  701. End Property
  702.  
  703. Public Property Get Font() As Font
  704. Attribute Font.VB_ProcData.VB_Invoke_Property = ";Font"
  705. Attribute Font.VB_UserMemId = -512
  706. Set Font = UserControl.Font
  707. End Property
  708.  
  709. Public Property Set Font(ByRef newFont As Font)
  710. Set UserControl.Font = newFont
  711. Call CalcTextRects
  712. Call Redraw(0, True)
  713. PropertyChanged "FONT"
  714. End Property
  715.  
  716. Public Property Get FontBold() As Boolean
  717. Attribute FontBold.VB_MemberFlags = "400"
  718. FontBold = UserControl.FontBold
  719. End Property
  720.  
  721. Public Property Let FontBold(ByVal newValue As Boolean)
  722. UserControl.FontBold = newValue
  723. Call CalcTextRects
  724. Call Redraw(0, True)
  725. End Property
  726.  
  727. Public Property Get FontItalic() As Boolean
  728. Attribute FontItalic.VB_MemberFlags = "400"
  729. FontItalic = UserControl.FontItalic
  730. End Property
  731.  
  732. Public Property Let FontItalic(ByVal newValue As Boolean)
  733. UserControl.FontItalic = newValue
  734. Call CalcTextRects
  735. Call Redraw(0, True)
  736. End Property
  737.  
  738. Public Property Get FontUnderline() As Boolean
  739. Attribute FontUnderline.VB_MemberFlags = "400"
  740. FontUnderline = UserControl.FontUnderline
  741. End Property
  742.  
  743. Public Property Let FontUnderline(ByVal newValue As Boolean)
  744. UserControl.FontUnderline = newValue
  745. Call CalcTextRects
  746. Call Redraw(0, True)
  747. End Property
  748.  
  749. Public Property Get FontSize() As Integer
  750. Attribute FontSize.VB_MemberFlags = "400"
  751. FontSize = UserControl.FontSize
  752. End Property
  753.  
  754. Public Property Let FontSize(ByVal newValue As Integer)
  755. UserControl.FontSize = newValue
  756. Call CalcTextRects
  757. Call Redraw(0, True)
  758. End Property
  759.  
  760. Public Property Get FontName() As String
  761. Attribute FontName.VB_MemberFlags = "400"
  762. FontName = UserControl.FontName
  763. End Property
  764.  
  765. Public Property Let FontName(ByVal newValue As String)
  766. UserControl.FontName = newValue
  767. Call CalcTextRects
  768. Call Redraw(0, True)
  769. End Property
  770.  
  771. 'it is very common that a windows user uses custom color
  772. 'schemes to view his/her desktop, and is also very
  773. 'common that this color scheme has weird colors that
  774. 'would alter the nice look of my buttons.
  775. 'So if you want to force the button to use the windows
  776. 'standard colors you may change this property to "Force Standard"
  777.  
  778. Public Property Get ColorScheme() As ColorTypes
  779. Attribute ColorScheme.VB_ProcData.VB_Invoke_Property = ";Appearance"
  780. ColorScheme = MyColorType
  781. End Property
  782.  
  783. Public Property Let ColorScheme(ByVal newValue As ColorTypes)
  784. MyColorType = newValue
  785. Call SetColors
  786. Call Redraw(0, True)
  787. PropertyChanged "COLTYPE"
  788. End Property
  789.  
  790. Public Property Get ShowFocusRect() As Boolean
  791. Attribute ShowFocusRect.VB_ProcData.VB_Invoke_Property = ";Appearance"
  792. ShowFocusRect = showFocusR
  793. End Property
  794.  
  795. Public Property Let ShowFocusRect(ByVal newValue As Boolean)
  796. showFocusR = newValue
  797. Call Redraw(lastStat, True)
  798. PropertyChanged "FOCUSR"
  799. End Property
  800.  
  801. Public Property Get MousePointer() As MousePointerConstants
  802. Attribute MousePointer.VB_ProcData.VB_Invoke_Property = ";Appearance"
  803.     MousePointer = UserControl.MousePointer
  804. End Property
  805.  
  806. Public Property Let MousePointer(ByVal newPointer As MousePointerConstants)
  807.     UserControl.MousePointer = newPointer
  808.     PropertyChanged "MPTR"
  809. End Property
  810.  
  811. Public Property Get MouseIcon() As StdPicture
  812. Attribute MouseIcon.VB_ProcData.VB_Invoke_Property = ";Appearance"
  813.     Set MouseIcon = UserControl.MouseIcon
  814. End Property
  815.  
  816. Public Property Set MouseIcon(ByVal newIcon As StdPicture)
  817. On Local Error Resume Next
  818.     Set UserControl.MouseIcon = newIcon
  819.     PropertyChanged "MICON"
  820. End Property
  821.  
  822. Public Property Get HandPointer() As Boolean
  823.     HandPointer = useHand
  824. End Property
  825. Public Property Let HandPointer(ByVal newVal As Boolean)
  826.     useHand = newVal
  827.     If useHand Then
  828.         Set UserControl.MouseIcon = LoadResPicture(101, 2)
  829.         UserControl.MousePointer = 99
  830.     Else
  831.         Set UserControl.MouseIcon = Nothing
  832.         UserControl.MousePointer = 1
  833.     End If
  834.     PropertyChanged "HAND"
  835. End Property
  836.  
  837. Public Property Get hWnd() As Long
  838. Attribute hWnd.VB_UserMemId = -515
  839.     hWnd = UserControl.hWnd
  840. End Property
  841.  
  842. Public Property Get SoftBevel() As Boolean
  843. Attribute SoftBevel.VB_ProcData.VB_Invoke_Property = ";Appearance"
  844.     SoftBevel = isSoft
  845. End Property
  846.  
  847. Public Property Let SoftBevel(ByVal newValue As Boolean)
  848.     isSoft = newValue
  849.     Call SetColors
  850.     Call Redraw(lastStat, True)
  851.     PropertyChanged "SOFT"
  852. End Property
  853.  
  854. Public Property Get PictureNormal() As StdPicture
  855. Attribute PictureNormal.VB_ProcData.VB_Invoke_Property = ";Appearance"
  856.     Set PictureNormal = picNormal
  857. End Property
  858. Public Property Set PictureNormal(ByVal newPic As StdPicture)
  859.     Set picNormal = newPic
  860.     Call CalcPicSize
  861.     Call CalcTextRects
  862.     Call Redraw(lastStat, True)
  863.     PropertyChanged "PICN"
  864. End Property
  865.  
  866. Public Property Get PictureOver() As StdPicture
  867. Attribute PictureOver.VB_ProcData.VB_Invoke_Property = ";Appearance"
  868.     Set PictureOver = picHover
  869. End Property
  870. Public Property Set PictureOver(ByVal newPic As StdPicture)
  871.     Set picHover = newPic
  872.     If isOver Then Call Redraw(lastStat, True) 'only redraw i we need to see this picture immediately
  873.     PropertyChanged "PICO"
  874. End Property
  875.  
  876. Public Property Get PicturePosition() As PicPositions
  877. Attribute PicturePosition.VB_ProcData.VB_Invoke_Property = ";Position"
  878.     PicturePosition = PicPosition
  879. End Property
  880. Public Property Let PicturePosition(ByVal newPicPos As PicPositions)
  881.     PicPosition = newPicPos
  882.     PropertyChanged "PICPOS"
  883.     Call CalcTextRects
  884.     Call Redraw(lastStat, True)
  885. End Property
  886.  
  887. Public Property Get UseMaskColor() As Boolean
  888. Attribute UseMaskColor.VB_ProcData.VB_Invoke_Property = ";Appearance"
  889. UseMaskColor = useMask
  890. End Property
  891.  
  892. Public Property Let UseMaskColor(ByVal newValue As Boolean)
  893.     useMask = newValue
  894.     If Not picNormal Is Nothing Then Call Redraw(lastStat, True)
  895.     PropertyChanged "UMCOL"
  896. End Property
  897.  
  898. Public Property Get UseGreyscale() As Boolean
  899. Attribute UseGreyscale.VB_ProcData.VB_Invoke_Property = ";Appearance"
  900. UseGreyscale = useGrey
  901. End Property
  902.  
  903. Public Property Let UseGreyscale(ByVal newValue As Boolean)
  904.     useGrey = newValue
  905.     If Not picNormal Is Nothing Then Call Redraw(lastStat, True)
  906.     PropertyChanged "NGREY"
  907. End Property
  908.  
  909. Public Property Get SpecialEffect() As fx
  910. Attribute SpecialEffect.VB_ProcData.VB_Invoke_Property = ";Appearance"
  911. SpecialEffect = SFX
  912. End Property
  913.  
  914. Public Property Let SpecialEffect(ByVal newValue As fx)
  915.     SFX = newValue
  916.     Call Redraw(lastStat, True)
  917.     PropertyChanged "FX"
  918. End Property
  919.  
  920. Public Property Get CheckBoxBehaviour() As Boolean
  921.     CheckBoxBehaviour = isCheckbox
  922. End Property
  923.  
  924. Public Property Let CheckBoxBehaviour(ByVal newValue As Boolean)
  925.     isCheckbox = newValue
  926.     Call Redraw(lastStat, True)
  927.     PropertyChanged "CHECK"
  928. End Property
  929.  
  930. Public Property Get Value() As Boolean
  931.     Value = cValue
  932. End Property
  933.  
  934. Public Property Let Value(ByVal newValue As Boolean)
  935.     cValue = newValue
  936.     If isCheckbox Then Call Redraw(0, True)
  937.     PropertyChanged "VALUE"
  938. End Property
  939.  
  940. Public Property Get Version() As String
  941.     Version = cbVersion
  942. End Property
  943.  
  944. '########## END OF PROPERTIES ##########
  945.  
  946. Private Sub UserControl_Resize()
  947. If inLoop Then Exit Sub
  948.     'get button size
  949.     GetClientRect UserControl.hWnd, rc3
  950.     'assign these values to He and Wi
  951.     He = rc3.Bottom: Wi = rc3.Right
  952.     'build the FocusRect size and position depending on the button type
  953.     If MyButtonType >= [Simple Flat] And MyButtonType <= [Oval Flat] Then
  954.         InflateRect rc3, -3, -3
  955.     ElseIf MyButtonType = [KDE 2] Then
  956.         InflateRect rc3, -5, -5
  957.         OffsetRect rc3, 1, 1
  958.     Else
  959.         InflateRect rc3, -4, -4
  960.     End If
  961.     Call CalcTextRects
  962.     
  963.     If rgnNorm Then DeleteObject rgnNorm
  964.     Call MakeRegion
  965.     SetWindowRgn UserControl.hWnd, rgnNorm, True
  966.     
  967.     If He Then Call Redraw(0, True)
  968. End Sub
  969.  
  970. Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  971. With PropBag
  972.     MyButtonType = .ReadProperty("BTYPE", 2)
  973.     elTex = .ReadProperty("TX", "")
  974.     isEnabled = .ReadProperty("ENAB", True)
  975.     Set UserControl.Font = .ReadProperty("FONT", UserControl.Font)
  976.     MyColorType = .ReadProperty("COLTYPE", 1)
  977.     showFocusR = .ReadProperty("FOCUSR", True)
  978.     BackC = .ReadProperty("BCOL", GetSysColor(COLOR_BTNFACE))
  979.     BackO = .ReadProperty("BCOLO", BackC)
  980.     ForeC = .ReadProperty("FCOL", GetSysColor(COLOR_BTNTEXT))
  981.     ForeO = .ReadProperty("FCOLO", ForeC)
  982.     MaskC = .ReadProperty("MCOL", &HC0C0C0)
  983.     UserControl.MousePointer = .ReadProperty("MPTR", 0)
  984.     Set UserControl.MouseIcon = .ReadProperty("MICON", Nothing)
  985.     Set picNormal = .ReadProperty("PICN", Nothing)
  986.     Set picHover = .ReadProperty("PICH", Nothing)
  987.     useMask = .ReadProperty("UMCOL", True)
  988.     isSoft = .ReadProperty("SOFT", False)
  989.     PicPosition = .ReadProperty("PICPOS", 0)
  990.     useGrey = .ReadProperty("NGREY", False)
  991.     SFX = .ReadProperty("FX", 0)
  992.     Me.HandPointer = .ReadProperty("HAND", False)
  993.     isCheckbox = .ReadProperty("CHECK", False)
  994.     cValue = .ReadProperty("VALUE", False)
  995. End With
  996.  
  997.     UserControl.Enabled = isEnabled
  998.     Call CalcPicSize
  999.     Call CalcTextRects
  1000.     Call SetAccessKeys
  1001. End Sub
  1002.  
  1003. Private Sub UserControl_Show()
  1004.  
  1005. If MyButtonType = 11 Then
  1006.     If pDC = 0 Then
  1007.         pDC = CreateCompatibleDC(UserControl.hdc): pBM = CreateBitmap(Wi, He, 1, GetDeviceCaps(hdc, 12), ByVal 0&)
  1008.         oBM = SelectObject(pDC, pBM)
  1009.     End If
  1010.     
  1011.     Call GetParentPic
  1012. End If
  1013.  
  1014. isShown = True
  1015. Call SetColors
  1016. Call Redraw(0, True)
  1017. End Sub
  1018.  
  1019. Private Sub UserControl_Terminate()
  1020.     isShown = False
  1021.     DeleteObject rgnNorm
  1022.     If pDC Then
  1023.         DeleteObject SelectObject(pDC, oBM)
  1024.         DeleteDC pDC
  1025.     End If
  1026. End Sub
  1027.  
  1028. Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  1029. With PropBag
  1030.     Call .WriteProperty("BTYPE", MyButtonType)
  1031.     Call .WriteProperty("TX", elTex)
  1032.     Call .WriteProperty("ENAB", isEnabled)
  1033.     Call .WriteProperty("FONT", UserControl.Font)
  1034.     Call .WriteProperty("COLTYPE", MyColorType)
  1035.     Call .WriteProperty("FOCUSR", showFocusR)
  1036.     Call .WriteProperty("BCOL", BackC)
  1037.     Call .WriteProperty("BCOLO", BackO)
  1038.     Call .WriteProperty("FCOL", ForeC)
  1039.     Call .WriteProperty("FCOLO", ForeO)
  1040.     Call .WriteProperty("MCOL", MaskC)
  1041.     Call .WriteProperty("MPTR", UserControl.MousePointer)
  1042.     Call .WriteProperty("MICON", UserControl.MouseIcon)
  1043.     Call .WriteProperty("PICN", picNormal)
  1044.     Call .WriteProperty("PICH", picHover)
  1045.     Call .WriteProperty("UMCOL", useMask)
  1046.     Call .WriteProperty("SOFT", isSoft)
  1047.     Call .WriteProperty("PICPOS", PicPosition)
  1048.     Call .WriteProperty("NGREY", useGrey)
  1049.     Call .WriteProperty("FX", SFX)
  1050.     Call .WriteProperty("HAND", useHand)
  1051.     Call .WriteProperty("CHECK", isCheckbox)
  1052.     Call .WriteProperty("VALUE", cValue)
  1053. End With
  1054. End Sub
  1055.  
  1056. Private Sub Redraw(ByVal curStat As Byte, ByVal Force As Boolean)
  1057. 'here is the CORE of the button, everything is drawn here
  1058. 'it's not well commented but i think that everything is
  1059. 'pretty self explanatory...
  1060.     
  1061. If isCheckbox And cValue Then curStat = 2
  1062.  
  1063. If Not Force Then  'check drawing redundancy
  1064.     If (curStat = lastStat) And (TE = elTex) Then Exit Sub
  1065. End If
  1066.  
  1067. If He = 0 Or Not isShown Then Exit Sub   'we don't want errors
  1068.  
  1069. lastStat = curStat
  1070. TE = elTex
  1071.  
  1072. Dim i As Long, stepXP1 As Single, XPFace2 As Long, tempCol As Long
  1073.  
  1074. With UserControl
  1075. .Cls
  1076. If isOver And MyColorType = Custom Then tempCol = BackC: BackC = BackO: SetColors
  1077.  
  1078. DrawRectangle 0, 0, Wi, He, cFace
  1079.  
  1080. If isEnabled Then
  1081.     If curStat = 0 Then
  1082. '#@#@#@#@#@# BUTTON NORMAL STATE #@#@#@#@#@#
  1083.         Select Case MyButtonType
  1084.             Case 1 'Windows 16-bit
  1085.                 Call DrawCaption(Abs(isOver))
  1086.                 DrawFrame cHighLight, cShadow, cHighLight, cShadow, True
  1087.                 DrawRectangle 0, 0, Wi, He, cDarkShadow, True
  1088.                 Call DrawFocusR
  1089.             Case 2 'Windows 32-bit
  1090.                 Call DrawCaption(Abs(isOver))
  1091.                 If Ambient.DisplayAsDefault And showFocusR Then
  1092.                     DrawFrame cHighLight, cDarkShadow, cLight, cShadow, True
  1093.                     Call DrawFocusR
  1094.                     DrawRectangle 0, 0, Wi, He, cDarkShadow, True
  1095.                 Else
  1096.                     DrawFrame cHighLight, cDarkShadow, cLight, cShadow, False
  1097.                 End If
  1098.             Case 3 'Windows XP
  1099.                 stepXP1 = 25 / He
  1100.                 For i = 1 To He
  1101.                     DrawLine 0, i, Wi, i, ShiftColor(XPFace, -stepXP1 * i, True)
  1102.                 Next
  1103.                 Call DrawCaption(Abs(isOver))
  1104.                 DrawRectangle 0, 0, Wi, He, &H733C00, True
  1105.                 mSetPixel 1, 1, &H7B4D10
  1106.                 mSetPixel 1, He - 2, &H7B4D10
  1107.                 mSetPixel Wi - 2, 1, &H7B4D10
  1108.                 mSetPixel Wi - 2, He - 2, &H7B4D10
  1109.                 
  1110.                 If isOver Then
  1111.                     DrawRectangle 1, 2, Wi - 2, He - 4, &H31B2FF, True
  1112.                     DrawLine 2, He - 2, Wi - 2, He - 2, &H96E7&
  1113.                     DrawLine 2, 1, Wi - 2, 1, &HCEF3FF
  1114.                     DrawLine 1, 2, Wi - 1, 2, &H8CDBFF
  1115.                     DrawLine 2, 3, 2, He - 3, &H6BCBFF
  1116.                     DrawLine Wi - 3, 3, Wi - 3, He - 3, &H6BCBFF
  1117.                 ElseIf ((HasFocus Or Ambient.DisplayAsDefault) And showFocusR) Then
  1118.                     DrawRectangle 1, 2, Wi - 2, He - 4, &HE7AE8C, True
  1119.                     DrawLine 2, He - 2, Wi - 2, He - 2, &HEF826B
  1120.                     DrawLine 2, 1, Wi - 2, 1, &HFFE7CE
  1121.                     DrawLine 1, 2, Wi - 1, 2, &HF7D7BD
  1122.                     DrawLine 2, 3, 2, He - 3, &HF0D1B5
  1123.                     DrawLine Wi - 3, 3, Wi - 3, He - 3, &HF0D1B5
  1124.                 Else 'we do not draw the bevel always because the above code would repaint over it
  1125.                     DrawLine 2, He - 2, Wi - 2, He - 2, ShiftColor(XPFace, -&H30, True)
  1126.                     DrawLine 1, He - 3, Wi - 2, He - 3, ShiftColor(XPFace, -&H20, True)
  1127.                     DrawLine Wi - 2, 2, Wi - 2, He - 2, ShiftColor(XPFace, -&H24, True)
  1128.                     DrawLine Wi - 3, 3, Wi - 3, He - 3, ShiftColor(XPFace, -&H18, True)
  1129.                     DrawLine 2, 1, Wi - 2, 1, ShiftColor(XPFace, &H10, True)
  1130.                     DrawLine 1, 2, Wi - 2, 2, ShiftColor(XPFace, &HA, True)
  1131.                     DrawLine 1, 2, 1, He - 2, ShiftColor(XPFace, -&H5, True)
  1132.                     DrawLine 2, 3, 2, He - 3, ShiftColor(XPFace, -&HA, True)
  1133.                 End If
  1134.             Case 4 'Mac
  1135.                 DrawRectangle 1, 1, Wi - 2, He - 2, cLight
  1136.                 Call DrawCaption(Abs(isOver))
  1137.                 DrawRectangle 0, 0, Wi, He, cDarkShadow, True
  1138.                 mSetPixel 1, 1, cDarkShadow
  1139.                 mSetPixel 1, He - 2, cDarkShadow
  1140.                 mSetPixel Wi - 2, 1, cDarkShadow
  1141.                 mSetPixel Wi - 2, He - 2, cDarkShadow
  1142.                 DrawLine 1, 2, 2, 0, cFace
  1143.                 DrawLine 3, 2, Wi - 3, 2, cHighLight
  1144.                 DrawLine 2, 2, 2, He - 3, cHighLight
  1145.                 mSetPixel 3, 3, cHighLight
  1146.                 DrawLine Wi - 3, 1, Wi - 3, He - 3, cFace
  1147.                 DrawLine 1, He - 3, Wi - 3, He - 3, cFace
  1148.                 mSetPixel Wi - 4, He - 4, cFace
  1149.                 DrawLine Wi - 2, 2, Wi - 2, He - 2, cShadow
  1150.                 DrawLine 2, He - 2, Wi - 2, He - 2, cShadow
  1151.                 mSetPixel Wi - 3, He - 3, cShadow
  1152.             Case 5 'Java
  1153.                 DrawRectangle 1, 1, Wi - 1, He - 1, ShiftColor(cFace, &HC)
  1154.                 Call DrawCaption(Abs(isOver))
  1155.                 DrawRectangle 1, 1, Wi - 1, He - 1, cHighLight, True
  1156.                 DrawRectangle 0, 0, Wi - 1, He - 1, ShiftColor(cShadow, -&H1A), True
  1157.                 mSetPixel 1, He - 2, ShiftColor(cShadow, &H1A)
  1158.                 mSetPixel Wi - 2, 1, ShiftColor(cShadow, &H1A)
  1159.                 If HasFocus And showFocusR Then DrawRectangle rc.Left - 2, rc.Top - 1, fc.X + 4, fc.Y + 2, &HCC9999, True
  1160.             Case 6 'Netscape
  1161.                 Call DrawCaption(Abs(isOver))
  1162.                 DrawFrame ShiftColor(cLight, &H8), cShadow, ShiftColor(cLight, &H8), cShadow, False
  1163.                 Call DrawFocusR
  1164.             Case 7, 8, 12 'Flat buttons
  1165.                 Call DrawCaption(Abs(isOver))
  1166.                 If (MyButtonType = [Simple Flat]) Then
  1167.                     DrawFrame cHighLight, cShadow, 0, 0, False, True
  1168.                 ElseIf isOver Then
  1169.                     If MyButtonType = [Flat Highlight] Then
  1170.                         DrawFrame cHighLight, cShadow, 0, 0, False, True
  1171.                     Else
  1172.                         DrawFrame cHighLight, cDarkShadow, cLight, cShadow, False, False
  1173.                     End If
  1174.                 End If
  1175.                 Call DrawFocusR
  1176.             Case 9 'Office XP
  1177.                 If isOver Then DrawRectangle 1, 1, Wi, He, OXPf
  1178.                 Call DrawCaption(Abs(isOver))
  1179.                 If isOver Then DrawRectangle 0, 0, Wi, He, OXPb, True
  1180.                 Call DrawFocusR
  1181.             Case 11 'transparent
  1182.                 BitBlt hdc, 0, 0, Wi, He, pDC, 0, 0, vbSrcCopy
  1183.                 Call DrawCaption(Abs(isOver))
  1184.                 Call DrawFocusR
  1185.             Case 13 'Oval
  1186.                 DrawEllipse 0, 0, Wi, He, Abs(isOver) * cShadow + Abs(Not isOver) * cFace, cFace
  1187.                 Call DrawCaption(Abs(isOver))
  1188.             Case 14 'KDE 2
  1189.                 Dim prevBold As Boolean
  1190.                 If Not isOver Then
  1191.                     stepXP1 = 58 / He
  1192.                     For i = 1 To He
  1193.                         DrawLine 0, i, Wi, i, ShiftColor(cHighLight, -stepXP1 * i)
  1194.                     Next
  1195.                 Else
  1196.                     DrawRectangle 0, 0, Wi, He, cLight
  1197.                 End If
  1198.                 If Ambient.DisplayAsDefault Then isShown = False: prevBold = Me.FontBold: Me.FontBold = True
  1199.                 Call DrawCaption(Abs(isOver))
  1200.                 If Ambient.DisplayAsDefault Then Me.FontBold = prevBold: isShown = True
  1201.                 DrawRectangle 0, 0, Wi, He, ShiftColor(cShadow, -&H32), True
  1202.                 DrawRectangle 1, 1, Wi - 2, He - 2, ShiftColor(cFace, -&H9), True
  1203.                 DrawRectangle 2, 2, Wi - 4, 2, cHighLight
  1204.                 DrawRectangle 2, 4, 2, He - 6, cHighLight
  1205.                 Call DrawFocusR
  1206.         End Select
  1207.         Call DrawPictures(0)
  1208.     ElseIf curStat = 2 Then
  1209. '#@#@#@#@#@# BUTTON IS DOWN #@#@#@#@#@#
  1210.         Select Case MyButtonType
  1211.             Case 1 'Windows 16-bit
  1212.                 Call DrawCaption(2)
  1213.                 DrawFrame cShadow, cHighLight, cShadow, cHighLight, True
  1214.                 DrawRectangle 0, 0, Wi, He, cDarkShadow, True
  1215.                 Call DrawFocusR
  1216.             Case 2 'Windows 32-bit
  1217.                 Call DrawCaption(2)
  1218.                 If showFocusR And Ambient.DisplayAsDefault Then
  1219.                     DrawRectangle 0, 0, Wi, He, cDarkShadow, True
  1220.                     DrawRectangle 1, 1, Wi - 2, He - 2, cShadow, True
  1221.                     Call DrawFocusR
  1222.                 Else
  1223.                     DrawFrame cDarkShadow, cHighLight, cShadow, cLight, False
  1224.                 End If
  1225.             Case 3 'Windows XP
  1226.                 stepXP1 = 25 / He
  1227.                 XPFace2 = ShiftColor(XPFace, -32, True)
  1228.                 For i = 1 To He
  1229.                     DrawLine 0, He - i, Wi, He - i, ShiftColor(XPFace2, -stepXP1 * i, True)
  1230.                 Next
  1231.                 Call DrawCaption(2)
  1232.                 DrawRectangle 0, 0, Wi, He, &H733C00, True
  1233.                 mSetPixel 1, 1, &H7B4D10
  1234.                 mSetPixel 1, He - 2, &H7B4D10
  1235.                 mSetPixel Wi - 2, 1, &H7B4D10
  1236.                 mSetPixel Wi - 2, He - 2, &H7B4D10
  1237.                 
  1238.                 DrawLine 2, He - 2, Wi - 2, He - 2, ShiftColor(XPFace2, &H10, True)
  1239.                 DrawLine 1, He - 3, Wi - 2, He - 3, ShiftColor(XPFace2, &HA, True)
  1240.                 DrawLine Wi - 2, 2, Wi - 2, He - 2, ShiftColor(XPFace2, &H5, True)
  1241.                 DrawLine Wi - 3, 3, Wi - 3, He - 3, XPFace
  1242.                 DrawLine 2, 1, Wi - 2, 1, ShiftColor(XPFace2, -&H20, True)
  1243.                 DrawLine 1, 2, Wi - 2, 2, ShiftColor(XPFace2, -&H18, True)
  1244.                 DrawLine 1, 2, 1, He - 2, ShiftColor(XPFace2, -&H20, True)
  1245.                 DrawLine 2, 2, 2, He - 2, ShiftColor(XPFace2, -&H16, True)
  1246.             Case 4 'Mac
  1247.                 DrawRectangle 1, 1, Wi - 2, He - 2, ShiftColor(cShadow, -&H10)
  1248.                 XPFace = ShiftColor(cShadow, -&H10)
  1249.                 Call DrawCaption(2)
  1250.                 XPFace = ShiftColor(cFace, &H30)
  1251.                 DrawRectangle 0, 0, Wi, He, cDarkShadow, True
  1252.                 DrawRectangle 1, 1, Wi - 2, He - 2, ShiftColor(cShadow, -&H40), True
  1253.                 DrawRectangle 2, 2, Wi - 4, He - 4, ShiftColor(cShadow, -&H20), True
  1254.                 mSetPixel 2, 2, ShiftColor(cShadow, -&H40)
  1255.                 mSetPixel 3, 3, ShiftColor(cShadow, -&H20)
  1256.                 mSetPixel 1, 1, cDarkShadow
  1257.                 mSetPixel 1, He - 2, cDarkShadow
  1258.                 mSetPixel Wi - 2, 1, cDarkShadow
  1259.                 mSetPixel Wi - 2, He - 2, cDarkShadow
  1260.                 DrawLine Wi - 3, 1, Wi - 3, He - 3, cShadow
  1261.                 DrawLine 1, He - 3, Wi - 2, He - 3, cShadow
  1262.                 mSetPixel Wi - 4, He - 4, cShadow
  1263.                 DrawLine Wi - 2, 3, Wi - 2, He - 2, ShiftColor(cShadow, -&H10)
  1264.                 DrawLine 3, He - 2, Wi - 2, He - 2, ShiftColor(cShadow, -&H10)
  1265.                 DrawLine Wi - 2, He - 3, Wi - 4, He - 1, ShiftColor(cShadow, -&H20)
  1266.                 mSetPixel 2, He - 2, ShiftColor(cShadow, -&H20)
  1267.                 mSetPixel Wi - 2, 2, ShiftColor(cShadow, -&H20)
  1268.             Case 5 'Java
  1269.                 DrawRectangle 1, 1, Wi - 2, He - 2, ShiftColor(cShadow, &H10), False
  1270.                 DrawRectangle 0, 0, Wi - 1, He - 1, ShiftColor(cShadow, -&H1A), True
  1271.                 DrawLine Wi - 1, 1, Wi - 1, He, cHighLight
  1272.                 DrawLine 1, He - 1, Wi - 1, He - 1, cHighLight
  1273.                 SetTextColor .hdc, cTextO
  1274.                 DrawText .hdc, elTex, Len(elTex), rc, DT_CENTER
  1275.                 If HasFocus And showFocusR Then DrawRectangle rc.Left - 2, rc.Top - 1, fc.X + 4, fc.Y + 2, &HCC9999, True
  1276.             Case 6 'Netscape
  1277.                 Call DrawCaption(2)
  1278.                 DrawFrame cShadow, ShiftColor(cLight, &H8), cShadow, ShiftColor(cLight, &H8), False
  1279.                 Call DrawFocusR
  1280.              Case 7, 8, 12 'Flat buttons
  1281.                 Call DrawCaption(2)
  1282.                 If MyButtonType = [3D Hover] Then
  1283.                     DrawFrame cDarkShadow, cHighLight, cShadow, cLight, False, False
  1284.                 Else
  1285.                     DrawFrame cShadow, cHighLight, 0, 0, False, True
  1286.                 End If
  1287.                 Call DrawFocusR
  1288.             Case 9 'Office XP
  1289.                 If isOver Then DrawRectangle 0, 0, Wi, He, Abs(MyColorType = 2) * ShiftColor(OXPf, -&H20) + Abs(MyColorType <> 2) * ShiftColorOXP(OXPb, &H80)
  1290.                 Call DrawCaption(2)
  1291.                 DrawRectangle 0, 0, Wi, He, OXPb, True
  1292.                 Call DrawFocusR
  1293.             Case 11 'transparent
  1294.                 BitBlt hdc, 0, 0, Wi, He, pDC, 0, 0, vbSrcCopy
  1295.                 Call DrawCaption(2)
  1296.                 Call DrawFocusR
  1297.             Case 13 'Oval
  1298.                 DrawEllipse 0, 0, Wi, He, cDarkShadow, ShiftColor(cFace, -&H20)
  1299.                 Call DrawCaption(2)
  1300.             Case 14 'KDE 2
  1301.                 DrawRectangle 1, 1, Wi, He, ShiftColor(cFace, -&H9)
  1302.                 DrawRectangle 0, 0, Wi, He, ShiftColor(cShadow, -&H30), True
  1303.                 DrawLine 2, He - 2, Wi - 2, He - 2, cHighLight
  1304.                 DrawLine Wi - 2, 2, Wi - 2, He - 1, cHighLight
  1305.                 Call DrawCaption(7Case  -&H20)
  1306.        2, WitBl       Dr3r     If MyBu  2, WitBShiftC3'Net&H20)
  1307.  WitBusR
  1308. perty = ";A - 2, He - 2, ShiftCCase  If MyB 1, cHighLight
  1309.                 CsR
  1310.             CaseDrawLin- 2, angle 1, 1, ,iftColp's Integer, SiitBusR
  1311. peFseDrawLin- 2angle 01OwFrame e e e e e e e e e e e e)s Bo He - nteger, svel = isSof2, ShiftCi , He - 2, cWi - 3, 3,EiftCHe - () As MoE= isSof2, ShiftCi d If
  1312.      t) e e e e rTrue)
  1313.     PropertyChanged:5 e e e e e aawLine WLin- 2anglKOCON"
  1314. End Property
  1315.  
  1316. Public Property ine WLine          DrawRectangle 0, 0, Wi, He, OXPb, True
  1317.     MoEN isp   , pDC, 0, 0, vbSrcCopy
  1318.                 Call DrawCaption(Abs(isOver))
  1319.                 Call le 0, k
  1320.     t) e e e e rTrue)
  1321.     PropertyChang   rue
  1322. c e e i -2LCT, r'c e e i -2LCT, r'c e e i -2LCT, r'c e e i -2LCT,l 2, He - 2, ShiftColor(cbit MyButtonType = [Flat Hirue
  1323.   e-i - 3, He - 3, XPFace
  1324.           ce XP
  1325.  
  1326. c e e - 3, &H6BCBFF, Wi, H   ,    o    Propeil DrawFocusR
  1327. Oe this picture immediately
  1328.     PropertyChanged "PICOWi - 2, He - 2, cShadow
  1329.                 WcShaDraw               WcShaDraw               WcShais ppertyChanged "PICOWi - 2, He - 2, cShat) e egle rButtonType = [Flat Hirue
  1330.   e-i - tlue = .ReadPirue= 2) * ShiftColorOX    DrawR    Dra - eadPir-sO[Flat Hirue
  1331.   e-i - tlue = .ReadPirue= 2)=xel Wi - 2, 2, ShiftColor( Hiru
  1332. Public Poe - 2, ShiftColor(cbit MyButDim prevBold As B2is pictDrawFrs2LCT,  buttons
  1333.         
  1334.         XPFace ShiftColor(cb=wCaptAbs( UserCotWi - 2, 2, ShiftCo  &H5     DrawFrame cSuliftCo  &H5      t) e e e e rTrue)
  1335.     PropertyChanged:5 e n(2)
  1336.                 If MyButtonType = [3D Hover] Theb=wCaptAbs( Userne 2, 1erne 2, 1erne 2, 1ernngle         P
  1337.  
  1338. Color(cShadow, -&H1A), True
  1339.                 mSetPixel 1, He - 2,      Rectangle 0, 0, WWi,  mSetPixel ow
  1340.                 WcShaDraw               , HWwFocusR
  1341. Oe thi  WcShaDr     w3erne 2, B ,          Case 5 'Java
  1342.            - 2, 1,le 0, 0, WWi,  mSetPiColo&s, 0, WWi,  mSetPiColo&s, 0liftCo  &H - 2, 2,o  &H - 2, 2,o  &H - 2, 2,o  &H - 2,ype = 1      mSe2, 2,o  &H  DrawLin10)egles  mSetPiCol}  &H DrawEllipOX     -&H40)
  1343.    LPiCol}  &HtwLiDrawFocusR
  1344.         3FocuEoS11r     w3erne 2, B ,ontNa       i  -&H40)
  1345.    LPR
  1346.        Wi, He, cDarkFFFFXaptAbs( Useo  &tAbs( Useo  &tAbs( Useo  &taptAb - () As MoE= isSof2, Shil = prevB- (db - () As MoE====uEsne 2, B ,oA3y As Me 1   e = .ReadPirRdePiColFlat Hirue
  1347.   " 
  1348.       i  -&H40)
  1349.    LPR-&H40)
  1350.   " 
  1351.   YcTrue
  1352.        ConTypeeEvent MouseMovPFace
  1353.      . False
  1354.                 Calue
  1355.    all Redraw(2, False)
  1356.             isOver = False
  1357.       ConTypepctCo    3k
  1358. End If
  1359. , 12 'Flat buttons
  1360.         e e rTawLine WLin- 28        e e rTawLse
  1361.   ns
  1362.                 Call DrawCaption(2"
  1363. End Property
  1364.  
  1365. Public   i  -&H40)
  1366.       XPFacypepctCo  ntete hWnd.VB_UserM   -&H40)
  1367.    LPiCte0, 0, WWi,  m    awLin- 2, 
  1368.  
  1369. Public Propel, 0, WWi,  mSe                 DrawRectangleWWi,  mSe ic P  mSeopel, 0, WWi,  mSe                                   DraEypepctCo  ntet, 2, .ReadProperty("Pp         Case W   DrawEllipse 0, 0, Wi, He, cDai, c   i  -&H40)
  1370.       XPAsDefault Then
  1371.              57 c ver))
  1372.                 Call A   BitBlt hdc, 0, 0, Wi, He, pDChWnd.VB_Us2DCol}  &H DrawElRectangleW             40), hat) e egle rButtonType =  2, B ,cus Or Ambient.Display=Sxe egle rBisplay=Sxe egle rBis  DrawLine 
  1373.     l Redraw(False
  1374.             Shadow, cShiftColor(Wi,  D ,oA36 hat) e eglidraw(Falrr))
  1375.                 Call A   r))
  1376.  2, He=Sxe  ,oA36 hat) e eglidraall A   r))
  1377.  2, He=Sxe  ,oA36 hatWLit hdc, 0, 0, Wie 
  1378.     l Redraw(False
  1379.       
  1380.  2, He=Sxe  ,oA36 hatWLit hdc, 0, 0, Wie 
  1381.     l Redraw(False
  1382.       
  1383.  2, Hes( Useo  &tA      
  1384.  2, F    m0, 0draw(False
  1385.        28        d    Case 5 'Java
  1386. o       
  1387.    lTex), rc, DT_CENTER
  1388.  'Po  C   
  1389.    l, Fudi,DT_CENTER
  1390. P
  1391.     d"Case        stepXP1 ====YPE", 2)
  1392.     elTex = .ReadProperty("TX"+p   ehing Then Call Redraw(lastStat, T<- 2,butt,ropert  ehing Then Call Redraw((4SelTex = .ReadProperty("T2, 
  1393.  
  1394. Public PCall Re
  1395.  Re
  1396.   C   
  1397. WBr50, 
  1398.  
  1399. draw(lastStat,  Colo
  1400.  2, He ng Then Call Redraw((4To
  1401.  2,2,butt,ropecTo
  1402.  2,2,butWLine ocusR
  1403.     egld P( Useo  &tAbs( Uc, 2, He - 3, ShiftColor(XPFace,n Certy("2DCoE  egld P( Us= [Fla0
  1404. '#@#@#@#@G-Col P( Us"c Prop6 ()
  1405. riS4)
  1406.                 Fori-&H40)w=sR
  1407.     egld P( -2LCTel 2,o  , He - 3,H       erty@G-Col 3,H       eIE0)w=sR
  1408.     egld P( -2LusR
  1409. erty@G-Col 
  1410.  Re
  1411.   C   A, WiDrawFocu.VB_     W
  1412. eAraw(FalseFocusb= [Flan             Call DrawFocutBlt hd3ype)Araw(FalseFocuype)Araw(FalseFocuypeol}  *xrc.Top - 1, fv<SetPixU(FalsDrawR    Dra - eaurc.Top - 1, fv<SetPixU(FalsDrawR    Dra -("TX"+p   awCaption(AbCol 3,H       eIE0o("TX"+p   awCaption(AbCol 3,H       eIE0o("TX"+perMyChanged "VArue
  1413.   e-i - 3, He - 3, XPFace
  1414.           ce XP
  1415.  
  1416. c e e - 3, &H6B= e - lmlmlmlmlmlmlmlml  2, exU(FalsDrawR   ", Fa(c, 2, He - 3, ShiftColor(XPFace,n Certy("2DCoE  egld P( Us= [Fla0
  1417. '#@#@#@#@Tr 0, 0, Wi,-@#@#@#@Troke_PrlsDr     - 2, 1,le 0,u- lmlmlm
  1418.  
  1419. c e e - 3,1erne 
  1420.   .   eiftCol1@#@#@RoH, ShiftColor(XPFace,n CeR
  1421. P
  1422.   &H40)   v r'c e e i -2LC(n    Color( e e e e e e e e il, 0, WWi,  mSS2LC(n =in( ee e e eN.n    Color( e e e e cie il, 0, WWi,  mS6u"PICOW'So if you wSo if you wSo if y
  1423.                 mSetPixel 2, el 2,o  , He - 3,H      &H        Ca  ", 22, el 2,o  , He &H_coTrue
  1424.     
  1425.     If He Then Call Redraw(0, True)4a4G-Col 3,H   DrawFocusR
  1426.             Case 11 'transparesparesparesparesparesparespares    w3erne 2, B ,          Case 5 'Jalr     w3erne 2, B ,          C'Jalr    heP          Nex<    w3ern   ColWi,  mSS2LC(n =in( ee e
  1427.       DrawFTsespar Then
  1428. '#@#@#@#@#@# BUTTONtect = se Draw.1oX  B ,       =7e BUTTOColor(c# BUTlor(c# BUTlor(uypeol}  *xrrue= 2)=xel Wi - 2, 2,l W Case MyButtonTypnmSS2LC(n =in( ern   ColWi, hif
  1429.         2, 2,l eeEvent MouseMoht
  1430.                 Cs   Cs   Ck    a"BCO       PrlsDr      W P6  Case  
  1431. c e e - 3,3HighLight, cShadow, cLight, False
  1432.              ine Wi - e  eol}Falseeol}play=Sxe egl     )Wi - e  eol}Falseeol}plaeee)
  1433.  gl          P- 1, fv<SetPixU(FalsDrawR e)T      Case X    D  3FocuEieolB, 2, He - 3, y=Sxe egl     )Wi - e  eol}Falseeol}plaeee)
  1434.  gl          P- 1, fv<SetPixU(FalsDr}plaeee)
  1435.  gl          P- im'&H8),ect = se Draw.1oX  B ,       =7e BUTTOColor(c# BUTlor(c# BUTlor(uypeol}  *xrrue= 2)=xel Wi }
  1436. m B lor(c# BUTlue
  1437.     s)             TTOColor(c# BUTlor(color(XPFace, E:xe e         lor(color(XPFace, E:xe e         lor(color(XPFace, E:xer(color(transparentdraw(Fae)Arawin( ee Aed = isEnabled
  1438. PropertyChanged "ENAB"
  1439. Es    w3erne 2,p &HCC9999, TrecsEnabled
  1440. PropertyChanged "ENAB" &HCC9999r(tl), hat) e egle rButtonType =  2, B ,cus Or Ambient.DisFalsDrawR e)3erne awLine3erne 2, B ,       PFaceier ghLight, cShadow, cLighdraw(F  }
  1441. m B loruerM   -&H40)
  1442.    LPiCte0, 0, WWi       lor(color(XPFO12 'Fl= w3e"5r'c e e i -2LC(n    Coee)
  1443.  gl    ,Uc, 2, H) e egle rButtonType =  2, B .Wriapt5color(XPFO1Teol}Falseeol}plaeee)
  1444.  gl Face,rawR e)3erne awLine =  2, B . 3FU          Cs   Cs   Ck    a"BCO       3, y=Uture
  1445. Attribute Mou
  1446.    lseeoe         Cs   Cs   Ck    a"BCO       3, y=Uture
  1447. Attribute Mou
  1448.    lseeoe         Cs   Cs   Ck E>O1all .WrieudProperty("VAL       Cs    lm      anged "ENAB"
  1449. PE", lor(coloreoe   lm      anged "ENAB"
  1450.  Cs  2, 1,
  1451. Pr- 1, fv<S6s  2, r ute =   DrawLine 2, 1, WirawLine 2,el Wi }
  1452. m B lor(c# BUTlue
  1453.  , 1)iinensparesparesparespareseo  &tAbs Al Wi }
  1454. mesp_cShadow, -&H30), True
  1455. R
  1456.         End Select
  1457.     anged "EDkine 2, He - 2, Wi - 2, He - 2, cHighLight
  1458.        c"
  1459. End Property
  1460.  
  1461. Pub Select
  1462.    ouritePropert
  1463.         anged "eao FacFalsene 2 "
  1464. E awCaption(AbCol 3,H       eIE0o(" 3FU          Cs   Cs   Cmiuuuu 2, Wi SS2LC(n =in( ee e e eN.n    Color( e e e e cie  a"BCOao FacFaNext
  1465.   _(AbCol
  1466.                 ehing Then Calle e e e e e e angedHe - =Fal- 3,ert
  1467.         anged "eao FacFalsene 2 Wi SS2LC(n =in( ee e e eN.n    Color( e, TrecsEnable=in( eeCOao FaWi,  D ,oA36 hat) eREnabled
  1468. End Prope Trz       A36Loperty("T2, 
  1469.  
  1470. Public PCall Re
  1471.  RkSh
  1472.  gl FwR    Dra - eaurc.Top - 1, fv<SetPixU(FalsDrawR    Dra,, 
  1473.  
  1474. sk = .ReadPrue)e(He He ighLigh0, True
  1475.                 mSetPi(hLighrame cLighdc): pBM  the bled
  1476. End Prope Trz       A36Loperty("TR, GetSysColo6Lo 
  1477.  
  1478. s.en Dr6LoA36 hat) eREnabled
  1479. End Prope Trz       A36L2, WPixel Wi - 4, He - 4, cFace
  1480.              l     y, 0, WWis(isOver))
  1481. HP6  Case  
  1482. c e e - 3,3H  *xrriftColor(tol}  *xrcTO36LopeTR, Geled
  1483. EnlWi, hif
  1484.        - eaV_FalsDra6LopeTR, Geled
  1485. EnlWi, hif
  1486. , True
  1487.       Cs   Ck E>O1allDrawLineWi,edHe6Loperty("TR, GetSysColo6Lo 
  1488. alle  Loperty(" e alle  LodCallf
  1489. ,0)
  1490.    LPiCte
  1491. c e e - 3,3H  *xrrift6Lo Re
  1492.  RkSh
  1493.  gl FwR    Dra -   DrawLine Wi - 2, 2, Wi -is/her desk Cs   Cmiuui O1Teol}FalDrawRectangle 1, 1, Wi e=Sxe  ,ond Prope Trz       A36L2, WPi ,ond Prope Trz     PrEuee e eN.n    Color( e e ene 2,p &HCeolB, 2, He - 3, y=Sxe eU(FalsDr}plaeee)
  1494.  gl               A36L2, WPi ,ond P,o  :(l    R            miuui O1Teol}FalDrxe eU(glidRectangle 1, 1, Wi eI        Wi, Hightangle3      eIE0)
  1495.              XPFacS
  1496.   S
  1497.   S
  1498.   Sn         miuui O1Teol} DrawRecta82r Wi - 2, 1,S
  1499.      ky    mi  mi  Case 5 'Jalr     w3erneeN.n    Color( e e LineWi,      A36Loperty1,S
  1500.      ky    mi  mi  Case 5 'Jall   i - 3ci - 3ci - 36LdCallf
  1501. ,0)aw(Fy1,He - 2      Cs   Cs   Ck    a"BCO       PrlsDr      W P6  Case }  *xrcTO36LopeTR, Geled
  1502. EnlWi,)O36LopeTRH0,r  we LineWi,      A3Wi,W   DrawEllipse 0, 0, W LineWi,(R  a"BCO       PrlsDr(A), TrurawCaptionhen Ca"ipse 0, 0, W Line)
  1503.  gl               A36L2, WPi ,i(0,  1, cHighLightnLx"'NhtnLx"'NhtnLx"'N - 3ci - 36LdCallf
  1504. ,0 Mou
  1505. i - 2,{EllftFDr      W P6  Case }  *xrcTO36LopeTR, Geledt
  1506.  gl   r(XPFace, -&H30, Trucedt
  1507.  g
  1508. se), E:xer(color(((((((((((((((((((essKeys- 2, cDarkSh a"BCO     f
  1509. ,0 MlDrawRectangle 1, 1, Wi e=Sxa(color((((((o  &H -       Wi, Hightangle3     HighLi, cShadow, True
  1510.                     Call DrawFocusR
  1511.          hadom 1, Wi e=wRectanglwRecVAL   e3      eIE0)
  1512.              XPFacS
  1513.  ou
  1514. angle f4r(cHighLi, cSha4D10
  1515.     "1           e3      eIE0)
  1516.   hadomf   XPFacS
  1517.  pares4gl Fw   a"BCO   0lorRgf     Oer(c
  1518.  pares4gl Fw   a"BCO   0lorR8BCO   0lorRgf     Oey =  Tru
  1519.  RkSh
  1520.  gl FwR    Dra - eaurc.kSh
  1521.  g0)w= 2)=xel Wi - 2, 2,e - 2,   Dra - e.  0lorRgf   ,,E a"BCO     f
  1522. ,0 MlDraw Abs(MyCol- 2, B . 3FU Wi - 2, 2, Wi -,uB,dged "EDkine 2, He - 2, Wi - 2, He - 2, cHighLlf
  1523. ,y1,He -", cValue)
  1524. End With
  1525. End Sub
  1526.  
  1527. PH TTOColor(c# BUTlor(c(MyCol-eeoe         Cs   Cs   Ck E>O1all .Wrieudn       DrawRectangldge PictureNormal() As StdPicture
  1528. AttribuDreNormge 7tPixU(FalsDr ne.Left - 2eN.n   e.Left - 2eN.n   e.Left - ttribuolor(tol}  *xrcTO36LopeTRNor }  *xrcTO36LopeTR, Geledt
  1529.  gl   r(XPFace, -&H30,pure
  1530. Attribu }  *xrcTO36LopeTR, Geledt
  1531.  gl   r(XPFace, -&H30,p              DrawFrame cShadow,                            e)3erneLopeTRNe 2, 1, WirawLine 2,el r(uypeol}  *x)
  1532.                 mSetPixt - ttribuolor3r    End If
  1533.     PropertyChangeyxt - ttriP6  Case }  *xa2LC         mSetPixt - ttri"ed
  1534.    5  mSeuttonType L     CChangeyxt - ttriP6  Case }  *xa2LC         mSetPixt - ttri"ed
  1535.    r      htangSetPix  ouritse 0, 0, W    *xa2L  0, kYu2, ( C  (d
  1536.  u 2)  e d     e)3ow,                  B 0, tse 2)  e d     e)3ow,           mSeu=,Ior(((6Lo 
  1537. alle  Lo+ropertw r(,e - ct MouseIcon = UserConT:            Draw ,oA3y As M- r(,e  Hightangle3     HighLi,  Hightangle3     ibuolor3      i, c   t cSha              Call DrawC,Lo+u(d
  1538.  u 2)  e d  r(cShadow, -i, c   t cSha            udEuI* cFace, ethtangle3     ibuolor3   Dgle3 buolor3   Dbu6 cShaeIcon = Us
  1539.             CaseDrawLiw, -iaeI -iaeguo He
  1540.           tanglDra buolor3*xrcTO.lDraanglwRecVAL   e3      eIE0)
  1541.      dMgle3 b e3   
  1542.  g0(cShadowpi, c +o_e  *xrcTO36LopeTR, Geledt
  1543.  gl   r(XPFace,   *xrcTO36LopeTR, Geledt
  1544.  g  hadomf  PFace       EGelTO3 - 2yrcTO3TRNe 2, 1iWhtangleTR, Geledt
  1545.  gbl Re
  1546.  RkSh
  1547.  gGrTawLineoRNe 2, 1iWhtartwle3     ibuolor3   Dgle3 buolor3   Dbu6 cwR    Dra,,RtangSetnhS
  1548.      ky    mi  mi  C:c_i - tl 'tran immediate   DrawRectangle 0ect-ru
  1549.           Cs   Cs   Ck  &H40)   v r',nM      Cs   Cs   Ck  &H40)  DrawReg is drawn here 3, yrcTO36Lfaw ,oA3y As M- r(,e  Hig M- r(mnarkS6 hatWLit hdc, 0, 0, Wie 
  1550.   k  &H40)  DrawReg is drawnc(tol}  *xr           WcSh DrawReg is d Dra6LopeTR, Geledt
  1551. Shadow, -i,A is d Dra6LopeTR,  i - 3ci - 3ci= isSof2, SLrty
  1552.  
  1553. Public Prleaurcu3ci= M     eIE0o( hatWLit hdc,cSha    ise 5i-&Hori-&H40)w=sR
  1554.     egld P( -2LCu lor(c#nabled,cSh"Yu2Liw, -iaeI -iaeguo He
  1555. leaurcu3ci= M     eI yrcTO36Lfaw ,oA3y As M- r(,e  Hig M- r(mnarkS6 hatWLit hdc, 0, 0e5h,          mSetPiPixel 1, HepeTR,  i - w Abs(MyCol- 2, B . 3FU Wi - 2, 2, Wi -,uB,dged "EDkine 2, He - 2, Wi - 2, He - 2, cHighLlFU W_< fv<Sethad, Wi -,uB,dg, Wi    0,  1, cHighLightnLx"tur He - 2, c+ 4, fc.Y + 2, &HCC9999, True
  1556.             Case 6 'C999wRecVAL   e3      eIE0)
  1557.              XPFacS
  1558.  ou
  1559. angle f4rE0)
  1560.            , Wi, He, Shi3IE0)
  1561.  me 2, He - 2, Wi it hdc, 0,L            mSetP(
  1562.  hatWLit hdc, 0,  Ck  &H40)   v r'(l OlDraanglw0,  Ck  &H40)   v r'(l Ol36     0,L   me 2e 2, He - 2, Wi it hdc, 0,L              0lorR   gle    v    Call DrasWi it hdcCase 3 'Windows XP
  1563.                 stepXP1 = 25ws XP
  1564.      m         stepXP1)w=   t HirauE      2e 2, He - 2, Wi it hdcl P6       2e 2, He - 2, Wi it hdcl P6       2e 2, He Wi - 4, Hee - 2, Wi it hdcl P6       23    3ci -    2e 2, He - 2, WEMXPFace,n
  1565.  mB2e 2, He 1N-0, Wi, He, sR
  1566.             Caaaaaaaaaaan CeH WWi,  mSS2S2S2S WW0lor- 6, cH=2mSS2S2S2Sp(XPFack  mSS2S2iie -     m         stepX   egld P( -2LCu lor(c#nabled,cSh- 2, , -iaeI -iaeguo He
  1567.    o=AH,52, , -iaeI -guo He
  1568.    o, ,  2e 
  1569.    o=AHiI -iaeguo He
  1570.    f
  1571. ,0 MlDreMaskColore 
  1572.    o=2MlDreDra - em         st
  1573.  g
  1574. se), E: 0, kYu2, iaeguo He
  1575.    f
  1576. ,0 MHkCol&&&&&&&&&&&&&&&&& ixxrcTO.eledt
  1577.  g lsDr MHkcgle 1c      gle 1c      gle 1c   -iaeydt hdc,7hLi, cSha4D10
  1578.    -iaeydt,e  Hig M- .)G  &H40)   v rerty &HCC9999, True]hat i3IE0)
  1579.  me 2, He - 2, Wi it hdgggggggggg stept
  1580.  g
  1581. sCdt,e  Hig M-g
  1582. sCdt,$we icbB . Ougggggggg stept
  1583.  g
  1584. sCdt,e  Hig M-g
  1585. sCdt,$we icbB . Ougggggggg stept
  1586.  g
  1587. sCdt,e  Hig M-g
  1588. sr Ambient.g
  1589. sCdt,e  , ,e icbB0, Wi, He, Abs(isOver) *)w= 2)=xel Wi - 2, 2,e - 2,   Dra - e.  0ise 5i-&H40)we, ACt - 2 2,   D 0ise 5i-r Ambi=xel Wiu(6Lo 
  1590. a,e -oBM = hat i3IE0)
  1591.  me 20, i, Wi, i, ShiftCoLbg
  1592. sCddt,e  Hig M-g
  1593. sCdt,$we 
  1594. aDrawL hdggggggg c +o_e  *xrSdt,e  H  ,oA36 hatWLit hd2, He mSS2uttonType = Ihrame awRectangle 0, 0, Wi - 1, He - 1)
  1595.       uo HeDse 5 'Java
  1596.       &peol}  *xrmb - () As Moo Hs
  1597.    O       2e 2- () As Mooit hd2, He mSi - e  eole  wFocusR
  1598.            mRo -  2- () As Mbiertw r(,e - ct MouseIcon = UserConT:            Draw ,oA3y As   me 2e 2, He - 2, Wi it hdc, 0,L  uE      2e 2, He - 2,  new M-g
  1599. sr Ambil, 1
  1600.   u - 2 2      A36L22M-g
  1601. sr Amb'sOver) *) ct MouseIcon = UserConT:     M- rieviceCaps(hde.  0ise 5i WEMX   st
  1602.  g
  1603. stplay=Sxe egl     )Wi - e  e - eT:     M- rievi     )Wi - e  e - eT:     M- rievi     )Wi - e  e -6LopeTR,  i - 3ci - 3ci= isSof2, SLrty
  1604.  
  1605. Public PrleeI -iaegp 2)  oo
  1606.             e  e - eT:     M- rievi rievi     )Wi - e  e i= isS2 2      A36L22M-g
  1607. sr Amb'sOver) *) ct MouseIcon = ULCaps(hde.  0ise 5i WEMX   st
  1608.  g
  1609. st(l Ol36     0,L   me 2e 2, He - 2, Wi it hdc, 0,L             ce }  *xrcuoperty MlDr36    e i  ce s   stepX      =Wi it hdcl P6 6    e  0ise 5i WEMX   )e.  0is M-
  1610.  g
  1611. 3usR
  1612.        ol-  e  '    e i  cL", Wi - e  eol}Falc    )Wi - e f rerw
  1613.       e  '    e i 16L22M-BO6 6    e  0ise 5i WEMX   )e.1 0ise 5i WEMX   st
  1614.  g
  1615. st(l d9TT2wTO36Lopl Wi - h  cL", Wi - e  S
  1616.  9TT2r#alc   e
  1617.           ae  ' * WEBMX   )e.1 0ise 5i WEMX   s1)w= - () o uEL",ase  
  1618. c e e - 3,3H  *+is M-
  1619.  g
  1620. 3usR
  1621.        ol-  e  '    e  e - eT:     M- rievi rievi     )Wi e -= - pecTo
  1622.  2,2,be, A  '    e i  cL", Wi - eo
  1623.  2,2bTT2r#alc                                            mSetPi(hLighr,2,be, A  '    e i  cL", Wi - eo
  1624.  2,2bTT2r#alc                                  1)w=    fi     )mighr,2              Elsd MyCol i3IE0),   Dra - e.  0ise 5i-&H40)we, ACt - 2 2,   D 0ise 5i-r Ambi=xel Wiu(6Lo 
  1625. a,e -oBM = hat i3IE0)
  1626.  me 20, i,  is drawn here 3, yrcTO36Lfaw ,oA3y As Mem   Ed P( -2LCTnt hdc,cSha    ise 5i-&Hori-&H40)w=sR
  1627.     egldoion(2)
  1628.     -ia 0ise 5i WEMX .dc, 12.(He - 2e  , He EOopst
  1629.  g
  1630. st(l d9TT2wTO36Lopl Wi - h  cL", Wi EOopst
  1631.  i(  cL", Wi EO        1)w=    fi &0)we, ACt - 2  WEMX .dc, 12.(He - 2e  , He EOopst
  1632.  g
  1633. st(l d9TT2wTO36Lopl Wi - 2bT2w+X .    Colo9TT2wTO3O3O3O3O3"_ buolor3   aTO3O3O( -2LC=bT2w+X .    Colo9TT2wTO3O3O3e - 2, &H7B4D1&", &HC0C0C0)
  1634.  TR,  i - 3ci - 3ci= isSof2, S0C0)
  1635.  TRh    st
  1636.  g
  1637. re U3O( -2Wi - 2b WEMX   so  st
  1638.  g
  1639. r+ v r'3O( -2LC=bT2w+  ", 22, ScShadolseeoe     . r'True
  1640.     n               DrawRere)cL", Wi - eoO3O3 - 3cure
  1641.  r'( -2Wi - 2b3O3O3O3"_ buolor3   a  Elsdo   fiept
  1642.  gs   TR,  i - 3cd If
  1643. ui(  v r', Wi i  i - 3c:6XO v r', Wi i  i - 3c3ci - 3ci= isSof2, S122,  v r', W Integer,12 'cd ci -SetviLine 2, 2, 2, Ho He=    tSysColor(COLO2, 2, e i 16L22M-BO6 6    0ise 5in2, Ho He=  solo9TT2wTO3O3 yrcTO36Lfaw ,oA3y As Mem   Eaaaaaaaaaan CeH