home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / PRESUPUEST20331611262006.psc / BOTON / chameleonButton.ctl
Text File  |  2003-10-02  |  73KB  |  1,851 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  'Pixel
  12.    ScaleWidth      =   320
  13.    ToolboxBitmap   =   "chameleonButton.ctx":0035
  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 = True
  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(7)
  1306.                 Call DrawFocusR
  1307.         End Select
  1308.         Call DrawPictures(1)
  1309.     End If
  1310. Else
  1311. '#~#~#~#~#~# DISABLED STATUS #~#~#~#~#~#
  1312.     Select Case MyButtonType
  1313.         Case 1 'Windows 16-bit
  1314.             Call DrawCaption(3)
  1315.             DrawFrame cHighLight, cShadow, cHighLight, cShadow, True
  1316.             DrawRectangle 0, 0, Wi, He, cDarkShadow, True
  1317.         Case 2 'Windows 32-bit
  1318.             Call DrawCaption(3)
  1319.             DrawFrame cHighLight, cDarkShadow, cLight, cShadow, False
  1320.         Case 3 'Windows XP
  1321.             DrawRectangle 0, 0, Wi, He, ShiftColor(XPFace, -&H18, True)
  1322.             Call DrawCaption(5)
  1323.             DrawRectangle 0, 0, Wi, He, ShiftColor(XPFace, -&H54, True), True
  1324.             mSetPixel 1, 1, ShiftColor(XPFace, -&H48, True)
  1325.             mSetPixel 1, He - 2, ShiftColor(XPFace, -&H48, True)
  1326.             mSetPixel Wi - 2, 1, ShiftColor(XPFace, -&H48, True)
  1327.             mSetPixel Wi - 2, He - 2, ShiftColor(XPFace, -&H48, True)
  1328.         Case 4 'Mac
  1329.             DrawRectangle 1, 1, Wi - 2, He - 2, cLight
  1330.             Call DrawCaption(3)
  1331.             DrawRectangle 0, 0, Wi, He, cDarkShadow, True
  1332.             mSetPixel 1, 1, cDarkShadow
  1333.             mSetPixel 1, He - 2, cDarkShadow
  1334.             mSetPixel Wi - 2, 1, cDarkShadow
  1335.             mSetPixel Wi - 2, He - 2, cDarkShadow
  1336.             DrawLine 1, 2, 2, 0, cFace
  1337.             DrawLine 3, 2, Wi - 3, 2, cHighLight
  1338.             DrawLine 2, 2, 2, He - 3, cHighLight
  1339.             mSetPixel 3, 3, cHighLight
  1340.             DrawLine Wi - 3, 1, Wi - 3, He - 3, cFace
  1341.             DrawLine 1, He - 3, Wi - 3, He - 3, cFace
  1342.             mSetPixel Wi - 4, He - 4, cFace
  1343.             DrawLine Wi - 2, 2, Wi - 2, He - 2, cShadow
  1344.             DrawLine 2, He - 2, Wi - 2, He - 2, cShadow
  1345.             mSetPixel Wi - 3, He - 3, cShadow
  1346.         Case 5 'Java
  1347.             Call DrawCaption(4)
  1348.             DrawRectangle 0, 0, Wi, He, cShadow, True
  1349.         Case 6 'Netscape
  1350.             Call DrawCaption(4)
  1351.             DrawFrame ShiftColor(cLight, &H8), cShadow, ShiftColor(cLight, &H8), cShadow, False
  1352.         Case 7, 8, 12, 13 'Flat buttons
  1353.             Call DrawCaption(3)
  1354.             If MyButtonType = [Simple Flat] Then DrawFrame cHighLight, cShadow, 0, 0, False, True
  1355.         Case 9 'Office XP
  1356.             Call DrawCaption(4)
  1357.         Case 11 'transparent
  1358.             BitBlt hdc, 0, 0, Wi, He, pDC, 0, 0, vbSrcCopy
  1359.             Call DrawCaption(3)
  1360.         Case 14 'KDE 2
  1361.             stepXP1 = 58 / He
  1362.             For i = 1 To He
  1363.                 DrawLine 0, i, Wi, i, ShiftColor(cHighLight, -stepXP1 * i)
  1364.             Next
  1365.             DrawRectangle 0, 0, Wi, He, ShiftColor(cShadow, -&H32), True
  1366.             DrawRectangle 1, 1, Wi - 2, He - 2, ShiftColor(cFace, -&H9), True
  1367.             DrawRectangle 2, 2, Wi - 4, 2, cHighLight
  1368.             DrawRectangle 2, 4, 2, He - 6, cHighLight
  1369.             Call DrawCaption(6)
  1370.     End Select
  1371.     Call DrawPictures(2)
  1372. End If
  1373. End With
  1374.  
  1375. If isOver And MyColorType = Custom Then BackC = tempCol: SetColors
  1376. End Sub
  1377.  
  1378. Private Sub DrawRectangle(ByVal X As Long, ByVal Y As Long, ByVal Width As Long, ByVal Height As Long, ByVal Color As Long, Optional OnlyBorder As Boolean = False)
  1379. 'this is my custom function to draw rectangles and frames
  1380. 'it's faster and smoother than using the line method
  1381.  
  1382. Dim bRECT As RECT
  1383. Dim hBrush As Long
  1384.  
  1385. bRECT.Left = X
  1386. bRECT.Top = Y
  1387. bRECT.Right = X + Width
  1388. bRECT.Bottom = Y + Height
  1389.  
  1390. hBrush = CreateSolidBrush(Color)
  1391.  
  1392. If OnlyBorder Then
  1393.     FrameRect UserControl.hdc, bRECT, hBrush
  1394. Else
  1395.     FillRect UserControl.hdc, bRECT, hBrush
  1396. End If
  1397.  
  1398. DeleteObject hBrush
  1399. End Sub
  1400.  
  1401. Private Sub DrawEllipse(ByVal X As Long, ByVal Y As Long, ByVal Width As Long, ByVal Height As Long, ByVal BorderColor As Long, ByVal FillColor As Long)
  1402. Dim pBrush As Long, pPen As Long
  1403.  
  1404. pBrush = SelectObject(hdc, CreateSolidBrush(FillColor))
  1405. pPen = SelectObject(hdc, CreatePen(PS_SOLID, 2, BorderColor))
  1406.  
  1407. Call Ellipse(hdc, X, Y, X + Width, Y + Height)
  1408.  
  1409. Call DeleteObject(SelectObject(hdc, pBrush))
  1410. Call DeleteObject(SelectObject(hdc, pPen))- 2, He - 2, ShiftColor(cFacmo6wCaption(3)
  1411.         : Sem Borue
  1412.  sm As Sol)- 2, Hight)
  1413.  
  1414. reatePen(tObject(hdci        rCreatePen(PS_SOLID, 2, BorderCCreat      s f      C", isChec<operty = ";rType = CustsChec    , isChec<opi, Boroperty = ";rTyppi, Bo";rType = CustsChec    , isChec<opi, Boro
  1415.  e - 3, cSh;rTrColocctObject(hdc,to
  1416. D - 3, cSperund Sub
  1417.  
  1418. Private S,toe
  1419.                Sub
  1420.  
  1421. Private  S,tBac
  1422.                 Drg, ByVa2tp * e    Call Redraw(lastStat, True)
  1423. <der ster)  Drg,* e    Call Redraw(lastSt'5S            Drg, ByVa2tpr Then
  1424.     Fraedraw(l
  1425. w(l
  1426. w - 3, WCalcTextRects
  1427. Call Redraw(0, True)
  1428. End Proper
  1429. Elsext Redraw(0, True)
  1430. End Proper
  1431. lor(cFan
  1432.     Fraedraw(l
  1433. w(l
  1434. Tr
  1435. lor Drg, ByVa2cTr
  1436. lor Drg,
  1437.     aption(3)FacmrCo
  1438.  
  1439. If isOver Andcor Drg,
  1440.     aption(3)FacmrCo
  1441.  
  1442. iaw(0, True)rkShadow
  1443.             DrawLine 1, ogF
  1444. Dim hBrushrawFrame cShadow, ShiftColor(cLight, &H8), cShadow, S     
  1445.                 D.hifS     " DrawE6 13 'Flat buttons
  1446.        lat buttonsw(l
  1447. w(l
  1448.  rCreatePen(PS
  1449. w(l
  1450. Pen(tOPS
  1451. w(l
  1452. Pen(tOPS
  1453.       (tOPS
  1454. w(l
  1455. P
  1456. Else
  1457.     Fill
  1458. Pen(tOPS
  1459. w           D.hifS     " DrawE6 13 'Flat buttons
  1460.        lat I 2, 2, EffeEEnd Propr=           D.hifS     " Rxtion
  1461. End Property
  1462. Public Property L     
  1463.     0, Tru   Case 13ndows 32-bitC, 0, 0, vbSrBase          DrawRe1,
  1464.     aption(3)FacmrCo    D.hifS     " DrawE6 13 'Flat buttons
  1465. tibleDC(UserCo(0, Tr
  1466. tibleDC(UserCo(0, Tr
  1467. tibleDC(UserCo(0, Tr
  1468. tibleDC(UM,o
  1469.  e - 3, cibleDC(UserCo(0, 3, cibleDC(UserCo(0, 3,     *x
  1470.             v<- 2, SU
  1471. End     Call DrawCapu
  1472.             v<- 2, SU
  1473. End     Call DrawawLine 1,  Wi - 4, 2, rawRe1,
  1474.     aptiooawLine 1,  Wi - 4, 2, rawRe1,
  1475.     aptiooawLine 
  1476. Ebled = .Read Wi, He, cShadow, True
  1477.         Case 6 'Netscape
  1478.             Call 2     lmlmlmlmlmlmlmlml S
  1479. w(eSU
  1480. End     Called)'rawE6 13 'Flat buttons
  1481.        lat I 2, 2, EffeEEnd Propr=           D.hifS Tr XPFace = .D.hifS Trr(ByVand  
  1482.  
  1483. If isOver Andu  lmlmlm
  1484.             Rectanrame0Caleuttons,D.hifRoIat buttons
  1485.        lat Indcor DrSolid Drv
  1486.         Case 5'nres(  For          DrawLine
  1487.     Set UserControl.Motanrame0CaleutCase 9 'Office XColo= .Read Wi, He, cShad0ontrol.Motanrame0Calcie 9 'Office XColo6uight, d "MPTR"
  1488. En "MPTR"
  1489. En "MPTR"            Else
  1490.                 aption(3)FacmrCo  g, B, Wi, He,  I 2,1      aption(3), B_co&r Caa5   DrawRe1,
  1491.             Call DrawCaption(3)
  1492.                                       elect
  1493.     Call DrawPictures(2)
  1494. End )
  1495.                                       elect
  1496. l DrawPicturesetPa, rawRe1,
  1497.    ) 2, 2, 0, cFace
  1498.     bute Enablefice            HTs        DrawRectangle 0, 0, Wi,te     SemSetP0,oX  )
  1499.        27e, cHi"2, 0, cFace
  1500. R"    etP0,oX  )
  1501.  = [Sim   Drrue
  1502.             n) 2, 2, 0, cFac rawRe1,
  1503.   wRectangle 0, 0, Wi, He, c=iUserCo    wRec     than i - 4, 2, rawRe1or Drg, BM      .  
  1504.  
  1505. If isueP6on(3)
  1506.          Cal)4ftColor(XPFace2, -&H18, True)
  1507.                 Der] Then
  1508.   
  1509. R" )
  1510.   
  1511. R"    , isChecl     (Then
  1512.   
  1513. R" )
  1514.   
  1515. R"    eee 3, cl t, dueP6o eeADer, 0, cFace
  1516. R"    etP0,oX  )
  1517.  = [Simanglee = 0 Or Not is=l - 4, B_Call DrawC       DrawRectangle 0,.1Lc  n) 2, 2,  ) }
  1518.   , isChecl     (Then
  1519.   
  1520. R" ) }
  1521.  +Wi - 1          DrawLine 1, 2, 2, 0, cFace
  1522.             DrawLineen
  1523.   
  1524. R" ) }
  1525.  +Wi - 1         ybuttonOwiudblic Property L     H32)R" ) }
  1526.  +Wi - T, ByVSe, True
  1527.   ecl     (Theraw(0, True)
  1528. End Property
  1529.  
  1530. Public Prope,  I 2,1     p        BitBlec True)
  1531. End Property
  1532.  
  1533. Public P        B +Wlol)- 2, Hight)
  1534.  
  1535. reatePen(tObject(hdci        rCreate
  1536.   
  1537. R"    eeyppi,         B +WlC +Wlool)- cFaceaa5   DrawRe1,
  1538. Rectangle rrue)c2 +WlC +WlooB5e
  1539.   Erder T2eraw": Propr=           D.hi1or Drg, BM )S     " )
  1540. End Property
  1541.  
  1542. Public P  nd Stib:ooB5e
  1543.   ErTR" )
  1544.   
  1545. R"    , isChecl      DProperty
  1546.  
  1547. Public P ertysrue)
  1548. End Property
  1549.  
  1550. e'Flat buttons
  1551. tibleDC( &H8), cShadow, tib:ooB5e
  1552.   ErTR" =bject(hdci  i - 2, Hbutton=>E,ented bueu
  1553.     Call .Wri    bute EnaEndhdci          ybutto)
  1554.  ,         
  1555.  
  1556. aEndhdci          ybuttoablef .Rea }
  1557.  Wi, He, c6lef .Rr erty240)
  1558.                
  1559.           )
  1560.  = [Simanglee = 0 Or Notrty("i   He, cShad0ontrol.Motan  For i =ec<opdhdcb_
  1561.             DrawRecta       End If
  1562.           dci       FkiftColor(XPFace, -&H54, True), True
  1563.             mcol.FontUnderline = new
  1564.           douK", isCheckLine Wi -   eee 3rao
  1565. End      e XC ybutlat buttons
  1566. tibleDC(UserCo(0, Tr
  1567. oB5e
  1568.   ErTR" )
  1569.   
  1570. R"   m
  1571. tibleDC(UserCo(0, Tr
  1572. oB XC ybutlat butt = newValue
  1573.     CXC ybutlat butt = newValue
  1574.     CXC ybutlat butt = newValue
  1575.     CXC ybutlat butt = newValue
  1576.     ePropLnrlat butt = newValue
  1577.     CXC ybutlat butt = newValue
  1578.     CXC ybutlat butt = newValue
  1579.     CXC ybutlat butt = newValue
  1580.     ePropLnrlat butt = newValue
  1581.     CXC ybutlat butt = newValue
  1582.  iroperty("P),
  1583. End Property
  1584.  
  1585. Public
  1586. sYl .Wle=operty 2, 2, 0, cFace
  1587.     bute Enab      aS
  1588. w  , 0     than i - 4h Propertyrty("i   He, c  He, c  He, c  He, c  He, c  He, 
  1589.     CXC ybutlat butt = newValue
  1590.     CXC ybutlat bXC =    CXC ybutlat butt = newValue
  1591.     ePropLnrlat butt = n c  He, c  HetPixel Wi -D - 3, cSperund Sub
  1592. 8dnXC =    CXC ybutlat butt = newValue
  1593.     ePropLnrlat 'butlatot butt = newValue
  1594.     ePropLnrlat 'butlatot butt = ne          DrawRecta       End If
  1595.  DrawRecta       End If
  1596.  ianglee = 0 Or Notrty("i   He, cShad0ohiftColor(XPFace, -&H48, True)
  1597.         Case 4 'Mac
  1598.    Fd -&H48, Tru4, c  eutlat= newValue
  1599.     ePropLnrlat 'butlatot butt = ne        Rerminate()
  1600.  nehiftCo0Color nenewValue
  1601.     ePropLnrlat 'butlatot butt = nw
  1602.  e cHighLight, cShadow, 0, 0, False, True
  1603. , 2, 0y        t - 2, rc.ToI       DrawRectangle 0,.] Theni
  1604. Call Ret         TEase 4 fS Trr(ByVan
  1605. End PronewValue
  1606.  Sub DrawEllipse(ByVal anglee = 0 Or Notrty("i  wElPe 4 reOver
  1607. End Pronee
  1608.     ePropLnrlat Fty Lee
  1609.   newVade
  1610.    Lee
  1611.   nedbutlVal     ybuttoab, rc.ToI       DrawRectt F DrawRecta       End If
  1612.  D 0, False, True
  1613.           As StdPict 4h Properte   For i =e, ShiftColor(cShadow, &roper
  1614. lor PronewVa=or(r P=8, 4h Propertyrty("i   He, e
  1615.   ErTR" 1         ybuttonOwiudberaw(0, True)
  1616. End Property
  1617.  
  1618. r(cShadow, &roper
  1619. lor erCoA'roperRerty
  1620.  
  1621. r(cS, True
  1622.           iudber, Tr StdPict 4h ProperteL DrawRe,to
  1623. D,entPict iudPict 4h PropeHe, cSlc, bRECT, h
  1624.         Color(cSh j, cSlc, bRECT, h
  1625.         CeADer, 0, cFace
  1626. R"    etP0H5, True,DrawRe,n      Call DrawFocus,DrawRN 0, cFace
  1627. R" uus+Wi - 1         ybuttonOwiud HetPHnrRerty
  1628. :      Call DrawFocus,DrawRN 0, cFace
  1629. R" uus+Wi - 1lng, Shadc Shadc Sha
  1630.    ybuttoab 1, Foc, &HA,,oX  )
  1631.  = [Simanglee = 0 Or Not is=l - 4, B_Call DrawC  l Ret         TEase 4 fS Trr(ByV(      TEaIv Ret                             bSrBaDC(ic P  Rerty
  1632. 'Ree = 0 Or Not is=l -'
  1633.       e - 2, Wi  I 2, "iBaDC(ic P  RertroperRerty
  1634.  
  1635. r(cS, True
  1636.         i'wPitPixel Wi - 2, nOx"-N2, nOx"-N2, nOx"-N Shadc Sha
  1637.    ybuttotUnder      {=ybutH - 4, B_Call DrawC  l Ret         TEase 4 ftrawLineeHe - 3, Wi - 3, He -c ftrawL
  1638. rop BM )S     " )))))))))))))))))))e"PICH"   DrawFramee = 0 Or NouttotUlor(cShadow, &roper
  1639. lor Prona    " )))))) smooth, bRECT, h
  1640.         Color(cSl Wi -or Prona    " )))))) smooth, bRECT, h
  1641.         Color(cSl Wi -or rawLimr
  1642. lor Pro                m
  1643. lor(cSh j, cSlc, bRECT, h
  1644.         CeAder e, -&Hf5    Wi -or Pron 2, He - 2",) smooth, blor(cSh j, cSlc rawLimf
  1645.         CeA"2, 05f
  1646.  Dee = 0 Or N3" )Rgf1    E    CeA"2, 05f
  1647.  Dee = 0 Or N3" )R1      e XC ybutlat buttons
  1648. t=
  1649.     ybHR
  1650.  +Wi - T, ByVSe, True
  1651.   ecl     (Theraw(0, True)
  1652. End PryVSe, T   Decl  (Theraw(0 reLimf smooth, blor(cSh j, cSlc rawLimfuresH4era[Simple Flat] 
  1653.         CeA"2,     ,d)deLimf smooth, blor(cSh j, cSlc rawLimfuresH4ei,     L     ptiooaw     L    wRe1,
  1654. Rectangle rru rawLimbleDC(UserCo(0, Tr
  1655. oB5e
  1656.   ErTR" )
  1657.   
  1658. R"n           DrawText  Crty Let UseMaskColor(ByVal newValue As Ft UseM Cr7trty("i   Hec P         ett =c P         ett =c P      alue Al Ret         TEase 4 fS t U       TEase 4 ftrawLineeHe - 3, Wi - 3, He -c ftrpl newValue A       TEase 4 ftrawLineeHe - 3, Wi - 3, He -c ftrp    DrawLine 2, He - 2, Wi - 2, HHHHHHHHHHHHHHHHHHHHHHHHHHH
  1659.          4 fS ttlat butt = newValue
  1660.        rCreatePf, -&H20) + Abs(MyColorTy    alue Al Re4r PicPositions
  1661. Attribute Pictuyy    alue l Ret        a Hebs(MyColorTy    alue Al "ed    m:lorTy
  1662.   ErTR" =OShiftC Pictuyy    alue l Ret        a Hebs(MyColorTy    alue Al "ed    mrrawLinr(cSlTy    ty
  1663.  
  1664. P Rerty
  1665. 'R  m  a H n(4)Yue 9' raw
  1666.   
  1667.   tytuyy    ainr(cSlTy   L    wRladAlC CheckLine Wi )
  1668.         C,.i:l .Wle=operty 2, 2, 0, cFa&Wi )
  1669.         C,.i:l .Wle=operty 2, 2, 0, cFa&Wi )
  1670.         C,.i:l .Wle=operPhec<opwDraimfurcll CalcPicSize
  1671.     CTA 3, 2, cHighLigh s Long, By.DraimfcSl Wi -or rawLimr
  1672. lor PfcSl Wi -or rawLimebs(MyCo  m
  1673. l cSperutee = nt.DisplayAsDefault) And)erPu  C,.i:l .Wle=oprawRectangleicSperutee = nt.DisplayAsud=uL         etWi -or rawLimebs(MyCo  mFor rabs(MyCo  mFbu6ee = cPicSize
  1674.  Wi - 3, He - 3, cFacenglei cPlei cguit
  1675.             Val H   abs(MyCo- 2, W0H   Pron 2, He - 2",) smooth, blor(cShdMor rab2",) sth,  DrawRecpicSpe+o_ e - 2, Wi - 2, HHHHHHHHHHHHHHHHHHHHHHHHHHHe - 2, Wi - 2, HHHHHHHHHHHHHe = 0 Or NHHHHHrawLine=HHH Wi    y2, Wi   alue AiWWi -or, HHHHHHHHHHHHHbhad0ohiftColoGll DeletrDra,a,a,a,a,a,a,a, HHHwoloGHHbhad0ohiftColoGll DeletrDra,a,a,a,a,a,a,a, HHHwoloGHHbhad0ohiftC,HHHHHHe = 0 Oalse
  1676.             etWi -or rawLimebVicSp'Flat b-or, H tangle 2,          DrawLinFlat b-orawRectt F DrawRecta       End If
  1677.  D 0,iIg0ohiftColoGll DeletrDra,a,a,a,a,a,a,a,HHHwoloGHHbhad0oDra, True
  1678.  GHHbhad0ohiftC,HHHHHHe = 0       8xn                nsmfcSl n                nsmfcSl woloGHHbhad0oDra, True
  1679.  Gc    DrawLii = 1 To He
  1680.   ad0oDra, True tt HHHHrawLine=HHH W mFor rabs(B True tt HHHHrawLiet            ht As Long,O MaskC = .ReadPrlAndu ht As L-or r2, 2, EffeEEnd Propr=   e, 05f
  1681.  Dee = 0 Or N3" )Rgf1i  ad0oDrau ht A One1,
  1682.     aptiooawLine 
  1683. Ebled = uoB5e
  1684.  Call R  ad"C,.of1Drau        Public Property Get SpecialEffect() As fx
  1685. Attribute SpecialEffect.VB_ProcProH Wiy2, Wi   alu 2,2, -&H ht Aad0ohiftCP      Lnrect  Pron 2, HeHrawLi
  1686.      Effect.VB_isOver) * cFace, cFace
  1687.                 Call DrawCaFacer e, -&Hf5    Wi -or Pron 2, He - 2",) smooth, blor(cSh j, c Pron 2, He - 2", True)
  1688.     4r Pron mcialEffect.VB_PrLine 
  1689. EblO   B5e
  1690.  Call R  '
  1691. Shadow
  1692.              +XP1 * iN) "      .Wle=e
  1693.     bute Enab      aS
  1694. wN) " (0, Tr
  1695. oB5e
  1696.   ErTR" )
  1697.   
  1698. R"ighLight, True
  1699.         
  1700.     bu      aS
  1701. wN) " (0, T Tr
  1702. oB5e
  1703.   ErTR" )
  1704.   
  1705. R"ighLigh,  ErTR" )
  1706.   
  1707. R"ighLight, True
  1708.         
  1709.     bu      aS
  1710. wN) " (0, T Tr
  1711. oB5e
  1712.   ErTR" )
  1713.   
  1714. R"ighLigh,  ErTR"S, " (0, T Tr
  1715. oB5e
  1716.   ErTR" )
  1717.   
  1718. dow
  1719.              +XPwCase 11 'transparenbhad0oDra, True       1     
  1720. oB5r
  1721. oB5e    " True       1     
  1722. oB5r
  1723. oB5e    " True       1 pse(ByVal 1     
  1724. oB5r
  1725. oB5e    " True 4 - 3kC = .rue       1     
  1726. o=M         " C       1 ,N.
  1727.  Call R  'ight, i
  1728.     l)ll DrawC ett Cd0oDra, Trund Pre)pertyChanged "FX"
  1729. End Property
  1730.  
  1731. PubX", 0)
  1732.      0)
  1733.    FX"
  1734. EndiiTrueAndu ht As L-or r2,et butt = newee = 0fS     " DrawE6 13 'Flat buttons
  1735. tUanrame0CaleutCase 9 'Office XColo= .Read Wi, He, cShad0ontrol.Motanrame0CalciyetrDra,a,a,a,a,a,a,a, HHHwoloGHHbhle 0'    kM - 4, B_Ca     L    wRe1,
  1736. Rectangle rru   d HerevBold: irue tt HHlol)- 2, HTruA0CalciyetrD Cd0oDra, Trund _X"
  1737. EndiiTruB Wi    y2, Wi   alue AiWWi -or, HHHHHHHHHalse
  1738.     butt 2, c     cpse(By     cpse(By     cpse-&H yd      7j, cSlc rawLimfure-&H yd  rabs(B Tru0(Gh,  ErTR"S, ", cShbute Enab     ]nab cSlXP
  1739.         shbute Enab     fop BM )S     " )))))))))     cc9Cop B        ig1)
  1740.     End If
  1741. Else
  1742. '#~#cpseGll Dg1))
  1743.     4ra, T      Over Ans  - lciyetrD Cd0oDra, Trthora, ns oF    " )))))))))        Oveg  cps6 oF    " HXra,7j, cSlc rawLimfureb  7j, cShbute Enab     ]nab
  1744. a 2, WBy ru0(Gh, Or NHHHHHraSe=HH    .  
  1745.  
  1746. If isueP6on(3)
  1747.          Cal)4ftColor(XPFace2, -&H18, b, T True       1  Ly     r))
  1748.                 Call DrawFo(ErTR" )- 2, HFRECT.Top = Y
  1749. bREC&c P  nd Stm Long, pPen anr)
  1750.   :al 1     
  1751. oal 1     
  1752. oal 1     
  1753. olow, S     
  1754.   
  1755. oal 1      j,hi1or Driye 
  1756. oal  0)awRFi Stm L' 
  1757.   ErTR" )
  1758.   
  1759. dow
  1760.   ol.h     ]nab l       ' 
  1761.   ErrTRdg  ol.h     ]nab l       ' 
  1762.   ErrTRdg  ol.h   -    4ra, T   
  1763.   
  1764. oal 1      j,hi1or DriSpeci' 
  1765.   ErrTRdgype
  1766.    1tion to draw rectangles  anr)
  1767.   anr)
  1768.   anr)
  1769.   anrrrTRdgype
  1770.    1 anr)
  1771.   anr)
  1772.   anrrrTRdgype
  1773.    1 anr)
  1774.   anr)
  1775.   aLine=HHH W mFor rabs(B True tt HHHHrawLiet           s L-or rp   DrooorTy
  1776.   ErTR"   or(cSha rabs(BX HHlol)&l       ' 
  1777.   ErrTRdg  ol.h   -   (0, Tr
  1778. oB5e
  1779.   ErTR" )
  1780.   
  1781. R"ighLight, True
  1782.         
  1783.     bu  crawL
  1784. rop uybutto-or rha rabsDrooorTy
  1785.   E   :
  1786.   
  1787. Rse-:ha rabs
  1788. RectrabsDrooorTy
  1789.   E   :
  1790.  revBold: irue let   c4  Call DrawFEfferTy
  1791.  -ooorTy
  1792.   E 
  1793.       p        Bitcpe
  1794.    1tionfrue wT, h
  1795.    y
  1796.  -ooorTy
  1797.   ,Ty
  1798.   ECEsDrooorTy
  1799.   E   :
  1800.  revBold: ,Rdg  ol.h   -   (0, Tr
  1801. oB5d9TT1wHHHe - l DrawFh E 
  1802.       p   s,Dr9TT1r#itcpe DrawCaFacer aTy
  1803.  -o*h CevBold: ,Rdg  ol.h   -   
  1804. oB5e T Tro 1 
  1805.  (ByVan
  1806. End PronewValue+e let   c4  Call DrawFEfferTy
  1807.  -e=HHH W mFor rabs(B True tt HHHHrawLiet    Proe Tuttons
  1808. tibl  cc
  1809.  -ooorTy
  1810.   E 
  1811.       p ns
  1812. tibTT1r#itcpeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeatot butt = ne    tibl  cc
  1813.  -ooorTy
  1814.   E 
  1815.       p ns
  1816. tibTT1r#itcpeeeeeeeeeeeeeeeeeeeeeeeee   -eeeefles  anmutt = TT1r#itcpee      Pixel WHTruA0Canab     fop BM )S     " )))))))))     cc9Cop B        ig1)
  1817.     End If
  1818. Else
  1819. '#~#cpseGll Dg1))
  1820.     4ra, T  rawRecta       End If
  1821.  D 0,iIg0ohiftColoem           v<-nii = 1 To He
  1822.   ad0oDra, True tt HHHHrawLine=HHoTrue)
  1823.      EffvBold: ,Rdg  o0HAND",hi = 1 Top BM  anr)
  1824.   an            Cae5       Cae5      ue)
  1825.      EffvBo"y("ie=e
  1826.     buuBo"y("ifeEEnd Propr=  ,Bold: ,Rdg  o0HAND",hi = 1 Top BM  anr)
  1827.   an            Cae5    1b   +o"yRe1,
  1828.                  "_r rawLimebsa            2b   +o"yRe1,
  1829.                      mSetPi&.WriteProperty(nr)
  1830.   anr)
  1831.   anrrrTRdgype
  1832. operty(nrh rTRdg  olcta U      5    1bBold: ,RdoTRdg  olc+    a        2b   +ace
  1833.     S  Drawo
  1834. End      0  a         HTn  Call DrawCaption(5)re(cc
  1835.  -ooorTy
  1836.      anr)3, Wi  aanr)
  1837.   :alh Propertyrteeeeeeeeeeeeeeeeee   -eeeefles  anmU                 buuBo"y("ifeEEnd PropSnd 2b    +a
  1838. tibTT1r#itcpeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecy Get SpecialEffect() As fx
  1839. AttriXEEffect() As fx
  1840. Atte
  1841.     S  Drawo
  1842. End ,:alh      bu Ote
  1843.     S  bu6ee = cPicSize
  1844.  Wi - 3, He - Atte
  1845.     SD0
  1846. tib - 3, He lh      bu Ote
  1847.     S  bu6ee = cPi      2  +aTX", elTex)
  1848.   = cPiold: ,Rdg  ol.h  absDrooorncPi      2  sawo
  1849. End         Cae5       Cae5      ue)
  1850. X"
  1851. End Propert     L