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

  1. VERSION 5.00
  2. Begin VB.UserControl AButton 
  3.    AutoRedraw      =   -1  'True
  4.    ClientHeight    =   3600
  5.    ClientLeft      =   0
  6.    ClientTop       =   0
  7.    ClientWidth     =   4800
  8.    DefaultCancel   =   -1  'True
  9.    PropertyPages   =   "AButton.ctx":0000
  10.    ScaleHeight     =   240
  11.    ScaleMode       =   3  'Pixel
  12.    ScaleWidth      =   320
  13.    ToolboxBitmap   =   "AButton.ctx":0040
  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 = "AButton"
  22. Attribute VB_GlobalNameSpace = False
  23. Attribute VB_Creatable = True
  24. Attribute VB_PredeclaredId = False
  25. Attribute VB_Exposed = True
  26. Option Explicit
  27.  
  28. #Const isOCX = False
  29.  
  30. Private Const cbVersion As String = "2.1.0" '-> Anibal Sarasua's MOD
  31.  
  32. '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  33. '%             <<< GONCHUKI SYSTEMS >>>               %
  34. '%                                                    %
  35. '%                 CHAMELEON BUTTON                   %
  36. '%         copyright ⌐2001-2003 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-2003 by gonchuki           %
  51. '%                                                    %
  52. '%    Commercial use of this control is FORBIDDEN     %
  53. '%          without registering first.                %
  54. '%    You can only use parts of this code for other   %
  55. '%  open source or freeware programs. Reuse of this   %
  56. '%  code in commercial applications is also FORBIDDEN %
  57. '%   You can use this code without asking for your    %
  58. '%  personal projects or for freeware, but remember   %
  59. '%           to give credits where its due            %
  60. '%                                                    %
  61. '%  you MUST NOT build nor distribute OCX controls    %
  62. '%   based on the Chameleon Button, doing so is       %
  63. '%               against this terms.                  %
  64. '%                                                    %
  65. '%PLEASE NOTICE THAT THIS IS NOW A COMMERCIAL PRODUCT %
  66. '% AND THIS SOURCE IS STILL BEING DISTRIBUTED IN PRO  %
  67. '%   OF THE OPEN-SOURCE COMMUNITY, DON'T BREAK ANY    %
  68. '%  OF MY STATED RULES OR I WILL STOP DISTRIBUTING    %
  69. '%  THIS FREE VERSION. IT IS UP TO YOU TO COMPLY WITH %
  70. '%    THE RULES AND SUPPORT OPEN-SOURCE PROGRAMS.     %
  71. '%                                                    %
  72. '%   FOR MORE INFORMATION ABOUT REGISTERING AND THE   %
  73. '%   LATEST RELEASE INFORMATION, PLEASE HEAD TO:      %
  74. '%              http://gonchuki.8m.com                %
  75. '%                                                    %
  76. '%            e-mail: gonchuki@yahoo.es               %
  77. '%                                                    %
  78. '%                  MADE IN URUGUAY                   %
  79. '%                                                    %
  80. '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  81.  
  82. '######################################################
  83. '#                    UPDTATE LOG                     #
  84. '#  all times are GMT -03:00                          #
  85. '#                                                    #
  86. '# November 9  - 03:00 am                             #
  87. '#              ╖ first release                       #
  88. '#             - 05:00 pm                             #
  89. '#              ╖ added ShowFocusRect property        #
  90. '#              ╖ added repaint before triggering the #
  91. '#                click event                         #
  92. '#             - 07:20 pm                             #
  93. '#              ╖ fixed the color shifting so it will #
  94. '#                display the correct color and not a #
  95. '#                weird one.                          #
  96. '#              ╖ improved Java button drawing        #
  97. '#              ╖ added custom colors capability      #
  98. '#                now it looks better than ever COOL! #
  99. '#              ╖ improved Flat button drawing        #
  100. '#                                                    #
  101. '# November 13 - 03:40 pm                             #
  102. '#              ╖ fixed the WinXP button colors and   #
  103. '#                styles. Note that as the colors are #
  104. '#                relative to a base, and for this    #
  105. '#                button i made a color work-around,  #
  106. '#                some colors will be un-reachable    #
  107. '#              ╖ added MouseMove event as requested  #
  108. '#                                                    #
  109. '# November 18 - 10:40 am                             #
  110. '#              ╖ translated all the line methods to  #
  111. '#                API calls. It's now faster than     #
  112. '#                ever. It will also decrease the     #
  113. '#                extra size of your exe!!!           #
  114. '#              ╖ improved Win32 button drawing       #
  115. '#              ╖ moved the direct calls to SetPixel  #
  116. '#                to use less inline .hDC calls       #
  117. '#              ╖ fixed KeyDown/KeyUp events so they  #
  118. '#                now act as they should              #
  119. '#                                                    #
  120. '# November 23 - 3:55 pm  (not updating on PSC...)    #
  121. '#              ╖ upgraded version to 1.1             #
  122. '#              ╖ added FontBold, and other similar   #
  123. '#                properties as requested             #
  124. '#              ╖ greatly improved drawing speed by   #
  125. '#                replacing lots of duplicated code   #
  126. '#                with the new-brand function made by #
  127. '#                me: "DrawFrame"                     #
  128. '#              ╖ fixed MouseDown/MouseUp events so   #
  129. '#                they now act as they should         #
  130. '#              ╖ added MousePointer property         #
  131. '#                                                    #
  132. '# December 1  - 10:10 pm                             #
  133. '#              ╖ replaced the RECT types assignment  #
  134. '#                in the resize event with API calls  #
  135. '#                that take 3/4 the time of raw vb    #
  136. '#              ╖ added "use container" to the color  #
  137. '#                schemes                             #
  138. '#              ╖ button now initializes with it's    #
  139. '#                caption set as it's name            #
  140. '#                                                    #
  141. '# December 23 - 2:00 pm                              #
  142. '#              ╖ finally got all the code in API by  #
  143. '#                replacing the Usercontrol.ForeColor #
  144. '#                calls with CreatePen API            #
  145. '#              ╖ added support for wrapping captions #
  146. '#              ╖ changed a bit the XP button gradient#
  147. '#                thanks to Ghuran Kartal for this    #
  148. '#              ╖ added refresh sub to force a button #
  149. '#                redraw.                             #
  150. '#              ╖ MouseIcon property added            #
  151. '#              ╖ MouseOver/MouseOut events added and #
  152. '#                also a ForeOver property is provided#
  153. '#                to change font color on mouse over. #
  154. '#                this also fixed the WinXP button,   #
  155. '#                which design is now perfect.        #
  156. '#              ╖ added FlatHover button style that is#
  157. '#                the real toolbar button.            #
  158. '#                                                    #
  159. '# January 1  - 11:15 am                 year 2002!!! #
  160. '#              ╖ some minor fixes                    #
  161. '#              ╖ new release!!!                      #
  162. '#                                                    #
  163. '# January 5  - 10:15 am                              #
  164. '#              ╖ fixed the memory leaks (only 1% of  #
  165. '#                gdi is lost per 15-20 runs of demo) #
  166. '#              ╖ the font assignment has changed     #
  167. '#              ╖ fixed a very rare and random bug in #
  168. '#                the XP-button. Problem was in the   #
  169. '#                DrawLine sub. Thanks goes to Dennis #
  170. '#                Vanderspek                          #
  171. '#              ╖ changed Mid and LCase to the faster #
  172. '#                Mid$ and LCase$ way                 #
  173. '#                                                    #
  174. '# January 22  - 11:55 pm                             #
  175. '#              ╖ fixed the "not redrawing" bug under #
  176. '#                Win 2K/NT/ME.                       #
  177. '#              ╖ fixed a bug that prevented hot keys #
  178. '#                to work properly                    #
  179. '#              ╖ fixed the font alignment problem    #
  180. '#                many many thanks to Carles P.V.     #
  181. '#                                                    #
  182. '# February 6  - 4:15 pm                              #
  183. '#              ╖ fixed property assignment problems  #
  184. '#              ╖ fixed "Use Container" color scheme  #
  185. '#              ╖ optimized a bit the code            #
  186. '#              ╖ fixed problem with system colors    #
  187. '#              ╖ added SoftBevel prop to allow the   #
  188. '#                buton to be "flatter"               #
  189. '#                                                    #
  190. '# February 8  - 10:15 pm                             #
  191. '#              ╖ fixed click event when user double  #
  192. '#                clicks on the button                #
  193. '#                                                    #
  194. '# February 10 - 2:35 pm                              #
  195. '#              ╖ added Office XP button style        #
  196. '#              ╖ added "DrawCaption" sub for easier  #
  197. '#                caption management                  #
  198. '#              ╖ changed focus rects for flat buttons#
  199. '#              ╖ added "DisableRefresh" sub to allow #
  200. '#                property changes without repainting #
  201. '#                until needed to do so.              #
  202. '#              ╖ added BackOver property             #
  203. '#                                                    #
  204. '# February 11 - 1:15 am                              #
  205. '#              ╖ added primitive support for pictures#
  206. '#              ╖ fixed colors when mouse re-enters   #
  207. '#                button area while holding the mouse #
  208. '#                button.                             #
  209. '#                                                    #
  210. '# February 12 - 4:30 pm                              #
  211. '#              ╖ finished with the picture property! #
  212. '#              ╖ Java focus rect fixed               #
  213. '#              ╖ Office XP style fixed               #
  214. '#              ╖ Changed "ConvertFromSystemColor" sub#
  215. '#                                                    #
  216. '# February 14 - 6:20 pm                              #
  217. '#              ╖ replaced the transparent blitting   #
  218. '#                function with one 10 times better   #
  219. '#              ╖ joined bitmaps & icons drawing      #
  220. '#              ╖ added "UseGreyscale" option         #
  221. '#                                                    #
  222. '# February 18 - 4:30 pm                              #
  223. '#              ╖ added embossed/engraved/shadowed fx #
  224. '#              ╖ added category for each property    #
  225. '#              ╖ added standard property pages       #
  226. '#                                                    #
  227. '# March 3 - 9:10 pm                                  #
  228. '#              ╖ fixed effects for XP styles         #
  229. '#              ╖ added mouseover detection function  #
  230. '#              ╖ some minor adjustments              #
  231. '#                                                    #
  232. '# March 31 - 2:55 am                                 #
  233. '#              ╖ upgraded to version 2.0             #
  234. '#              ╖ added transparent, 3D Hover and     #
  235. '#                oval button types                   #
  236. '#                                                    #
  237. '# April 1 - 9:45 pm                                  #
  238. '#              ╖ fixed transparent button drawing    #
  239. '#                                                    #
  240. '# April 19 - 6:00 pm                                 #
  241. '#              ╖ fixed Ofice XP button colors        #
  242. '#              ╖ added built-in hand cursor          #
  243. '#                                                    #
  244. '# May 11 - 12:40 pm                                  #
  245. '#              ╖ added KDE 2 button style!           #
  246. '#              ╖ slightly optimized Mac button code  #
  247. '#                                                    #
  248. '# May 16 - 7:00 pm                                   #
  249. '#              ╖ added version property              #
  250. '#              ╖ added complilation options for lite #
  251. '#                version (evaluation purpose only)   #
  252. '#              ╖ some optimizations for drawing fx   #
  253. '#                                                    #
  254. '# May 22 - 5:20 pm                                   #
  255. '#              ╖ added some code to make more robust #
  256. '#                the lite version                    #
  257. '#              ╖ added background picture option     #
  258. '#                                                    #
  259. '# June 29 - 4:00 pm                                  #
  260. '#              ╖ added CheckBoxBehaviour option to   #
  261. '#                allow the button behave as one of em#
  262. '#                                                    #
  263. '# July 25 - 11:55 pm                                 #
  264. '#              ╖ slightly optimized code, specially  #
  265. '#                by removing the slow IIf's          #
  266. '#              ╖ corrected default state for KDE2    #
  267. '#                                                    #
  268. '# August 1 - 12:30 pm                                #
  269. '#              ╖ NEW PUBLIC RELEASE!!!    (ver 2.04) #
  270. '#            2:40 pm                           2.05  #
  271. '#              ╖ button was not updating when "value"#
  272. '#                prop was changed by the code. Thanks#
  273. '#                to Steve and uZiGuLa.               #
  274. '#              ╖ fixed drawing for Win32 button while#
  275. '#                being CheckBox and Value = True     #
  276. '#                                                    #
  277. '# August 2 - 11:30 pm                          2.0.6 #
  278. '#              ╖ fixed (i hope) the problem with the #
  279. '#                WinXP disabled picture              #
  280. '#              ╖ fixed the "not redrawing" problem   #
  281. '#                                                    #
  282. '# June 08, 2003 - 11:00 pm                   2.0.6 B #
  283. '#      ╖ THIS IS A BRANCHED VERSION FROM THE CURRENT #
  284. '#        SOURCE CODE, IT HAS BEEN DONE TO FIX A PAIR #
  285. '#        OF CRITICAL BUGS, SO AS TO CONTINUE WITH MY #
  286. '#        WELL DESERVED BRAND OF _QUALITY_.           #
  287. '#      CURRENT SOURCE CODE IS NOT EVEN CLOSE TO THIS #
  288. '#      AND MORE THAN A DOZEN OF SPECIFIC BUGS WERE   #
  289. '#      FIXED, AND SOME FEATURES WERE ADDED.          #
  290. '#      SPEED HAS BEEN EXTREMELY TWEAKED, SO IMPACT   #
  291. '#      IN PERFORMANCE IS NULL. ALL MEMORY LEAKS ARE  #
  292. '#      GONE, SO IT IS NOW A ROCK SOLID CONTROL.      #
  293. '#      THE FULL SOURCE FOR THE NEWEST VERSION IS     #
  294. '#      AVAILABLE ONCE YOU REGISTER AT:               #
  295. '#              http://gonchuki.8m.com                #
  296. '#                                                    #
  297. '#      ╖ fixed a problem with mask color under 16-bit#
  298. '#        screens.                                    #
  299. '#      ╖ caption now updates in real-time in the IDE #
  300. '#      ╖ fixed icon drawing in TransBlt              #
  301. '#      ╖ fixed transparent button issue. The solution#
  302. '#        used is rather old, and does not match the  #
  303. '#        actual one... however, it works fine.       #
  304. '#      ╖ used Ulli's code formatter for some better  #
  305. '#        readability.                                #
  306. '#                                                    #
  307. '######################################################
  308.  
  309. 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
  310. Private Declare Function GetNearestColor Lib "gdi32" (ByVal hDC As Long, ByVal crColor As Long) As Long
  311.  
  312. Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
  313. Private Const COLOR_HIGHLIGHT = 13
  314. Private Const COLOR_BTNFACE = 15
  315. Private Const COLOR_BTNSHADOW = 16
  316. Private Const COLOR_BTNTEXT = 18
  317. Private Const COLOR_BTNHIGHLIGHT = 20
  318. Private Const COLOR_BTNDKSHADOW = 21
  319. Private Const COLOR_BTNLIGHT = 22
  320.  
  321. Private Declare Function OleTranslateColor Lib "oleaut32.dll" (ByVal lOleColor As Long, ByVal lHPalette As Long, lColorRef As Long) As Long
  322. Private Declare Function GetBkColor Lib "gdi32" (ByVal hDC As Long) As Long
  323. Private Declare Function GetTextColor Lib "gdi32" (ByVal hDC As Long) As Long
  324. Private Declare Function SetTextColor Lib "gdi32" (ByVal hDC As Long, ByVal crColor As Long) As Long
  325. 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
  326. Private Const DT_CALCRECT = &H400
  327. Private Const DT_WORDBREAK = &H10
  328. Private Const DT_CENTER = &H1 Or DT_WORDBREAK Or &H4
  329.  
  330. Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
  331. Private Declare Function FillRect Lib "user32" (ByVal hDC As Long, lpRect As RECT, ByVal hBrush As Long) As Long
  332. Private Declare Function FrameRect Lib "user32" (ByVal hDC As Long, lpRect As RECT, ByVal hBrush As Long) As Long
  333. Private Declare Function DrawFocusRect Lib "user32" (ByVal hDC As Long, lpRect As RECT) As Long
  334. 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
  335.  
  336. Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
  337. Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
  338.  
  339. Private Declare Function MoveToEx Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, lpPoint As POINTAPI) As Long
  340. Private Declare Function LineTo Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long
  341. Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
  342. Private Const PS_SOLID = 0
  343.  
  344. ' for Carles P.V DIB solutions
  345. Private Declare Function StretchDIBits 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 wSrcWidth As Long, ByVal wSrcHeight As Long, lpBits As Any, lpBitsInfo As Any, ByVal wUsage As Long, ByVal dwRop As Long) As Long
  346. Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
  347. Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
  348. Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
  349. Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
  350. Private Const RGN_DIFF = 4
  351.  
  352. Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
  353. Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
  354. Private Declare Function InflateRect Lib "user32" (lpRect As RECT, ByVal X As Long, ByVal Y As Long) As Long
  355. Private Declare Function OffsetRect Lib "user32" (lpRect As RECT, ByVal X As Long, ByVal Y As Long) As Long
  356. Private Declare Function CopyRect Lib "user32" (lpDestRect As RECT, lpSourceRect As RECT) As Long
  357. Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
  358. Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  359.  
  360. Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
  361.  
  362. Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long
  363. Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
  364. Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
  365.  
  366. 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
  367. 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
  368.  
  369. 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
  370. Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long
  371. Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
  372. Private Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long
  373. 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
  374. 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
  375. Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long
  376.  
  377. '[APIConstants]
  378. Private Const DIB_RGB_ColS      As Long = 0
  379. Private Const VER_PLATFORM_WIN32_NT  As Long = 2
  380. Private Const DSS_DISABLED As Long = &H20
  381. Private Const DSS_MONO As Long = &H80
  382. Private Const DST_BITMAP As Long = &H4
  383. Private Const DST_ICON As Long = &H3
  384. Private Const DST_COMPLEX As Long = &H0
  385. Private Const GWL_EXSTYLE       As Long = (-20)
  386. Private Const WS_EX_TOOLWINDOW  As Long = &H80&
  387. Private Const SWP_SHOWWINDOW As Long = &H40
  388.  
  389. Private Type RECT
  390.     Left As Long
  391.     Top As Long
  392.     Right As Long
  393.     Bottom As Long
  394. End Type
  395.  
  396. Private Type POINTAPI
  397.     X As Long
  398.     Y As Long
  399. End Type
  400.  
  401. Private Type BITMAPINFOHEADER
  402.     biSize As Long
  403.     biWidth As Long
  404.     biHeight As Long
  405.     biPlanes As Integer
  406.     biBitCount As Integer
  407.     biCompression As Long
  408.     biSizeImage As Long
  409.     biXPelsPerMeter As Long
  410.     biYPelsPerMeter As Long
  411.     biClrUsed As Long
  412.     biClrImportant As Long
  413. End Type
  414.  
  415. Private Type RGBTRIPLE
  416.     rgbBlue As Byte
  417.     rgbGreen As Byte
  418.     rgbRed As Byte
  419. End Type
  420.  
  421. Private Type BITMAPINFO
  422.     bmiHeader As BITMAPINFOHEADER
  423.     bmiColors As RGBTRIPLE
  424. End Type
  425.  
  426. Public Enum ButtonTypes
  427.     [Windows 16-bit] = 1    'the old-fashioned Win16 button
  428.     [Windows 32-bit] = 2    'the classic windows button
  429.     [Windows XP] = 3        'the new brand XP button totally owner-drawn
  430.     [Mac] = 4               'i suppose it looks exactly as a Mac button... i took the style from a GetRight skin!!!
  431.     [Java metal] = 5        'there are also other styles but not so different from windows one
  432.     [Netscape 6] = 6        'this is the button displayed in web-pages, it also appears in some java apps
  433.     [Simple Flat] = 7       'the standard flat button seen on toolbars
  434.     [Flat Highlight] = 8    'again the flat button but this one has no border until the mouse is over it
  435.     [Office XP] = 9         'the new Office XP button
  436.     '[MacOS-X] = 10         'this is a plan for the future...
  437.     [Transparent] = 11      'suggested from a user...
  438.     [3D Hover] = 12         'took this one from "Noteworthy Composer" toolbal
  439.     [Oval Flat] = 13        'a simple Oval Button
  440.     [KDE 2] = 14            'the great standard KDE2 button!
  441. End Enum
  442.  
  443. Public Enum GradientDirectionEnum
  444.     [Fill_None] = 0
  445.     [Fill_Horizontal] = 1
  446.     [Fill_HorizontalMiddleOut] = 2
  447.     [Fill_Vertical] = 3
  448.     [Fill_VerticalMiddleOut] = 4
  449.     [Fill_DownwardDiagonal] = 5
  450.     [Fill_UpwardDiagonal] = 6
  451. End Enum
  452.  
  453. Public Enum ColorTypes
  454.     [Use Windows] = 1
  455.     [Custom] = 2
  456.     [Force Standard] = 3
  457.     [Use Container] = 4
  458. End Enum
  459.  
  460. Public Enum PicPositions
  461.     cbLeft = 0
  462.     cbRight = 1
  463.     cbTop = 2
  464.     cbBottom = 3
  465.     cbBackground = 4
  466. End Enum
  467.  
  468. Public Enum fx
  469.     cbNone = 0
  470.     cbEmbossed = 1
  471.     cbEngraved = 2
  472.     cbShadowed = 3
  473. End Enum
  474.  
  475. Private Const FXDEPTH As Long = &H28
  476.  
  477. 'events
  478. Public Event Click()
  479. Attribute Click.VB_UserMemId = -600
  480. Attribute Click.VB_MemberFlags = "200"
  481. Public Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  482. Public Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  483. Public Event MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  484. Public Event KeyPress(KeyAscii As Integer)
  485. Public Event KeyDown(KeyCode As Integer, Shift As Integer)
  486. Public Event KeyUp(KeyCode As Integer, Shift As Integer)
  487. Public Event MouseOver()
  488. Public Event MouseOut()
  489.  
  490. 'variables
  491. Private MyButtonType As ButtonTypes
  492. Private MyColorType As ColorTypes
  493. Private PicPosition As PicPositions
  494. Private SFX As fx 'font and picture effects
  495.  
  496. Private He As Long  'the height of the button
  497. Private Wi As Long  'the width of the button
  498.  
  499. Private BackC As Long 'back color
  500. Private BackO As Long 'back color when mouse is over
  501. Private ForeC As Long 'fore color
  502. Private ForeO As Long 'fore color when mouse is over
  503. Private MaskC As Long 'mask color
  504. Private OXPb As Long, OXPf As Long
  505. Private useMask As Boolean, useGrey As Boolean
  506. Private useHand As Boolean
  507. Private mColor1 As OLE_COLOR
  508. Private mColor2 As OLE_COLOR
  509. Private mGradirection As GradientDirectionEnum
  510.  
  511. Private picNormal As StdPicture, picHover As StdPicture
  512. Private picPng As c32bppDIB
  513. Private m_IconPath As String
  514. Private pDC As Long, pBM As Long, oBM As Long 'used for the treansparent button
  515.  
  516. Private elTex As String     'current text
  517.  
  518. Private rc As RECT, rc2 As RECT, rc3 As RECT, fc As POINTAPI 'text and focus rect locations
  519. Private picPT As POINTAPI, picSZ As POINTAPI  'picture Position & Size
  520. Private rgnNorm As Long
  521.  
  522.  
  523. Private LastButton As Byte, LastKeyDown As Byte
  524. Private isEnabled As Boolean, isSoft As Boolean
  525. Private HasFocus As Boolean, showFocusR As Boolean
  526.  
  527. 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
  528.  
  529. Private lastStat As Byte, TE As String, isShown As Boolean  'used to avoid unnecessary repaints
  530. Private IsOver As Boolean, inLoop As Boolean
  531.  
  532. Private Locked As Boolean
  533.  
  534. Private captOpt As Long
  535. Private isCheckbox As Boolean, cValue As Boolean
  536. Property Get GradientDir() As GradientDirectionEnum
  537.      GradientDir = mGradirection
  538. End Property
  539. Property Let GradientDir(xGradDir As GradientDirectionEnum)
  540.      mGradirection = xGradDir
  541.     Call Redraw(lastStat, True)
  542.     PropertyChanged "GRADDIR"
  543.      
  544. End Property
  545. Property Get GradColor2() As OLE_COLOR
  546.      GradColor2 = mColor2
  547. End Property
  548. Property Let GradColor2(mGRadColor As OLE_COLOR)
  549.     mColor2 = mGRadColor
  550.     Call Redraw(lastStat, True)
  551.     PropertyChanged "GCOLOR2"
  552. End Property
  553.  
  554. Property Get GradColor1() As OLE_COLOR
  555.      GradColor1 = mColor1
  556. End Property
  557. Property Let GradColor1(mGRadColor As OLE_COLOR)
  558.     mColor1 = mGRadColor
  559.     Call Redraw(lastStat, True)
  560.     PropertyChanged "GCOLOR1"
  561. End Property
  562. Private Sub OverTimer_Timer()
  563.  
  564.     If Not isMouseOver Then
  565.         OverTimer.Enabled = False
  566.         IsOver = False
  567.         Call Redraw(0, True)
  568.         RaiseEvent MouseOut
  569.     End If
  570.  
  571. End Sub
  572. Property Get Imagen() As Byte()
  573.     Dim Test As Boolean
  574.     Dim mBytes() As Byte
  575.     
  576.     Test = picPng.SaveToStream(mBytes())
  577.     Imagen = mBytes()
  578.  
  579. End Property
  580. Property Let Imagen(mB() As Byte)
  581.     
  582.     Call picPng.LoadPicture_Stream(mB())
  583.     UserControl.Refresh
  584.     Call CalcPicPos
  585.     Call Redraw(lastStat, True)
  586.     PropertyChanged "PICPNG"
  587.  
  588. End Property
  589.  
  590. Private Sub UserControl_AccessKeyPress(KeyAscii As Integer)
  591.  
  592.     LastButton = 1
  593.     Call UserControl_Click
  594.  
  595. End Sub
  596.  
  597. Private Sub UserControl_AmbientChanged(PropertyName As String)
  598.  
  599.     Call SetColors
  600.     Call Redraw(lastStat, True)
  601.  
  602. End Sub
  603.  
  604. Private Sub UserControl_Click()
  605.  
  606.     If LastButton = 1 And isEnabled Then
  607.         If isCheckbox Then cValue = Not cValue
  608.         Call Redraw(0, True) 'be sure that the normal status is drawn
  609.         UserControl.Refresh
  610.         RaiseEvent Click
  611.     End If
  612.  
  613. End Sub
  614.  
  615. Private Sub UserControl_DblClick()
  616.  
  617.     If LastButton = 1 Then
  618.         Call UserControl_MouseDown(1, 0, 0, 0)
  619.         SetCapture hwnd
  620.     End If
  621.  
  622. End Sub
  623.  
  624. Private Sub UserControl_GotFocus()
  625.  
  626.     HasFocus = True
  627.     Call Redraw(lastStat, True)
  628.  
  629. End Sub
  630.  
  631. Private Sub UserControl_Hide()
  632.  
  633.     isShown = False
  634.  
  635. End Sub
  636.  
  637. Private Sub UserControl_Initialize()
  638.  
  639. '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...
  640.  
  641.     Set picPng = New c32bppDIB
  642.     isShown = True
  643.  
  644. End Sub
  645.  
  646. Private Sub UserControl_KeyDown(KeyCode As Integer, Shift As Integer)
  647.  
  648.     RaiseEvent KeyDown(KeyCode, Shift)
  649.  
  650.     LastKeyDown = KeyCode
  651.     Select Case KeyCode
  652.     Case 32 'spacebar pressed
  653.         Call Redraw(2, False)
  654.     Case 39, 40 'right and down arrows
  655.         SendKeys "{Tab}"
  656.     Case 37, 38 'left and up arrows
  657.         SendKeys "+{Tab}"
  658.     End Select
  659.  
  660. End Sub
  661.  
  662. Private Sub UserControl_KeyPress(KeyAscii As Integer)
  663.  
  664.     RaiseEvent KeyPress(KeyAscii)
  665.  
  666. End Sub
  667.  
  668. Private Sub UserControl_KeyUp(KeyCode As Integer, Shift As Integer)
  669.  
  670.     RaiseEvent KeyUp(KeyCode, Shift)
  671.  
  672.     If (KeyCode = 32) And (LastKeyDown = 32) Then 'spacebar pressed, and not cancelled by the user
  673.         If isCheckbox Then cValue = Not cValue
  674.         Call Redraw(0, False)
  675.         UserControl.Refresh
  676.         RaiseEvent Click
  677.     End If
  678.  
  679. End Sub
  680.  
  681. Private Sub UserControl_LostFocus()
  682.  
  683.     HasFocus = False
  684.     Call Redraw(lastStat, True)
  685.  
  686. End Sub
  687.  
  688. Private Sub UserControl_InitProperties()
  689.  
  690.     isEnabled = True
  691.     showFocusR = True
  692.     useMask = True
  693.     elTex = Ambient.DisplayName
  694.     Set UserControl.Font = Ambient.Font
  695.     MyButtonType = [Windows 32-bit]
  696.     MyColorType = [Use Windows]
  697.     Call SetColors
  698.     BackC = cFace
  699.     BackO = BackC
  700.     ForeC = cText
  701.     ForeO = ForeC
  702.     MaskC = &HC0C0C0
  703.     'Call picPng.LoadPicture_File(App.Path & "\" & "test.png")
  704.     Call CalcTextRects
  705.  
  706. End Sub
  707.  
  708. Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  709.  
  710.     RaiseEvent MouseDown(Button, Shift, X, Y)
  711.     LastButton = Button
  712.     If Button <> 2 Then Call Redraw(2, False)
  713.  
  714. End Sub
  715.  
  716. Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  717.  
  718.     RaiseEvent MouseMove(Button, Shift, X, Y)
  719.     If Button < 2 Then
  720.         If Not isMouseOver Then
  721.             'we are outside the button
  722.             Call Redraw(0, False)
  723.         Else
  724.             'we are inside the button
  725.             If Button = 0 And Not IsOver Then
  726.                 OverTimer.Enabled = True
  727.                 IsOver = True
  728.                 Call Redraw(0, True)
  729.                 RaiseEvent MouseOver
  730.             ElseIf Button = 1 Then
  731.                 IsOver = True
  732.                 Call Redraw(2, False)
  733.                 IsOver = False
  734.             End If
  735.         End If
  736.     End If
  737.  
  738. End Sub
  739.  
  740. Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  741.  
  742.     RaiseEvent MouseUp(Button, Shift, X, Y)
  743.     If Button <> 2 Then Call Redraw(0, False)
  744.  
  745. End Sub
  746.  
  747. Public Property Get BackColor() As OLE_COLOR
  748. Attribute BackColor.VB_ProcData.VB_Invoke_Property = ";Appearance"
  749. Attribute BackColor.VB_UserMemId = -501
  750.  
  751.     BackColor = BackC
  752.  
  753. End Property
  754.  
  755. Public Property Let BackColor(ByVal theCol As OLE_COLOR)
  756.  
  757.     BackC = theCol
  758.     If Not Ambient.UserMode Then BackO = theCol
  759.     Call SetColors
  760.     Call Redraw(lastStat, True)
  761.     PropertyChanged "BCOL"
  762.  
  763. End Property
  764.  
  765. Public Property Get BackOver() As OLE_COLOR
  766. Attribute BackOver.VB_ProcData.VB_Invoke_Property = ";Appearance"
  767.  
  768.     BackOver = BackO
  769.  
  770. End Property
  771.  
  772. Public Property Let BackOver(ByVal theCol As OLE_COLOR)
  773.  
  774.     BackO = theCol
  775.     Call SetColors
  776.     Call Redraw(lastStat, True)
  777.     PropertyChanged "BCOLO"
  778.  
  779. End Property
  780.  
  781. Public Property Get ForeColor() As OLE_COLOR
  782. Attribute ForeColor.VB_ProcData.VB_Invoke_Property = ";Appearance"
  783. Attribute ForeColor.VB_UserMemId = -513
  784.  
  785.     ForeColor = ForeC
  786.  
  787. End Property
  788.  
  789. Public Property Let ForeColor(ByVal theCol As OLE_COLOR)
  790.  
  791.     ForeC = theCol
  792.     If Not Ambient.UserMode Then ForeO = theCol
  793.     Call SetColors
  794.     Call Redraw(lastStat, True)
  795.     PropertyChanged "FCOL"
  796.  
  797. End Property
  798.  
  799. Public Property Get ForeOver() As OLE_COLOR
  800. Attribute ForeOver.VB_ProcData.VB_Invoke_Property = ";Appearance"
  801.  
  802.     ForeOver = ForeO
  803.  
  804. End Property
  805.  
  806. Public Property Let ForeOver(ByVal theCol As OLE_COLOR)
  807.  
  808.     ForeO = theCol
  809.     Call SetColors
  810.     Call Redraw(lastStat, True)
  811.     PropertyChanged "FCOLO"
  812.  
  813. End Property
  814.  
  815. Public Property Get MaskColor() As OLE_COLOR
  816. Attribute MaskColor.VB_ProcData.VB_Invoke_Property = ";Appearance"
  817.  
  818.     MaskColor = MaskC
  819.  
  820. End Property
  821.  
  822. Public Property Let MaskColor(ByVal theCol As OLE_COLOR)
  823.  
  824.     MaskC = theCol
  825.     Call SetColors
  826.     Call Redraw(lastStat, True)
  827.     PropertyChanged "MCOL"
  828.  
  829. End Property
  830.  
  831. Public Property Get ButtonType() As ButtonTypes
  832. Attribute ButtonType.VB_ProcData.VB_Invoke_Property = ";Appearance"
  833.  
  834.     ButtonType = MyButtonType
  835.  
  836. End Property
  837.  
  838. Public Property Let ButtonType(ByVal newValue As ButtonTypes)
  839.  
  840.     MyButtonType = newValue
  841.     If MyButtonType = [Java metal] And Not Ambient.UserMode Then
  842.         UserControl.FontBold = True
  843.     ElseIf MyButtonType = 11 And isShown Then
  844.         Call GetParentPic
  845.     End If
  846.     Call UserControl_Resize
  847.     PropertyChanged "BTYPE"
  848.  
  849. End Property
  850.  
  851. Public Property Get Caption() As String
  852. Attribute Caption.VB_ProcData.VB_Invoke_Property = ";Text"
  853. Attribute Caption.VB_UserMemId = -518
  854.  
  855.     Caption = elTex
  856.  
  857. End Property
  858.  
  859. Public Property Let Caption(ByVal newValue As String)
  860.  
  861.     elTex = newValue
  862.     Call SetAccessKeys
  863.     Call CalcTextRects
  864.     Call Redraw(0, True)
  865.     PropertyChanged "TX"
  866.  
  867. End Property
  868.  
  869. Public Property Get Enabled() As Boolean
  870. Attribute Enabled.VB_ProcData.VB_Invoke_Property = ";Behavior"
  871. Attribute Enabled.VB_UserMemId = -514
  872.  
  873.     Enabled = isEnabled
  874.  
  875. End Property
  876.  
  877. Public Property Let Enabled(ByVal newValue As Boolean)
  878.  
  879.     isEnabled = newValue
  880.     Call Redraw(0, True)
  881.     UserControl.Enabled = isEnabled
  882.     PropertyChanged "ENAB"
  883.  
  884. End Property
  885.  
  886. Public Property Get Font() As Font
  887. Attribute Font.VB_ProcData.VB_Invoke_Property = ";Font"
  888. Attribute Font.VB_UserMemId = -512
  889.  
  890.     Set Font = UserControl.Font
  891.  
  892. End Property
  893.  
  894. Public Property Set Font(ByRef newFont As Font)
  895.  
  896.     Set UserControl.Font = newFont
  897.     Call CalcTextRects
  898.     Call Redraw(0, True)
  899.     PropertyChanged "FONT"
  900.  
  901. End Property
  902.  
  903. Public Property Get FontBold() As Boolean
  904. Attribute FontBold.VB_MemberFlags = "400"
  905.  
  906.     FontBold = UserControl.FontBold
  907.  
  908. End Property
  909.  
  910. Public Property Let FontBold(ByVal newValue As Boolean)
  911.  
  912.     UserControl.FontBold = newValue
  913.     Call CalcTextRects
  914.     Call Redraw(0, True)
  915.  
  916. End Property
  917.  
  918. Public Property Get FontItalic() As Boolean
  919. Attribute FontItalic.VB_MemberFlags = "400"
  920.  
  921.     FontItalic = UserControl.FontItalic
  922.  
  923. End Property
  924.  
  925. Public Property Let FontItalic(ByVal newValue As Boolean)
  926.  
  927.     UserControl.FontItalic = newValue
  928.     Call CalcTextRects
  929.     Call Redraw(0, True)
  930.  
  931. End Property
  932.  
  933. Public Property Get FontUnderline() As Boolean
  934. Attribute FontUnderline.VB_MemberFlags = "400"
  935.  
  936.     FontUnderline = UserControl.FontUnderline
  937.  
  938. End Property
  939.  
  940. Public Property Let FontUnderline(ByVal newValue As Boolean)
  941.  
  942.     UserControl.FontUnderline = newValue
  943.     Call CalcTextRects
  944.     Call Redraw(0, True)
  945.  
  946. End Property
  947.  
  948. Public Property Get FontSize() As Integer
  949. Attribute FontSize.VB_MemberFlags = "400"
  950.  
  951.     FontSize = UserControl.FontSize
  952.  
  953. End Property
  954.  
  955. Public Property Let FontSize(ByVal newValue As Integer)
  956.  
  957.     UserControl.FontSize = newValue
  958.     Call CalcTextRects
  959.     Call Redraw(0, True)
  960.  
  961. End Property
  962.  
  963. Public Property Get FontName() As String
  964. Attribute FontName.VB_MemberFlags = "400"
  965.  
  966.     FontName = UserControl.FontName
  967.  
  968. End Property
  969.  
  970. Public Property Let FontName(ByVal newValue As String)
  971.  
  972.     UserControl.FontName = newValue
  973.     Call CalcTextRects
  974.     Call Redraw(0, True)
  975.  
  976. End Property
  977.  
  978. 'it is very common that a windows user uses custom color
  979. 'schemes to view his/her desktop, and is also very
  980. 'common that this color scheme has weird colors that
  981. 'would alter the nice look of my buttons.
  982. 'So if you want to force the button to use the windows
  983. 'standard colors you may change this property to "Force Standard"
  984.  
  985. Public Property Get ColorScheme() As ColorTypes
  986. Attribute ColorScheme.VB_ProcData.VB_Invoke_Property = ";Appearance"
  987.  
  988.     ColorScheme = MyColorType
  989.  
  990. End Property
  991.  
  992. Public Property Let ColorScheme(ByVal newValue As ColorTypes)
  993.  
  994.     MyColorType = newValue
  995.     Call SetColors
  996.     Call Redraw(0, True)
  997.     PropertyChanged "COLTYPE"
  998.  
  999. End Property
  1000.  
  1001. Public Property Get ShowFocusRect() As Boolean
  1002. Attribute ShowFocusRect.VB_ProcData.VB_Invoke_Property = ";Appearance"
  1003.  
  1004.     ShowFocusRect = showFocusR
  1005.  
  1006. End Property
  1007.  
  1008. Public Property Let ShowFocusRect(ByVal newValue As Boolean)
  1009.  
  1010.     showFocusR = newValue
  1011.     Call Redraw(lastStat, True)
  1012.     PropertyChanged "FOCUSR"
  1013.  
  1014. End Property
  1015.  
  1016. Public Property Get MousePointer() As MousePointerConstants
  1017. Attribute MousePointer.VB_ProcData.VB_Invoke_Property = ";Appearance"
  1018.  
  1019.     MousePointer = UserControl.MousePointer
  1020.  
  1021. End Property
  1022.  
  1023. Public Property Let MousePointer(ByVal newPointer As MousePointerConstants)
  1024.  
  1025.     UserControl.MousePointer = newPointer
  1026.     PropertyChanged "MPTR"
  1027.  
  1028. End Property
  1029.  
  1030. Public Property Get MouseIcon() As StdPicture
  1031. Attribute MouseIcon.VB_ProcData.VB_Invoke_Property = ";Appearance"
  1032.  
  1033.     Set MouseIcon = UserControl.MouseIcon
  1034.  
  1035. End Property
  1036.  
  1037. Public Property Set MouseIcon(ByVal newIcon As StdPicture)
  1038.  
  1039.     On Local Error Resume Next
  1040.         Set UserControl.MouseIcon = newIcon
  1041.         PropertyChanged "MICON"
  1042.     On Error GoTo 0
  1043.  
  1044. End Property
  1045.  
  1046. Public Property Get HandPointer() As Boolean
  1047.  
  1048.     HandPointer = useHand
  1049.  
  1050. End Property
  1051.  
  1052. Public Property Let HandPointer(ByVal newVal As Boolean)
  1053.  
  1054.     useHand = newVal
  1055.     If useHand Then
  1056.         Set UserControl.MouseIcon = LoadResPicture(101, 2)
  1057.         UserControl.MousePointer = 99
  1058.     Else
  1059.         Set UserControl.MouseIcon = Nothing
  1060.         UserControl.MousePointer = 1
  1061.     End If
  1062.     PropertyChanged "HAND"
  1063.  
  1064. End Property
  1065.  
  1066. Public Property Get hwnd() As Long
  1067. Attribute hwnd.VB_UserMemId = -515
  1068.  
  1069.     hwnd = UserControl.hwnd
  1070.  
  1071. End Property
  1072.  
  1073. Public Property Get SoftBevel() As Boolean
  1074. Attribute SoftBevel.VB_ProcData.VB_Invoke_Property = ";Appearance"
  1075.  
  1076.     SoftBevel = isSoft
  1077.  
  1078. End Property
  1079.  
  1080. Public Property Let SoftBevel(ByVal newValue As Boolean)
  1081.  
  1082.     isSoft = newValue
  1083.     Call SetColors
  1084.     Call Redraw(lastStat, True)
  1085.     PropertyChanged "SOFT"
  1086.  
  1087. End Property
  1088.  
  1089. Public Property Get PictureNormal() As StdPicture
  1090. Attribute PictureNormal.VB_ProcData.VB_Invoke_Property = ";Appearance"
  1091.  
  1092.     Set PictureNormal = picNormal
  1093.  
  1094. End Property
  1095.  
  1096. Public Property Set PictureNormal(ByVal newPic As StdPicture)
  1097.  
  1098.     Set picNormal = newPic
  1099.     Call CalcPicSize
  1100.     Call CalcTextRects
  1101.     Call Redraw(lastStat, True)
  1102.     PropertyChanged "PICN"
  1103.  
  1104. End Property
  1105.  
  1106. Public Property Get PictureOver() As StdPicture
  1107. Attribute PictureOver.VB_ProcData.VB_Invoke_Property = ";Appearance"
  1108.  
  1109.     Set PictureOver = picHover
  1110.  
  1111. End Property
  1112.  
  1113. Public Property Set PictureOver(ByVal newPic As StdPicture)
  1114.  
  1115.     Set picHover = newPic
  1116.     If IsOver Then Call Redraw(lastStat, True) 'only redraw i we need to see this picture immediately
  1117.     PropertyChanged "PICO"
  1118.  
  1119. End Property
  1120.  
  1121. Public Property Get PicturePosition() As PicPositions
  1122. Attribute PicturePosition.VB_ProcData.VB_Invoke_Property = ";Position"
  1123.  
  1124.     PicturePosition = PicPosition
  1125.  
  1126. End Property
  1127.  
  1128. Public Property Let PicturePosition(ByVal newPicPos As PicPositions)
  1129.  
  1130.     PicPosition = newPicPos
  1131.     PropertyChanged "PICPOS"
  1132.     Call CalcTextRects
  1133.     Call Redraw(lastStat, True)
  1134.  
  1135. End Property
  1136.  
  1137. Public Property Get UseMaskColor() As Boolean
  1138. Attribute UseMaskColor.VB_ProcData.VB_Invoke_Property = ";Appearance"
  1139.  
  1140.     UseMaskColor = useMask
  1141.  
  1142. End Property
  1143.  
  1144. Public Property Let UseMaskColor(ByVal newValue As Boolean)
  1145.  
  1146.     useMask = newValue
  1147.     If Not picNormal Is Nothing Then Call Redraw(lastStat, True)
  1148.     PropertyChanged "UMCOL"
  1149.  
  1150. End Property
  1151.  
  1152. Public Property Get UseGreyscale() As Boolean
  1153. Attribute UseGreyscale.VB_ProcData.VB_Invoke_Property = ";Appearance"
  1154.  
  1155.     UseGreyscale = useGrey
  1156.  
  1157. End Property
  1158.  
  1159. Public Property Let UseGreyscale(ByVal newValue As Boolean)
  1160.  
  1161.     useGrey = newValue
  1162.     If Not picNormal Is Nothing Then Call Redraw(lastStat, True)
  1163.     PropertyChanged "NGREY"
  1164.  
  1165. End Property
  1166.  
  1167. Public Property Get SpecialEffect() As fx
  1168. Attribute SpecialEffect.VB_ProcData.VB_Invoke_Property = ";Appearance"
  1169.  
  1170.     SpecialEffect = SFX
  1171.  
  1172. End Property
  1173.  
  1174. Public Property Let SpecialEffect(ByVal newValue As fx)
  1175.  
  1176.     SFX = newValue
  1177.     Call Redraw(lastStat, True)
  1178.     PropertyChanged "FX"
  1179.  
  1180. End Property
  1181.  
  1182. Public Property Get CheckBoxBehaviour() As Boolean
  1183.  
  1184.     CheckBoxBehaviour = isCheckbox
  1185.  
  1186. End Property
  1187.  
  1188. Public Property Let CheckBoxBehaviour(ByVal newValue As Boolean)
  1189.  
  1190.     isCheckbox = newValue
  1191.     Call Redraw(lastStat, True)
  1192.     PropertyChanged "CHECK"
  1193.  
  1194. End Property
  1195.  
  1196. Public Property Get Value() As Boolean
  1197.  
  1198.     Value = cValue
  1199.  
  1200. End Property
  1201.  
  1202. Public Property Let Value(ByVal newValue As Boolean)
  1203.  
  1204.     cValue = newValue
  1205.     If isCheckbox Then Call Redraw(0, True)
  1206.     PropertyChanged "VALUE"
  1207.  
  1208. End Property
  1209.  
  1210. Public Property Get Version() As String
  1211. Attribute Version.VB_MemberFlags = "40"
  1212.  
  1213.     Version = cbVersion
  1214.  
  1215. End Property
  1216.  
  1217. '########## END OF PROPERTIES ##########
  1218.  
  1219. Private Sub UserControl_Resize()
  1220.  
  1221.     If inLoop Then Exit Sub
  1222.     'get button size
  1223.     GetClientRect UserControl.hwnd, rc3
  1224.     'assign these values to He and Wi
  1225.     He = rc3.Bottom: Wi = rc3.Right
  1226.     'build the FocusRect size and position depending on the button type
  1227.     If MyButtonType >= [Simple Flat] And MyButtonType <= [Oval Flat] Then
  1228.         InflateRect rc3, -3, -3
  1229.     ElseIf MyButtonType = [KDE 2] Then
  1230.         InflateRect rc3, -5, -5
  1231.         OffsetRect rc3, 1, 1
  1232.     Else
  1233.         InflateRect rc3, -4, -4
  1234.     End If
  1235.     Call CalcTextRects
  1236.  
  1237.     If rgnNorm Then DeleteObject rgnNorm
  1238.     Call MakeRegion
  1239.     SetWindowRgn UserControl.hwnd, rgnNorm, True
  1240.  
  1241.     If He Then Call Redraw(0, True)
  1242.  
  1243. End Sub
  1244.  
  1245. Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  1246.     Dim mDatos() As Byte
  1247.  
  1248.     With PropBag
  1249.         MyButtonType = .ReadProperty("BTYPE", 2)
  1250.         elTex = .ReadProperty("TX", "")
  1251.         isEnabled = .ReadProperty("ENAB", True)
  1252.         Set UserControl.Font = .ReadProperty("FONT", UserControl.Font)
  1253.         MyColorType = .ReadProperty("COLTYPE", 1)
  1254.         showFocusR = .ReadProperty("FOCUSR", True)
  1255.         BackC = .ReadProperty("BCOL", GetSysColor(COLOR_BTNFACE))
  1256.         BackO = .ReadProperty("BCOLO", BackC)
  1257.         ForeC = .ReadProperty("FCOL", GetSysColor(COLOR_BTNTEXT))
  1258.         ForeO = .ReadProperty("FCOLO", ForeC)
  1259.         MaskC = .ReadProperty("MCOL", &HC0C0C0)
  1260.         UserControl.MousePointer = .ReadProperty("MPTR", 0)
  1261.         Set UserControl.MouseIcon = .ReadProperty("MICON", Nothing)
  1262.         Set picNormal = .ReadProperty("PICN", Nothing)
  1263.         Set picHover = .ReadProperty("PICH", Nothing)
  1264.         useMask = .ReadProperty("UMCOL", True)
  1265.         isSoft = .ReadProperty("SOFT", False)
  1266.         PicPosition = .ReadProperty("PICPOS", 0)
  1267.         useGrey = .ReadProperty("NGREY", False)
  1268.         SFX = .ReadProperty("FX", 0)
  1269.         Me.HandPointer = .ReadProperty("HAND", False)
  1270.         isCheckbox = .ReadProperty("CHECK", False)
  1271.         cValue = .ReadProperty("VALUE", False)
  1272.         m_IconPath = .ReadProperty("PATHICON", "")
  1273.         mColor1 = .ReadProperty("GCOLOR1", GetSysColor(COLOR_BTNFACE))
  1274.         mColor2 = .ReadProperty("GCOLOR2", GetSysColor(COLOR_BTNFACE))
  1275.         mGradirection = .ReadProperty("GRADDIR", 0)
  1276.         mDatos() = .ReadProperty("PICPNG")
  1277.         Call picPng.LoadPicture_Stream(mDatos())
  1278.     End With
  1279.  
  1280.     UserControl.Enabled = isEnabled
  1281.     Call CalcPicSize
  1282.     Call CalcTextRects
  1283.     Call SetAccessKeys
  1284.  
  1285. End Sub
  1286.  
  1287. Private Sub UserControl_Show()
  1288.  
  1289.     If MyButtonType = 11 Then
  1290.         If pDC = 0 Then
  1291.             pDC = CreateCompatibleDC(UserControl.hDC): pBM = CreateBitmap(Wi, He, 1, GetDeviceCaps(hDC, 12), ByVal 0&)
  1292.             oBM = SelectObject(pDC, pBM)
  1293.         End If
  1294.  
  1295.         Call GetParentPic
  1296.     End If
  1297.  
  1298.     isShown = True
  1299.     Call SetColors
  1300.     Call Redraw(0, True)
  1301.  
  1302. End Sub
  1303.  
  1304. Private Sub UserControl_Terminate()
  1305.  
  1306.     isShown = False
  1307.     DeleteObject rgnNorm
  1308.     If pDC Then
  1309.         DeleteObject SelectObject(pDC, oBM)
  1310.         DeleteDC pDC
  1311.     End If
  1312.  
  1313. End Sub
  1314.  
  1315. Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  1316.     Dim mDatos() As Byte
  1317.     Dim Test As Boolean
  1318.     With PropBag
  1319.         Call .WriteProperty("BTYPE", MyButtonType)
  1320.         Call .WriteProperty("TX", elTex)
  1321.         Call .WriteProperty("ENAB", isEnabled)
  1322.         Call .WriteProperty("FONT", UserControl.Font)
  1323.         Call .WriteProperty("COLTYPE", MyColorType)
  1324.         Call .WriteProperty("FOCUSR", showFocusR)
  1325.         Call .WriteProperty("BCOL", BackC)
  1326.         Call .WriteProperty("BCOLO", BackO)
  1327.         Call .WriteProperty("FCOL", ForeC)
  1328.         Call .WriteProperty("FCOLO", ForeO)
  1329.         Call .WriteProperty("MCOL", MaskC)
  1330.         Call .WriteProperty("MPTR", UserControl.MousePointer)
  1331.         Call .WriteProperty("MICON", UserControl.MouseIcon)
  1332.         Call .WriteProperty("PICN", picNormal, Nothing)
  1333.         Call .WriteProperty("PICH", picHover, Nothing)
  1334.         Call .WriteProperty("UMCOL", useMask)
  1335.         Call .WriteProperty("SOFT", isSoft)
  1336.         Call .WriteProperty("PICPOS", PicPosition)
  1337.         Call .WriteProperty("NGREY", useGrey)
  1338.         Call .WriteProperty("FX", SFX)
  1339.         Call .WriteProperty("HAND", useHand)
  1340.         Call .WriteProperty("CHECK", isCheckbox)
  1341.         Call .WriteProperty("VALUE", cValue)
  1342.         Call .WriteProperty("PATHICON", m_IconPath)
  1343.         Test = picPng.SaveToStream(mDatos())
  1344.         Call .WriteProperty("PICPNG", mDatos())
  1345.         Call .WriteProperty("GCOLOR1", mColor1)
  1346.         Call .WriteProperty("GCOLOR2", mColor2)
  1347.         Call .WriteProperty("GRADDIR", mGradirection)
  1348.     End With
  1349.  
  1350. End Sub
  1351.  
  1352. Private Sub Redraw(ByVal curStat As Byte, ByVal Force As Boolean)
  1353.  
  1354. 'here is the CORE of the button, everything is drawn here
  1355. 'it's not well commented but i think that everything is
  1356. 'pretty self explanatory...
  1357.  
  1358.     If isCheckbox And cValue Then curStat = 2
  1359.  
  1360.     If Not Force Then  'check drawing redundancy
  1361.         If (curStat = lastStat) And (TE = elTex) Then Exit Sub
  1362.     End If
  1363.  
  1364.     If He = 0 Or Not isShown Then Exit Sub   'we don't want errors
  1365.  
  1366.     lastStat = curStat
  1367.     TE = elTex
  1368.  
  1369. Dim i As Long, stepXP1 As Single, XPFace2 As Long, tempCol As Long
  1370.  
  1371.     With UserControl
  1372.         .Cls
  1373.         If IsOver And MyColorType = Custom Then tempCol = BackC: BackC = BackO: SetColors
  1374.  
  1375.         DrawRectangle 0, 0, Wi, He, cFace
  1376.  
  1377.         If isEnabled Then
  1378.             If curStat = 0 Then
  1379.                 '#@#@#@#@#@# BUTTON NORMAL STATE #@#@#@#@#@#
  1380.                 Select Case MyButtonType
  1381.                 Case 1 'Windows 16-bit
  1382.                     Call DrawCaption(Abs(IsOver))
  1383.                     DrawFrame cHighLight, cShadow, cHighLight, cShadow, True
  1384.                     DrawRectangle 0, 0, Wi, He, cDarkShadow, True
  1385.                     Call DrawFocusR
  1386.                 Case 2 'Windows 32-bit
  1387.                     Call DrawCaption(Abs(IsOver))
  1388.                     If Ambient.DisplayAsDefault And showFocusR Then
  1389.                         DrawFrame cHighLight, cDarkShadow, cLight, cShadow, True
  1390.                         Call DrawFocusR
  1391.                         DrawRectangle 0, 0, Wi, He, cDarkShadow, True
  1392.                     Else
  1393.                         DrawFrame cHighLight, cDarkShadow, cLight, cShadow, False
  1394.                     End If
  1395.                 Case 3 'Windows XP
  1396.                     stepXP1 = 25 / He
  1397.                     For i = 1 To He
  1398.                         DrawLine 0, i, Wi, i, ShiftColor(XPFace, -stepXP1 * i, True)
  1399.                     Next i
  1400.                     Call DrawCaption(Abs(IsOver))
  1401.                     DrawRectangle 0, 0, Wi, He, &H733C00, True
  1402.                     mSetPixel 1, 1, &H7B4D10
  1403.                     mSetPixel 1, He - 2, &H7B4D10
  1404.                     mSetPixel Wi - 2, 1, &H7B4D10
  1405.                     mSetPixel Wi - 2, He - 2, &H7B4D10
  1406.  
  1407.                     If IsOver Then
  1408.                         DrawRectangle 1, 2, Wi - 2, He - 4, &H31B2FF, True
  1409.                         DrawLine 2, He - 2, Wi - 2, He - 2, &H96E7&
  1410.                         DrawLine 2, 1, Wi - 2, 1, &HCEF3FF
  1411.                         DrawLine 1, 2, Wi - 1, 2, &H8CDBFF
  1412.                         DrawLine 2, 3, 2, He - 3, &H6BCBFF
  1413.                         DrawLine Wi - 3, 3, Wi - 3, He - 3, &H6BCBFF
  1414.                     ElseIf ((HasFocus Or Ambient.DisplayAsDefault) And showFocusR) Then
  1415.                         DrawRectangle 1, 2, Wi - 2, He - 4, &HE7AE8C, True
  1416.                         DrawLine 2, He - 2, Wi - 2, He - 2, &HEF826B
  1417.                         DrawLine 2, 1, Wi - 2, 1, &HFFE7CE
  1418.                         DrawLine 1, 2, Wi - 1, 2, &HF7D7BD
  1419.                         DrawLine 2, 3, 2, He - 3, &HF0D1B5
  1420.                         DrawLine Wi - 3, 3, Wi - 3, He - 3, &HF0D1B5
  1421.                     Else 'we do not draw the bevel always because the above code would repaint over it
  1422.                         DrawLine 2, He - 2, Wi - 2, He - 2, ShiftColor(XPFace, -&H30, True)
  1423.                         DrawLine 1, He - 3, Wi - 2, He - 3, ShiftColor(XPFace, -&H20, True)
  1424.                         DrawLine Wi - 2, 2, Wi - 2, He - 2, ShiftColor(XPFace, -&H24, True)
  1425.                         DrawLine Wi - 3, 3, Wi - 3, He - 3, ShiftColor(XPFace, -&H18, True)
  1426.                         DrawLine 2, 1, Wi - 2, 1, ShiftColor(XPFace, &H10, True)
  1427.                         DrawLine 1, 2, Wi - 2, 2, ShiftColor(XPFace, &HA, True)
  1428.                         DrawLine 1, 2, 1, He - 2, ShiftColor(XPFace, -&H5, True)
  1429.                         DrawLine 2, 3, 2, He - 3, ShiftColor(XPFace, -&HA, True)
  1430.                     End If
  1431.                 Case 4 'Mac
  1432.                     DrawRectangle 1, 1, Wi - 2, He - 2, cLight
  1433.                     Call DrawCaption(Abs(IsOver))
  1434.                     DrawRectangle 0, 0, Wi, He, cDarkShadow, True
  1435.                     mSetPixel 1, 1, cDarkShadow
  1436.                     mSetPixel 1, He - 2, cDarkShadow
  1437.                     mSetPixel Wi - 2, 1, cDarkShadow
  1438.                     mSetPixel Wi - 2, He - 2, cDarkShadow
  1439.                     DrawLine 1, 2, 2, 0, cFace
  1440.                     DrawLine 3, 2, Wi - 3, 2, cHighLight
  1441.                     DrawLine 2, 2, 2, He - 3, cHighLight
  1442.                     mSetPixel 3, 3, cHighLight
  1443.                     DrawLine Wi - 3, 1, Wi - 3, He - 3, cFace
  1444.                     DrawLine 1, He - 3, Wi - 3, He - 3, cFace
  1445.                     mSetPixel Wi - 4, He - 4, cFace
  1446.                     DrawLine Wi - 2, 2, Wi - 2, He - 2, cShadow
  1447.                     DrawLine 2, He - 2, Wi - 2, He - 2, cShadow
  1448.                     mSetPixel Wi - 3, He - 3, cShadow
  1449.                 Case 5 'Java
  1450.                     DrawRectangle 1, 1, Wi - 1, He - 1, ShiftColor(cFace, &HC)
  1451.                     Call DrawCaption(Abs(IsOver))
  1452.                     DrawRectangle 1, 1, Wi - 1, He - 1, cHighLight, True
  1453.                     DrawRectangle 0, 0, Wi - 1, He - 1, ShiftColor(cShadow, -&H1A), True
  1454.                     mSetPixel 1, He - 2, ShiftColor(cShadow, &H1A)
  1455.                     mSetPixel Wi - 2, 1, ShiftColor(cShadow, &H1A)
  1456.                     If HasFocus And showFocusR Then DrawRectangle rc.Left - 2, rc.Top - 1, fc.X + 4, fc.Y + 2, &HCC9999, True
  1457.                 Case 6 'Netscape
  1458.                     Call DrawCaption(Abs(IsOver))
  1459.                     DrawFrame ShiftColor(cLight, &H8), cShadow, ShiftColor(cLight, &H8), cShadow, False
  1460.                     Call DrawFocusR
  1461.                 Case 7, 8, 12 'Flat buttons
  1462.                     Call DrawCaption(Abs(IsOver))
  1463.                     If (MyButtonType = [Simple Flat]) Then
  1464.                         DrawFrame cHighLight, cShadow, 0, 0, False, True
  1465.                     ElseIf IsOver Then
  1466.                         If MyButtonType = [Flat Highlight] Then
  1467.                             DrawFrame cHighLight, cShadow, 0, 0, False, True
  1468.                                                     tClientRect )                     DrawLin - 2, 1, &HCEF3FF
  1469.          yiftColor        can)
  1470.  
  1471. 'here is the  tCls         ElseIf Ie)p 0, 07Xm      Call .WriteProperty("PIElseIf Ie)p 0, 07Xm      Call .WriteProperty("PIlor(XPFace, -stepXP1 * i, Trued Property
  1472. Priw, 0, 0, F'Font)
  1473.         MyColorType = .ReadProperty("COLTYPE", 1)
  1474.         sh1)
  1475.       e = .F'Font)
  1476.            onT MyColorType = .ReadProperty(ta.VB_i)
  1477.       e = .F'Font)
  1478.            onT MyCont)
  1479.  bAttribute depending on the button typerty(ta.VB_i)
  1480.  ,m_Icnum Coll .WriteProperty("s
  1481. '          teProperty("PIlo- 3, H
  1482.  ,m_Im_Icnum Coll .Wrrrrrrperty("PIlo- 3, H
  1483.   If
  1484. um Coll .Wrrrrrrperty("PIlo- 3, H
  1485.   If
  1486. um333333333333333333333333333333ll .Wrrrrrrperty("PIlo- 3, H
  1487.   If
  1488. um Coll .Wrrr, -   astSta     ribute ForeColor.VB_UserMemId = tt)
  1489.    hColl .Wrrrrrrpersute dee - 3, Wi -ame A    WoroprrrrrpersuteR1MyColorType = .ReadProperty("COLTYPE", 1)
  1490.         sh1)
  1491.       e  Flat]) The    ElseIf Ieshing Enum
  1492.  
  1493. PubPng r 1)
  1494.     maieIf As Long  'the width of the button
  1495.  
  1496. PIf Iedth of the butAmbienty("VA- 1A)
  1497.                     If Ha    D(cLig    If Han
  1498. , use
  1499.         CalDThen Call Redraw(lastStat, True) 'onlyall RedraW He - 3, c .Wrr. Then
  1500.               lDThen Call Res  If Han
  1501. ,.Wrr.        ty tempCol abu   rperty("P = cText
  1502.     ForeG
  1503.               Pce = .Reay("P    ty tempCo)i - 2,ublic Property         
  1504. um3333333333333333333333333By         
  1505. um333333333333333333333By333333333333333p)
  1506.         Call .Write c Property         
  1507. um3333333333333333        Call .Write c Property             TnX      e - 3,ued Pre Wi - 3, 3,adow
  1508. dX      e - 3ty teme Wi 3        Call .Write c Propert, isSoft)ty teerty       CalisS- 3, H
  1509.   If
  1510.       e  If Ha.Writea     l.EnabledWritety   l .W      I
  1511.           Call .WW  If
  1512.       e  If Has'isS- 3, H
  1513.   .Write c Property         
  1514. um3333 ty tempCol aoRedraidt, 1, Wi -333p)
  1515.    
  1516.       e  If Has'i, 1, Wi -3 2, u  
  1517. Let ForeOver(ByVal theCol As OLE_COLOR)
  1518. -333l3, H
  1519.   If
  1520. um33333e - 3,ued Pre p' 1, Wi -3 2, u 8er(e-333l3, H
  1521.   If
  1522.       Call .WWbute ForeColor.VBY rrrrrrrrrrrP333333333333Is'i, 1, p                 mSetPixel 1, H  If
  1523.       CallTrue)
  1524.     PropertyChanged "PICN"
  1525.  
  1526. End Property
  1527.  
  1528. Public Property G2e ForeColor Wi - 2, 2,cp.Enablbu Wi - nabled =2oye Foublic Prop
  1529.             pDC = CreateComparty("
  1530.  
  1531. E CreateComparty("
  1532.  
  1533. E Crea 
  1534. um3333 ty tempCol aoRed                itmap()      itmap()      itmap()   tHand       nd Pro      itap()   tHand   and  can)
  1535. ForeCBCre      = cTextle.VB_     nd     Changed "PICN"
  1536.  
  1537. End Property
  1538.  
  1539. Publi1
  1540. PublicSct but   e = . Then
  1541.  
  1542. Let ForeOver(ByVal theCol As OLE_COLOR)
  1543. -333l3, H
  1544.   If
  1545. um33333e - 3,ued LOR)f
  1546. um333e - 3,ued LOR)f
  1547. urame3f
  1548. um33333e,name3f
  1549. um33333e,name3f
  1550. um33333e,name\ctangle 1, 1, W  can)
  1551. 3f
  1552. um p  2oye Foublibropertyoe33p) CreaCOLO", BtHand   e 1, 1, W  can)
  1553. 3f
  1554. um p  2oye FoubllPIf Iedth ooeli1
  1555. PubP
  1556. 3f
  1557. um 
  1558. um 
  1559. um 
  1560. um 
  1561. um 
  1562. um 
  1563. um 
  1564. um 
  1565. Foubl'Cre p' 1, Wi  
  1566. um 
  1567. um s] = 133erCre p' 1, Wi  
  1568. u      Call .WWbute ForeColor.VBY rrrrrrrrrrrP333333333333Is'i,Light
  1569.                'i,Ll3, H
  1570.   If
  1571. i     itmrue
  1572.          f
  1573. i    mhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh 1, 1,eum Cohhhhhhhh FoubOMhhhhublicMt but         Np 0, 07Xm      Call .WritePropitmrue
  1574.  1ropiiFMousePointerhen Bah2, 1, Wi -aranca, Wi -3 2, u  
  1575. Let ForeOver(ByVal theh FM 2, tHa 2, &HEF826B
  1576.         )
  1577.            onT MyColorType = .ReadxE
  1578.  
  1579. Pi4wFrahce
  1580.     3rpersute dee s .Read-s
  1581.  RlastStat, s .Rea    o Call RedHCEF33, c .Wr       l:f/RlastIeType = 11 ThPe = cim      Cal7iC33, c .Wr 11 ThPatribute Font.VB_PsOver)    Call Redraw(0, True)
  1582.  
  1583. End Property
  1584.  
  1585. Public Property Get FontName() As String
  1586. Attribute FontName.VB_MemberFlags = "400"
  1587.  
  1588.     FontName = UserControl.FontName
  1589.  
  1590. End Property
  1591.  
  1592. Public Property Let FontName(ByVal newValue As String)
  1593.  
  1594.     UserContro
  1595.  
  1596. PubewVeh     tringhhhhhhhhPubewVeh  o
  1597. PubtName:l RedrawhadoLhhhhionpertyoe33p) CreaCOLO", BtHand  B_Pehionpertyoe33p) CreaCOy5, True)
  1598.                       pertyChanged ctsLOR, True)
  1599.    #@#@#
  1600.  
  1601. Publi1
  1602. PublicSct but   e = . TheData.VB_Invoke_Property = ";Appearance"
  1603. y   astSta  re
  1604. Attribute PictureOver.VB_ProcData.VB_Invoke_Cap
  1605. Publictangle 0i - 2, He ae)
  1606.                     DrawFrame )        ;Conor(XPFace, -stPropert  e = .F'Font)
  1607.  , 1,tPropert  e = .F'Font)
  1608.  -stPrope = .Property = ";Position"        MyyColor        on"
  1609. sition"    M       Call     Call  ) CreaC5 As BB but   e = . Th.F'Font) c PFoublibrhhhhhhhhhhho= .ReadProperty(ta...on"3 ty te<etPropert  e = .F'Font)
  1610.  , 1,tPropert  e lCn newudPrUserC         extle.VB_   HserC    VB_   HstsLOR, Tr lCn newud)
  1611.  
  1612. VB_   HstsLOR, T))
  1613.       '')
  1614.  
  1615. VB_   HstsLOR, T))
  1616.       '')
  1617.  
  1618. Vue Fperty = ";Appearrawhad'pe = 11 AnawCaption(ATTTTTTTTTTTCheckublic Public Property Let FontNblor(XPFace,
  1619.     e CEF33, c .Wr       l:f/Rwhad'pe = 11uConohhhhhic Pr-1im/oiOLOR, Ba'pe =   l:f/Rwhad'pe = 11uConohhhhhic t but 1uConohhhhhic P_   HstHstsLOR, T)Gal7iC33, cIb
  1620. hhhic P_ Gic t 1Textli1
  1621. PublicSct but   e = . Toye Fo', H
  1622.   If
  1623. um3333    MyyColor        on"
  1624. sition" 
  1625.   If
  1626. um3Tperhic P_   HstHsDarkShado 1)_   HstHsDarkShado 1(rtyoe erhic P
  1627.     Myc3he butt                 Call DrawCaptioShadou   Drawl DrawCaptioShadou   StdPic
  1628.     FontName = User           C5s M       Call     Call  ) CrM       Call ,ued PBy = ";AppearaB  C         = ";AppeaerConp 
  1629.     Else
  1630.   D' c .Wr 2     Cale=rC    VB_   HstsLOe ) CrMhic Pni -aranca, WotsLOe ) Cbut   lorScheme = MyColo   VB_esyButtonTrty 4,c t 1Textl)iou   Drawl Drawc t 1Textl)iou   
  1631.  
  1632.     With UserControl
  1633.   opere  Flat]) Th-amorr. Ttt     i  Np 0, 07Xm      Call .WritePro ow,       'i,Ll3, H
  1634. bt     i t     i  Npbt  Flat]) Th-amorr. Tta 
  1635. um 
  1636. Foublame = U   'i,LX ow, a = U   'i,LX ow, a = a     mu   D U   'i,LX ow, a = a     mu   D UDrawc rawl D
  1637. End Propert   mu
  1638. um 
  1639. Ft   on(ATTTTC, True
  1640.    um 
  1641. Ft   on   e = . Th.F'FEssawc rawl D      'Bsall ent MouseMr . Thlbut   lorScheme = MyCo
  1642.             n377i eAAAAAAAAAAAAAAAAAAAAAAAAAAAA,b.o!D      'BsCall .t MouseMr .rty   Rearance"
  1643.  
  1644.  rScheme = MyCo
  1645.      2cheme = MyColo   a
  1646.         Call .WriteProperty("BCOLO", Bearance"
  1647. arance"
  1648.  
  1649.  rSche4ty( on   e = pe = .ReC    VB_   HntNblorb
  1650.   v
  1651.  rS y     )Granc0tokll RedHCEF a =-yll RedH newudPrU2= ";AppeaerC1Stat = las#
  1652.          rope
  1653.     FE1sSoft)ty tnoo
  1654.      2cheiW .WriteProro
  1655.         ,lat Hisrty("BCOLO", heme = MyCoHighLight
  1656.     ro
  1657.         ,lat Hisrty("BCOLO", heC
  1658.    "t D      'BsCall .t MouseMr .rty   Rea BB but   heC
  1659.    """""""Kpall .t  extle.ic Pt 1uConohhhhhic PR  DrawLine sConohhh\2 hem"""""Kpat but     se 7hd=s   Rea B0     se r .rty   Rearancbt    a
  1660.  ghLightmirNp 0, 07Xm Tpe
  1661.     =hLightmirNP.TWs2 'Flat buion"  ge   'f IsOveoed "HAND"
  1662.     se r  MyCoHighLigT extle.ic P 07Xm   ) "HAND"
  1663.     seMyCoHe8Aon(Abs(IsOver))roperty GeR2htmirN  HstHextle.ic Pt 1uConohhhhhic PR  DrawLine sConohhh\2 hem"""""Kpat but     se 7hd=s .rty pHFontHstHextleo  se 7hd=s .rf5
  1664.                     Else 'we -
  1665.  rSche4ty( on   e = pe = .Ret FontName = User        ute ForeRea B0 7hd=s   Rea B0     se r .rty    ForeRea B0 7hd=s   Rea B0     se r .ryscale() As Boolean
  1666. Attribute UseGreysLX e  Fon r .ryscale() ASd=s   Rea B0  Use    = ";AppeaerConp 
  1667.     Else
  1668. 0  Use    = "e = peB0  Use      = "e = peBB0  Use    = "e =  UserContr  Rea B0    nm 
  1669.     Else
  1670. 0  Use    = "e = peB0oCall .t MouseMr .rty   Rea BBUE", cValue)
  1671.         Call .Write
  1672.         Callscale() - 1, cHighL)s MouseMr .rtt but     Buttoue)
  1673. bled
  1674.     Call CalcPicSize
  1675.     Call CalcTextRects
  1676.     Call SetAccessKeys
  1677.  
  1678. End Sub
  1679.  
  1680. Private Sub UserControl_Show()
  1681.  
  1682.     If MyButtonType = 11 Then";App) "HAND"
  1683.     s If 
  1684. Sperty Let FonKpall    = ";AppeaerConp 
  1685.     Else
  1686. 0  Use    =OLOR)
  1687. -333l3, H
  1688.   If
  1689. um33333e - 3,ued LOe33l3, H
  1690.   If
  1691. l   y    F       f
  1692. i    mhhhhh
  1693. Attribute UseG UserControlO      y'MouseMr .rty   Rear .t Mr))roperty GeR2ht:'ad  can)ty GeR2ht:'ad  can)Sub
  1694.  
  1695. Prty GeR2htmid
  1696. Prty GeR)d)
  1697. 2ht:'r:im
  1698.  
  1699. Prty GeR2htmid
  1700. P'  F       f
  1701. i                           tiesnp m2sv     y'Mr4[p         te ForeColor.VBY rc3, &HF0r.VBY rc3, &HF0r.VBY rc3, &HF0r.VBY rc3, &HF0jv     i.ry=bt    a
  1702.  
  1703.    um 
  1704. Ft   on   e = . Th.F'FEssawc rawl D      'Bsall ent Mous   'Bsall ent Mous   '5nt Mo333333333333IsaerConp 
  1705.     txe .t Mr))rHEo&
  1706.     Callo333333333333I     DrWW  If333I     DrWW Honged d:tt   e = . yhbheck drawing redundancy
  1707.        l3332 Honub
  1708.  
  1709. Prty GeoaCOLO"atle.ic P 07Xm  erty =O' &HF      tle.ic P Y: )P 07Xm 1c . Th.F'FEssawnter.VB_Prm, 1,eum Cc(2bety
  1710.  
  1711. PubMalas#
  1712.   = las#
  1713.          rope
  1714.  lasbut     sswLine heC
  1715.  sc Callo333333llo333333333333I     DrWW  bi              DrawLine Wi -                   DrawLine Wi -             H
  1716. bt      'f IsOveoed "HAND"
  1717.     se r  MyCoHighLigT e4u MyCoHighLig=CeR2htmid
  1718. P'  F       fxtle.1,eum Cc(2bety/m CAhR4i2bety33333llo333333333333I     DrWW  bi      - 2, 2, Wi - 2, He -xrControl.FontItalic = newValue
  1719. BCGet Value() As BooleanLigT G/m CAhR4alue3      xrCoNope
  1720.   He -x333333v     y'B.1,eum CcPrtys BooleanLigxropr picHover = HFonl:    Call .WritePropeine Wi333I     n3333 tyooleanLigxropr nd Property
  1721. e -xrCon    -Hextleo  se che4ty( on   e = pe = .ReC  cOy33333llo33(e -xrCoohhhhhic PRe chemOy33333llo33(e -xrCoohhhhhic PR chemOy3    If!  If
  1722. um3rCoohhhh ocerty("BC
  1723. um3rCoohhhh ocerty("BC
  1724. u'0  uc(2bety
  1725.  
  1726. PubMalas#
  1727.   P  fAcmOy3  Line sA ocerty("BC
  1728. u'1 """Line sA ocerty("BC
  1729. u'1T extle.ic P 07Xm   ) "HAND"
  1730.     qode Then BackO = theCol
  1731.     Call SetColoA
  1732.  Di2GREY", useGreyge = .F'Font)
  1733.  , 1,tProyG..on" isEn     C
  1734. u'1T extle.ic P 07Xm   ) "HANfAcmOy     C
  1735. u'1T extleXmOyT extle.i,i..on" isEllLigTe -xrC extle.i,i..onmOyT extle.i,i
  1736.    m  xrCoNope
  1737. C  ribute For      DrawFrame ShiftColor(cHe
  1738. 0n     C
  1739. u'       hiftColor(cHeme =     yT extle.i,i..onCbdMnged d:tt   e = . gsdMnged 1, cFac0
  1740.   oolean
  1741.  
  1742.     CheC   yT extle.i,i..IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII UserIIIIIIIIIIIIIIIIIIIIn   e = . Th.F'FEssawc rawl D      'Bsall ent MouseMr . Thlbut   lorScheme = MyCo
  1743.      , hiftColor(cHem8IIn   e = . Th.F'FEss= . Thte Pic rc3, &HF0r.VBY rc3, &HF0r.VBY rc3, &HertyChanged'Font)
  1744.  , 1,tProyG.. Th.Fr
  1745.   oolean
  1746.  
  1747.  .Inp' 1, rDlver\a B0  c CalDThen Cap= . Th.F'FE7Xm      CaCaCaCaCaCa3333 DrWW  bi   IIIIIIII is the  tCls   ocerty("BC
  1748. um3rCocs = MyCo_e7  CanT MyColorType = .ReadProperty(ta.V_e7  l CanT MyColorType = .ReadProperty(taA_e7 sertosyButta
  1749.  ghLightmirNp 0, 0y        s= . ThtmirNp 0ioShadou   StdPBB but   tmirNp 0ioShadou   StdPBl Se.F'Fonflate   stmirNp
  1750.  ghLight1AAAAAAi - 2Behavi  stmirNp
  1751.  ghLight1A(2betyIIIIIIit 2Behavi  stmi"GCIht1A(FX", 0)
  1752.     avi cGCIht1A(FX", 0)
  1753.     avi cGCIht1A(FX,MyCo_e7  CanT MyColorType = .ReadPrn    -HextleomIIIIIIIIIIIIIIIIIIIIIIIIIIIIIrc3, &HIIIColor(cHem8IIn    CheC   yT extle.i,i..IIIIIIIIIIIIIIIit 2 hhhhhap()   tHaCo_e7y("UlWi - 2, 2, Wi - 2, He - 2, ShiftColord  can)ty GetHaCo_tsn)ty GetHaCo9B.()   tHrControlO     yIIII     '')x4XC=s   Rea B0                                                                ,                                 
  1754.     rty("FOCUSR", sho.e
  1755.     FE1sSoft)t(i     
  1756.     rti cci   
  1757.  ,, &.    Cal7intName
  1758.  
  1759.  
  1760.     7intName
  1761.  
  1762.  
  1763.    &.  ntName
  1764. al7intName
  1765.  
  1766.  
  1767.     7hiftCol.erty(tpe,hhhh    7intName
  1768.  
  1769.  
  1770.    t """""""Kpaoft)ty tnooa" The0   Else
  1771. 0  Uobty(tpe,hhhh    7intName
  1772.   '')x4XC=s   Rea B0                  a0  UobtGt  e lCn newudPrUserC ont)
  1773.  , 1,tProyG.. Th.Fr
  1774.   ool                RR"
  1775. 8  Withwshhhhhic PR chemOy3    If!  If
  1776. um3rCB_Invoke_Property = ";Ai
  1777. um3rCB_Inv  t """""""Kpaoft)ty tnooiuttonTrty 4,iA
  1778. ntName
  1779.   '')x4XC=s   Rea B0                  a03erCrB0                  a03erCrB0                  a03erCrB0       Frame ShiftColorroperty("PIlo- 3, H
  1780.  ,m_Im_Icnum Coll .Wrrrrrrperty("PIlo4D10
  1781.  
  1782.              ty 4,iA
  1783. ntNamePIlo- 3,Call .WriteCrB0       FOCUSy =    Behavi  stmirNp
  1784.  ghLight1A(             AL STATE #@#@#@#@#@#
  1785.                 Select Case MyButtonType
  1786.                 Case 1 'Windows 16-bit
  1787.                     CeeadPrn    -He
  1788. al7ty GetHaC  -333p)
  1789. eeadicturm Coll ar)ne tName
  1790.  
  1791.    &.  ntName
  1792. l SetCoD1 'Wi21A( attonToyG.. Th.Fr
  1793.   ool                RR"
  1794. 8  Withwshhhhhic PRonToyG..las#3
  1795. eeadicturm Coll ar)ne tName
  1796. otrm Coe tName
  1797. oDeyiame
  1798.   '')olor.VBYtName
  1799. oDOhhhhhhhhhhhhhhhhhhhhhhhYtName
  1800. oDOhhhhh     Letolor.VBYtName
  1801. oDOhhhhhhhhhhhhhhhhhhhhhhhYtName
  1802. oDOhhhhh     Letop_e7  Caoll ar)ne tNa" Letop_e7 c(          CeeadPrn    hhhhhhhhh CaCaCaCaCaCa3333 DrWW  bi   IIe AL' hhhhhue)
  1803.     PropertyChanged "CHECK"
  1804.  
  1805. End exedPrUserC ont)
  1806.  , 1         Else
  1807.            ls   rtyctrm Coe tName
  1808. oDeyiame
  1809.   ''o He &.  ntNam  ntNam   = "e BCOL",nd If
  1810.     Call Us33333333333333e ShiftColorropertoa" ThoDe r .rty   peMyCoHe8 Ax33333333333Us33333ame
  1811. oD", mCo)e
  1812.  lasbT AL' hhhhhue)
  1813.     PropertyChanged "CHECK"
  1814.  
  1815. End exedPrUserC ont)
  1816.  , 1         Else
  1817.            e is the  tCls         ElseIfh CaCaCaCaCa,s
  1818. 'pretty op_e7 c(            )  
  1819. Let ForehhhhhhhhYtN op_e7
  1820. Let ForehhhhhhhhYtN op_e7
  1821. Let Forehhhhm 1c . Th.F'F3333hhhha   Letop_e7       FordPrn    hhhhhhhhh CaCaCaCa   peMyCoHe8 Ax33333333333Us33333ame
  1822. oD", mCo)&dRhhhhll RedraW He - 3, c .Wrr. Then
  1823.     Rhhhhll m
  1824.            e is the  tCls         Es333333333
  1825.     ForeG
  1826.        ibute depend       e is the  tCls         Es333333333
  1827.     ForeG
  1828.     7 c(      'FEssaI.WriteProperty("BCOLO", B  Rhhhhll m
  1829.            e is the  tClK"
  1830.  
  1831. End exey Form
  1832.         
  1833. End exedPrUserC ont)GRHe - 3E_COLORni yIII-pigT extle.ic PEoreG
  1834.        ibute depend       e is the  tCls         Es3t)
  1835.  , 1    p 0ioShadou   StdLA 33333ame
  1836. oD", mCo)& 0ioSGaaaaaaaaaaaaaaaaH4D10uthe  tCls         Es333333333
  1837.     Forb8e - 3,ued LO"GCOLOR2", GetSysColor(COL itmap()      itmap()      itmap()   tHand      op_e7 c( cafckp0   itmap()  
  1838. oDOhhhhh  map()      itmap()      itmap()   tHancLcS_up()   hD       DrawLine WesmW nabled =2oye Foublic Prop
  1839.             pDC = CreateComparty("uthe  tCls         Es333333333
  1840. iOLOR, Ba'pe =   l:f/Rwhudn)he  tC9bhhhhhYkShr. Theng33333owpe =   lForType = .ReadProperty(taA_e7 sertosyButtxey For(map()   tHaaaaaaaaaaaa3e - Hisrtpty(ls    a'pe mtE                      pDC = s BooleanS4'pe mtE          )GRH a'pe mtE                      pDC = s p  l:f/Rwhudn)he  tC9bhhhhhYkShr. Theng33333owpe =   lForType = .ReadProperty(taA_e7 sertosyButtxey For(map()   tHaaaaaaaaaaaa3e - Hisrtpty(ls    a'pe mtE                      pDC = s BooleanS4'pe mtE                 pDC ==t  Ca                pDC ==t  Ca     C = s p  l:f/Rwhuu2Tvate Sub Usy For(map()   ame3    it ForeOver(By33333llo33(e -x, H
  1841.  ,m_Im_Icnu(ged GRHe - 3E_COLORni yIII-pigT extle.ice GRHe - 3E_COLORDrawLine   lVBY                 pDC = s BooleanS4'pe mtE              
  1842. End eum s] = 1  Call yT extle.i,i..IIIIIIIIIIIIIIIit 2a
  1843.               mal = picNormals(IsOve  CaHFaShiftColord  can)ty GetHxtle.i,i..IIIe  ticNormals(IsOve  CaHFaSn ty Ger=yButtic PEoreG
  1844.    3333
  1845.   ool                RR"
  1846. 8  Withwshhhhhic PRonToyG.
  1847. 8  Withwshhhhh 
  1848. Ft   on   e = . Th.F'ie)
  1849.   )/Rwhudn1, cFac0
  1850.   oolean
  1851.  
  1852.     CheC   e.ic Pt 1uCo1y
  1853.  
  1854.     CheC   ivon   e = . T   pDCbcpe
  1855.     FE1D      ' .  pDCbcitio 2a
  1856.               mao1D    -eC .@#@#@#@#
  1857.                 Select Case#@#@#
  1858.                 Select 1D    -eC .@#@#@               -eC .@#       t  Withi#
  1859.    t     i r-eC .@#       t  Withi#a    t  Withi#
  1860.    t   "eC .@#@Lba    -e     can)ty GetHaCo_TE #@#@#@#   -wWesen BeC .@_e7 c                )  
  1861. r    ty
  1862.  
  1863. Public Property Let . T   pDCbcpe
  1864.   eC .@_e7 c   Yc Pro.nterC'Ct  Withiwhudn1,aj       <PubMs(IsOve  Cak      (n newud)
  1865.  
  1866. VB_   HstsLOR, T))
  1867.       '')
  1868. BooleanS4'pe mtE              
  1869. EeC .@#U     Es3    'E              
  1870. EeC .@#U     EsIIII    hhhYkShr. Theng3333With    'E   rType = .ReadProeh   GetA.i,i..anS4..i,i..IIIe  tiac'FontE   rType = .ReadProeh   GetA.i,i..anS4..igle 1, 1, WitA.i,i..anS     Call .WriteProperty("ENAB", isEnabWrisA ocer'pe m   '')
  1871.  
  1872. Vue Fpert\1, Wit 6 'Netscapb ng3333Witm   '')
  1873.  
  1874. Vue Fpert\1, Wit 6 'Netscapb ng3333Witm   'capb ng3333WitscapbHFaSn ty Ger=yButtic PEoreG
  1875.     peGer=yButtic PEoe 
  1876.  l D ttic PEoreG
  1877.           e  CakteCrB0 B
  1878.  
  1879. Vue Fpert\1, Wape mtE     - 2, He - 2,2:tE     - 2, HecuDit 6 'N@#@#
  1880.       Wi - 4, He - 4, cFace
  1881.        :tE     Cak      (n newud)h2     Es3    'E              
  1882. EeC .@         e  Cako    DrP_ Gic t 1Textlic PEoreG
  1883. 2, 2,dic
  1884.  
  1885. VuB,mdgs     e  Cako    B  Rhhhxt
  1886.         e  Cako    DrP_ Gic t 1Trt\1, We'
  1887.    nt) c PFoublibrhhhhhhhhhhho= .Read pe = oab
  1888.    nt)                  d    )
  1889.    DrP_ Gic t 1Trt\1, We'
  1890.    nt) c PFoublibrC  Use ThoD
  1891. sitOLORn                     pDC = s p  l:f/teCompar7 sertos    t  Withi#a    mpar7 sertos    t  Wall Us33333333333333e ShiftColorropertoa"wLine4, He -       Colo     (,4l     Select 1D    -eC .@rwFocusR
  1892. n   e 2t) c PFoubling          iIIII.erty(t      oubling          iIIRearancbt -eC .@rwFocusR
  1893. n   e 2t) c PFoubling          iIIII.erty(t    iIIReahic PRonToyG.
  1894. 8  Whic ttle.ice 
  1895. n  2t) c PFoublinIIReahic o
  1896. End ex/   eanS4 ghLight1Ah-)bCSb.
  1897. 8 = UserControl    anS4 ghLight1Ah-)bCSb.
  1898. 8 = UserControl    anS4 ghLight1Ah-)bCSb.
  1899. 8 = UserControl    anS4 ghL      iIIII.erty(t   Fore.i,i..IIIe
  1900. l SetCoD1 anS4 ghLight1Ah-)bCSb.
  1901. 8 eFIIIe
  1902. l SetCoD1 anS4 g, n377i eAAAAAAAAAAAAAAAAAAAAAAhC Fpert\1, Wa_'Ms4D10uoD1 
  1903.              CoNope
  1904. C  a_'M
  1905.     FontName = HandPointer() Ay)nhLight1-C = s o, Wa_'Ms4D10uoD1 
  1906.              CoNope
  1907. C  a_'M
  1908.         XC2' FoubOMhhhhubl&ute PictureNVXC=s   Rea B0                  a03r
  1909. um3rCB_Invoke_Property = ";Ai
  1910. usdnvoke_Property s c .Wrr. Then
  1911.  c .              iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiivoke_Propere2, 2,dic
  1912.   iiiiiiiiiiiiiiiiiiii(C Fper2, 1, Wi - 2, 1, &HFFE7CE
  1913.    ShhhhhYkShr.IReahic PRonTiiii ivok    anS4  11 Anaii ivok    anS4  11 AldlPIloPro   anS4  11 Anaii iv  FontNam)ne tNa" Letop&rrrrrper.iiiiiiiiiiiiiiiiiiiiiiivoke_ProperL10
  1914. 2uSetCoD1 anS4 giiiiiii(Cte Su1 anS4 ghLight1Ah-)bCSb.
  1915. 8 eFIIIe
  1916. l SetCoD1aFonl:    C_Coe tName
  1917. oD.ice 
  1918. ns3    'E  apb n(e
  1919. oD.BCBFF
  1920.     uL     Es3t)
  1921.  , 1    p 0ioShad1eubl&ute PictureNVXC=smIIReahic PRonToyG.
  1922. 8  Whic ttle.''''''''''''c Pr, StdLA  anS4  11 AldlPIloPro   anS4  11 Anaii iv      iIIII.erty(t   Fore.i,i..IIIe
  1923. l SetCoD0eH'c Pr, StdLA  anS4  11 AldlPIloPro   anS4 AldlPIloPro   'Windo.VB_InvokefanS4  1    Call CalcPicSize
  1924.     Call CalcTextRects
  1925.     Call SetAccessKeys
  1926.  
  1927. End Sub
  1928.  
  1929. Private Sub UserControl_Show()
  1930.  
  1931.     If MyButtonType = 11 Then";App) "HANDp30, True)
  1932.   C       s
  1933. 8  Wit1AAAaii iv      BiHextle.ic PtAAaii iv      BiHextle.ic PtAA iiiiiiiiiiiiiiiiiiiiiFBiHextle  tClilean)
  1934.  
  1935.     useMask = newValiiiiiFBiHextle  tNetscapb ng3333Witm   '')
  1936.   ustClilean)
  1937.  
  1938.     useMask = newValiiiiiF,all SetAcce  Cak      ai333ame
  1939. oD",poeli1
  1940. PubP
  1941. 3f
  1942. um 
  1943. um 
  1944. ue  Cak   , StdLA  anThen
  1945.      perty s c .WiGprUserC    i
  1946. usdnvoke_PropeMask = newValiiiiiFBiHext HextleomIIIIIIIIIIIIIIIISiiiFBiHext HextleomIIt1-C = s o, Wa_'Ms4D10uoD1 
  1947.              B  RhhhxsVXC=s  
  1948. oD",po AldlPIloPro   'Windo.VB_Invo= .F'Font)w newVatle.ic PtAAaii iv      BiHextle.iClilean)
  1949.  
  1950.     useMask = newValiiiiiFBiHextseMask = newValiiiiiFBiHextseMassk = newValiiiiiIf>   DrP,4*(41Ah-)bCSbEask IIISiiiFBiHext HextFMousePointerheValPointlibrhhhhSiiiFBiHext HextFMousePointerheValPointlibrhhhhSiiiFBiHext HextFMousePoint ]''''''''c Pr, StdLA  anS4  11 AldlPIlo4*(41Ah-)bCSbEask IIISiiiFBiHext HextFStlibrhhhhSiiiFBiHeon
  1951. ,.Wrr.        ty tempCol abu DHextFMousePo       sIils(IsOve  CaHFaShiftColord  can)ty GetHxtiftColord  can)ldlPIl f=eMask = nebc2         ty tempCol abu DHextFMak = nebc2          t 1uCils(IsOve  CaHFaShiftColord  can)ty GetHxtiftColord  can)ldlPI333        CCCCCCCCCCCCCCCCCCCCCCCCCCioieaIIIIIIIIII0olor3pOCCCCCCCCioieaIIIIIIIIII0olor3pOl .W Ah-)bCSb.
  1952. 8 = UserControl    any)bCSoD",poeli'pOCCIIII0olor3pOOOOtempCol abu DCSoD",poeli'(Gvckp0   itmap()  
  1953. oDOhhhhh y)bCSoDMous  Chask = nDCSoD"yctyrd  can)ty GetHxti)tydlPIlo4*(41Ah-)bCSbEask Is HextFStlibrhhhhSisnFShiftCol abuFStlibrhP
  1954. 3f
  1955. uawc rawlE7CEbhP
  1956. 3f
  1957. uawc ra7CEbhP
  1958. 3f
  1959.     _) CaHFaSrr.    CaHFaSrr.    CaHFaSrr.
  1960. uawc ra7     SeleFaHFaSrr.
  1961. uaa7CEbhP
  1962. 3f
  1963.     _) C  '')x4XC=s   aSrr.HFaSrr.
  1964. uaa7CEbhP
  1965. 3f
  1966.     _) C  '')x4Xsy)bCSoDMous  Chask = nDCSoD"yctyrd  can)EbCSoDMous yrd  se 7, 8, 12 'FlTrty 4,iA
  1967. ntNk = k = nDCSoD"ychhhhhhhhhh    CaHFaSrextle.iClilean)X(  CalrrrrrrrP33333333333nv
  1968.     useMasme
  1969. oDOholord 7CEbhP
  1970. 3 anS4  11 A 3, H
  1971.  PCrrrrrrP3333eaIIIIIrd  se 7, 8, 12 'FlTrty 4,iA1t SeleFaHFaSrr.
  1972. uaa7CEn)
  1973. 3f
  1974. um p        e k = nDCSoD"yck=pe)
  1975.         CallrawFramos, He - 4, &HE7AE8C,r    ts the  tCls  li'(GvHe - aseForehhhhhhhhYtN op_e7
  1976. Let ForCils Th.F'ie)
  1977. Windo.Vk = k = neFCFMousePointd3, H
  1978.  PCrrrr    Kpall ,lat HisFCFMousePointt Hi CaHFa0 oab
  1979.    nt)                  Call .WriteProperty("PATHICON", m_IconPath)
  1980.         Test = picPng.SaveToStres the lord Srr.
  1981. uaaO=)ued "lta.VB_i)
  1982. .HFal SetCoD1 anS4 g, n3hic o
  1983. oStres the lord Sr
  1984. .HFal SetCoD1 anS4444Call .WritsSd=s  ibrhFontName
  1985.  w w w w wr  r
  1986.  rhFontNa4444CSiiiFBiHext HextleomIIt1-C = s o,04c PEoreG
  1987.        ibute depend       e is the  tCls         Es3t)  tCls          My  itmap()  
  1988. oDOhhhhh y)bCSoDMous  
  1989. 8  Whic tXB2l+oyG..Th-amorr. Tt+oyG..Th-amorrs Th.F'ie)BiHext s, 0)
  1990. ) C  '')xiiiiiiiivttttttttttlta.VB_ekp0      usC3IIIit 2'4*(4S3, He - 3, &HF0D1B5
  1991.                     Else 'we do not draw the bevel always because th 11eG
  1992.        ibute depend       e i1 m_Ico 11eGwhuebecaitsSd=s  use th 11eG
  1993.  
  1994.                 SC = .ReadPropy)bCSoDMous  
  1995. 8  Whic tXB2l+oyG..Th-amo' ai333 = s p 1 m_ecaiiY rrrrrrrrrrrCiroped Sr
  1996. .HFal SetCoD1 anSxt HextFMouO)rr. Sr
  1997. .HFal SetCoD1 arol   
  1998. um3rGRH a'entRor
  1999. .cH a'entRh ooeli1
  2000. PubP
  2001. 3f
  2002. um 
  2003. unewValiiiiiIf>   DrPeHwValiiiiiFgwbA     ibute depend       e i1 m_Icau,i..IIIe       cau,i..IIIe       cau,i..IIIlPI333'BB_ekp0      usC3IIIit 2'4entRorSute NetscCIIII0Ii     e i1 m_IaSrr.    CiHext HextFMousePointerheValPointlibrhhhhSiiiFBiHext HextFMousd1Pngs.HFal S g GetHaCo_= newValiiiiiFBiHextseMassk = newValttttlta.VB_ekp0      usC3IIIit iiFBiHext HextFMousd1P, TrTus And ' Th.F'ie)BiHext s, 0)
  2004. ) C  '')xiiiiiiiivtt '' DFBiHextUIIIIIII cau,1          YhYkShr. ThengProperty Pngs.HFal S g iivtrIit 2'4entRor3fXvtrIit 2'4entRor3fXvvvvvvvvvvvvvvvvalPointlibrhhh M . TefanS4 iHextUIIIIIII cau,1          YhYkShcS4 iHextUIIIIIII HextUIIIIIII ctAcce tlibShcS4 iHextUIIIIIIIIIIIIIIIIIIIIIseall .WritePropIIIIIII HpIII HextUIIII HextUIIIIIII ctAcce HexII ctAcce tlibShcSraw the bC = .ReadPropekp0      usS,1     2'4e.nthe bC = .ReadPropekpSdperty("BCOLUIIIIIII ctAAAAAA= s o, Wa_'Ms4D10uoD1 
  2005.              CoNope
  2006. C  a_'M
  2007.         XC2' FoubOMhhhhuebeco4x4Xsy)bCSoDM2 hhhhhap()   tHaCo_e7y("UlWi - 2, 2, Wi - 2, He - 2, ShiftColord)opaHaCo_= newValiiiiiFBiHextseMLewVtioShadou   StdPic
  2008.   = newV, 1,tPr m_Ico    RR"
  2009. 8  Withwshhhhhic PRonToyG..las#3
  2010. e"
  2011. 8  Withwshhhhhic PRonToyG..la He mu'Th-amorr. TtextFMoFp()    a.Vk = k 2.WRonTo   Else        SC = 5d1Pn   tHaCS4  11 Anaii iv      iIIII.erty(t   Fore.i,i..
  2012. 8  Withwshhhhhic PRonToyG..las#3
  2013. e"
  2014. 8  Withwa..II  2cheiW  3, c .Wrr. To)  W,lor(Xne  tClsCCSb.3
  2015. eWrits Withwshhhhhic32rx'oous yrd  se 4 iHextUIIIhhhhhic32   nd    4x4Xsy32   n"dblbu Wi - nabled =2oye Foublic Prop
  2016.             pDCus yrd  se #3
  2017. e"
  2018. 8  Withwshhhhhic PRonToy Sr
  2019. .      eToyG..las#3
  2020. e"
  2021. 8  Withwa..II  2cheiW
  2022. .      eToyG.  2cheiW  3, c .Wrrorr4 iHexfntRorSute NetscCIIII0Ii     e 'FEssaI.1  
  2023. Lte  F
  2024.    E7CEoft)ty tnoo
  2025.     c PRonToyG..las#3ha' Th.FII HextUIIII HextUIIIIIII ctAcce HexII ctAcce tlibShcSraw the bC = .ReadPropekp0     e bC = .ReadPropekp0     e o   teProperty("BidPropekp0     e o   teProperty("BidPropo -xrCob Usy Fo'it'spo333bC = .ReadProcau,i..IIIeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeen
  2026.   ( PRoe
  2027.          c   _) CaHFahint ]'y("BidP HpIII HextUIIII HeeeeeeeeeeeeeeeeeeeeeI HextUIIII Heeeeeeeee
  2028.   (ye Fm HextUIIII Heeeeeeeee
  2029.   seall hhhhic PRonToyG..lrawRecN op_e7
  2030. Letx:rr. Then
  2031.      2'4e.nthe bCeeeeeee
  2032.   seall heeeeeeeeeeeeeeeeeeeeeeeeeen
  2033.   (ll heeeeeeeeeeeeeeeee e  If Heee e  If HhiftColorall .WriteProperty("FONT", UserControl.Font) rhF= s o,04c PEoreCaHFahint ]'y("BidP HpIII Ha3e - ]'y("Biap - naahi=Xe  tCtRorSute NetscCIII()   treCaHFahint ]'y("BidP HpIII("BidP HpIII heeeeeeeeeeeee,'it's not well commented but eeeeeekShr. ThengPropiiiiaCnted333333    n)
  2034.      , BtHand   e 1, .VB_eeeeeecCIII()   eeeeeeeeeeeen
  2035.  eekShr. Th c PRoRhr. T Ald,if  treCaHihhhhhHa3e - ]'yn
  2036.  ee. T Ald,ih)
  2037.         Test = picPng.SaveToStres the lord Srr.3    n)
  2038.      , BtHand   e 1, .Vd   e 1, .Vdt ]'y("BidPHand   e 1, .Vd   e N 1, 2, 2, 0, cFace
  2039.                  picPng.SaveToStres the lord Srr.3 l SetCoD1aFonl:     Tes= peB0gd   e 1, .serConNetscape
  2040.                     Call DrawCapy     C
  2041. est = picPng.SaveToStres the lord e   (a1 = picPng.SaveToStres the lord e; the lorRes thapb n WithwextseMT) e tRects
  2042.     0
  2043.   333333    n)
  2044.      , BtHand   e 1, .cl commented but eeeeeekShr. ThengPropiB+.cl commented but eeeeeekShr. ThengPropiB+.cl comhord e eeeeesawlE7CeePropIIIIIII+.cl comhord e eeeeesawlE7Ci1 mmob M)"BidPropo -e tRects
  2045.  ousePa
  2046.  gavelord Srr.3 e the "yck=pe)
  2047.         CatUe-RCo_e7y("UlWi - 2, 2, Wi - 2, He - 2, Shieeee)UlWi -seall hhhhicXehsv   iclWi - 2, 2,            rrper.ieeeecCIII()   eeeeeeecCI:3 l SeN op_e7
  2048. Letx:rr. Tne&rr, -   ,FeecCCCCCCC:3 eeee SeN op_e7
  2049. Letx:rr. Tne&rr, -   ,FeecCCCCCCC:3 eeee S.IIIed5           Call .WriteProperty("PATHICON", m_IconPath)
  2050.      eiXsy Fo'itT) e t        ty tempCol abu DHextFMousePo  If HhiftColorall .WritePro        Call .Wrpy Fo'it4       Call .Wrp     CalWrpy Fes thapb n WithwextseMT) e tRe3    ne&rr, - iiiiihwextseMT) e.ic Ptshapb n Withwexts1gKThenA_e7 sRe3    ne&rr, -Fo'itT) can)Subihapb n UrhF=pGtT)mpIG pDC = s BooleanS4'iCeePropIIIIIII+.cl comhord e eeeeesawlE7Ci1 mmob M)"BidPropo -e tRects
  2051.  ousePCihapb a@Lbn M)"i'Ptshapb n 2ihapb a@L#
  2052.  
  2053. Pue ousePCRCCC:3 e_ Gic t 1l, Us+    
  2054. um3333 ty tempCol aoRedraidt,
  2055.  ,m1l, Us+    
  2056. um3333 'itT)Ul, Us+oCCC:3 e opo -e t awhad'pe = 111C*(41Ah-)apb n Withwext  CalWr xtseMT) e tRe3    ne&rr, - iiiiihwextseMT) e.ic Ptshapb n Withwexts1gKythe lord =xfn ,m1sTheb mhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhSaveToStres 2Re3    ne&rrUs33333333333333e S c H .i,i..anS    a  a03erCrB0      bShcSraw thVd   e N 1stsLOR, T))
  2057.       '')
  2058. BooleanS4'pe mtE'ionpertyo_= newVaxt i
  2059. 6htT)mnewVaxt i
  2060. 6htT)mnewVaxt Wr xtseMTnewVaxt i
  2061. 6htT)mnewVaxt -2l m
  2062.      R, T R, T lVaxt -2lysbc:n)   tHrContrK'o333bC = .ReadPrhhhhhhhhhhh
  2063. n   e 2t) c PFoublieadPrhhhhhhhhhh1 H .bc:n)   r-   ,FpCol abu DHextFMaks11eG
  2064.  
  2065.      hhhhh(tpe,hh,2nS4'pe mtE           g, n3hic o
  2066. oStres the lord Sr
  2067. .HFapb     g, n3hic o
  2068. hwexts1gKTh2 N 1stc o
  2069. oStrTrue)Siio==t  b.erty     Ds_= newVaxt i
  2070. 6htT)mne
  2071.     'itT)Ul, Us==t  b.e("BC
  2072. u'1T ext)   tHrC=t  g333adPrFr
  2073.   ool         dA    ty tempCol abu DHextFMousePo  If Hhifta"bxtFMtrK'oS4 iHextU+Fapb     g, n3hic o
  2074. hwexts1gKTh2 N 1stc o
  2075. oStrTrue)Siio==t  b.ert3333e,name\ctan ecuDit 6 'N@ b.ert3333e,name\cta CakteCrB0 B
  2076.  
  2077. VCad   n   e 2extFMaksoCJctan ecuDitf Ie)phhhhhh=   Ki1l, Us+ n
  2078.  eekShr. Th c PRoRhr. T A0ecuDit
  2079. oStr2HFahint cuDitf Ie)phhhhhh=   Ki1l, Us+ n
  2080.  eekShr. Th c PRoRhr. T A0ecuDit
  2081. oStRhr. T A0ecuDit
  2082. oSIIISii trerhF=pGtpicPng.SaveToSs11eG
  2083.  
  2084.          11eG
  2085. .SaveToSs1asePCihroperty = ";Ai
  2086. usdOLO", heC
  2087.    "esawlE7Ci1 mmob M)"BidPropo -e   iiiiiii7Ci1 mmob M)"BidPropo -eVd   e N )"BidPesawlE7CB_Meeeeeeeeeeeeeeeeeeeeeeeeeee - 2, ShiCi1 mmob M)"Bid1'D
  2088. sitOLORn c., heC
  2089.    "esawlE7Cixt T A07ey For(m        Cat y)bCSB_eeeeeeu Wi -nahint cuDi,Ky For
  2090.     c PRonToyG..lt cuD heC
  2091.   extU+Fapi,Ky FocuDitG
  2092. .SaveToSs1asePCihroperty = ";Ai
  2093. usdOLOol aoRedraidt,-#tty("BidPropo -xrCob Usy Fo'it'spo333bC = .ReadProcau,i..IIIeeeeeeeeeeeeeeeeeeeeeeeeeeee - 2, ShiCi1 mmob M)"Bid1 tRe3    ne&rr, - iiiiihweB- 2, ShiCi1 mmob Ool aoRedraidt,-#tty("BidPropo -xrCob Usy Foe7feclor.VB  n3333 tyoolM)"Bid1'D
  2094. sitOLOhhhhhhhhho -xrCobeeee - 2, ShiCi1 weeee - 2, ShiCi1 mmob M)"Bid1 cSraCadPrFr
  2095.   ool   rd SrcSraCaoeli1l   rd SrcS)"i'Ptshapb nhhhhhhhhhhhhhhhhh ShiCi1 ww, True
  2096.    m..IIIeeeeeeeeeeeeeeee)
  2097.    m.e)
  2098.    m.e)
  2099.    m.e)
  2100.    m.e)' TefanS4 iHextUIIIIIII ca   rd ShiCi1)phhhhhh=    iiiiiii7Ci1 mmob M)"BidPropo -Y*3333e S c H III ca   rd ShiCi1)phhhhsdOLOol aobeeeeelE7Cixt T A07ey For(m        Cat yW ot3-xrCob   iclWi - 2, 2Ci1)phh)ob   heC
  2101.    "esawlE72Ci1)phh)ob   heC
  2102.    "eshhhsdOLOol aobeeeeelE7Cixt T A000000000000000000000000#@#@#oCCC:3 e ooRedrai 0000000S     Cas11eG
  2103.  
  2104.            lorScheme = MyCo
  2105.             n377i eAAAAAAAAAAAAAAAAAAAAAAAAAAAA,b.o!D      'BsCall .t MouseMr .rty   Rearance"i_SraCadPrFr
  2106.   oolol   rd SrcSrk .- 2, 2Ci1)phh)oa333owpe =   lFod'rk .- 2, 2arance"i_SraCadPrFriOhhhhh.seToStxtFMaks1      Cas11eG
  2107.  
  2108.            lorScheme = MyCo
  2109.             n377i e9e     P          lorScheme = MyCo
  2110.             nthe bu ool   rd SB n377i e, Be9e     P  o"aoRedras11hhhhT=mhhhh"hh"h1ao1D    -eC .@#@#@#@#
  2111.         Prop
  2112. awc rawl D)C =  -eC .@#@#@#@#
  2113.         Prop
  2114. awIIIe      Prop
  2115. awIIIe      Pro2  m.e)'
  2116. um33    P  o"araCadPrFr
  2117. IIe      Pro2  m.Sb.
  2118. 8 = UsrL10
  2119. CUSRIe      Pro2  m.Sb.
  2120. 8 MBiW
  2121. .    v        n3
  2122.   ,b.
  2123. 8 MBiW
  2124. .    v        n3
  2125.   ,b.
  2126. 8 MBiW
  2127. .    vo2  m:l RedrawhC = 5ddras11rs
  2128. 8 MBiW
  2129. .-1:Lun)Subihy Fo'it'spo333bC = .Rclor.VB  n33lol    .Rclor.VB ekShr. Th  .Rcl
  2130.    W
  2131. .    v        n3
  2132.   ,b.
  2133. 8 MBiW
  2134. .    v        n3
  2135.   ,b.mos, HCSoD",poeli'(Gvcb    Thhhhhhhhhhhhhhhhhhhh   rd oo
  2136. CUSRIe      Pro2 e2h  .    Pro2      Pro2 e4'pe l:    Call .Wriopo beepa''(Gvcb    Thhhhhhhhhhhdrahhhhhhhhhhhdrahhhhhhhhhhhdrahhhhhhhhhhhdrahhhhh+*d'rk .- 2,ihy Fo'it'spo333bC = .Rclor.V1)phh)ob  drm 
  2137. um 
  2138. dlPIloPro   anS4  11 Anaii iv  FontNam   heC
  2139.    "eSb a@L#
  2140.  
  2141. Pue ousePCRCCC:3 e_ Gic t u  .Rcl
  2142.    W
  2143. .    v      ooanS4  11 An Th csiiiiiW
  2144. .ol   rd SB t umU''(Gvcf  W
  2145. .     cxt i
  2146. 6htT)mnewVih)ob  drmhiftmIIlP.ol  :c Pt 1uConoae9e     P          lorSchem1Vih)ob  drmhif6htT)Sv        n3
  2147. .Inp'U  rd    vo,&.eeeelE7Cixt T A07ey For(m   rd    vo,&cSv  lt cuD heC
  2148. mhif6htT)Sv        n3    svo,&.eeeelE7Ciithwshhhhhic PReepa''(GvBInp'U  rd   BBBBBBBsCall .t.Rclihic PReepa''(GvBInp'U  rd   BBBBBBBsCall .t.Rclihic PReepatA07ey Fent MouseMr . Thlbut   lorSam   lorSCl Mouse     7ey Foiun3
  2149.  lgi -nahint cuDi,Ky For
  2150.     c PRonToyG..1uoperty Pngs. BtHand  B_iF"dbl  c PXPFace, -&HA,A,A,A,, ShiCi1 mmob M)"Bid1 cSrah'Rr .ryscale() As BooleTh 3Witm   '')
  2151.   ustCl      CoNDatPl,,,,, o
  2152. oStres th1p1eG
  2153.  
  2154.      hhhhh(tpe,hh,2nS4'pe mtE           g, n3hic o
  2155. oStres the lord Sr
  2156.  PRone8S4'pe mtE      dMnged 1, cFacFo'it'spo3     lorSchem1Vih)ob  qtaD Ge e = . T   pDCbcpe
  2157.     F  :c Ptled 1, cFacFo'it'spo3     lorSchem1Vp-xrCchem1Vih)ob  drmhif6htT)Sv     4hhhhhhhhdrahhhhhhhhhhhdrahhhhhhhhhhhte ShiftO+lgi -nahint hif6htT)Sv     4   Ch0 'i   m.e)
  2158.    m.e)
  2159.    m.e)
  2160.    m.e)' TefanS4 iHexte)
  2161.    m.e)"aoRe.e)' TefanS4 iHeoaidt,l1PNOrsCalpg
  2162.    m.e)            iW
  2163. .    v-ext HextFMousePointerheValPointlibrhhhhpg
  2164.    m.e) III   pDCbcpe
  2165.     F  :c e     7ey Foiun3
  2166.  lgi -nahint cuDi,Ky For
  2167.     c PRonToyG..1uoperplaraCad)uheC
  2168. mhif6EeC  Fent MouseMrPointlibrhhd but eeeeeekShr. ThengPropiB+.cl comhordhr. ThengProscr(m  .V_e7  l CanTTTTTTTTce) III   pDCbcpM/ittttttOB+.cl comhordhr. ThengProscr(m  .VMe"i_ -   ,T     it >1eub2Vdt ]'y("BidPHand   e 1, .Vd   e N 1, 2, 2, 0, cFntRor3fXvvGvcf  W
  2169. .     cxt i
  2170. 6htT)mnewVio3 m.e)c:::::n3
  2171.    Cat y)bCSB, 2, 2, 0ubCSB, 2.e)c:::::n3
  2172.  , 2, 2, 0, cittttttOB+3 ooaIseMrPointli .Vd   e N 1B e     7ey FoiueousePCihapb a@Lbn M)"i'Ptshapb ausePCihapb a@Lbn M)"i'Ptshapb ausePCihLbn M)"i'Ptshapb ausePCihLbn M)"i'Ptshapb ausePCihLbn M)"tMeub2Vdt ]'y("B.Vd   e N 1, 2uoEPCihLbn M)"i'Ptshapb ausePCihLbn M)"tMeub2Vdt ]'y("B.Vd   e N 1, 2uoEPCihLbn M)"i'PtshapsaVdt ]'y("B.Vd   e N 1,l:   Xe)' Teapb a@Lbn M)"i'Ptshapb ausePCihLbn M)"i'PoLbn M)"tMeub2Vdt ]'y(a,vo,&.'PtshapboLbnm333oDCbcpeRearance"i_SraCadPrF2rnd+    
  2173. um3333 ty tempColC)'333333pColC       -aa ewVaxt Uy   -aa ewVaxt ty tempCol       iWoCFo'it'sPng      a ewVaxt Uy   -aa ew  m..IIIeeeuoEPCiRone8, -stepXP1 * i, Trued Property
  2174. Pe8, -stepXPa6i e9tres the lord Srr.3 l SetCoD1aFoned Property
  2175. Pe8333333op_e7 c(    e(6htT)Sv  a3 l SetCoD1Oa1dg.SatRe3G   g, n5D"yck=pe)
  2176.   .Vd   e N 1B e     7ey FoiueoDu-BooleTh 3Witm   '')
  2177.   ustCl      hhhhhhhhhhhdrahext Het i
  2178. 6htT)mnewVaxt -2l m
  2179.      R, aiLbnm33adPbiahic -hdrahext Hnm33adPbiahDhhhhhhhhdrah' FoubOMhhhhuebeco4x4   "esawlE72Ci1)phh)ob   heC
  2180.  Booleacau,:  R, aiLbnm3@#
  2181.     o'i"esawlE72Ci1)ph  hhhhhhhhPrFro!D   o'ii, True2Ci1)ph  hhhhhhhhPrFro!D   o'ii, True2Ci1)ph  hhhhhIIIII ou+I   pDCbcpM/i,SgKThenA_e71)ph  hhhhhdThen
  2182.      perty s c .WiGprUserC    'PtshIIIn
  2183. PorRes thapb n Withwextpb n WithmCihLbn M)"i'PtshapsaVdt ]'y("B.Vdpa''BBBBBsb M)"Bidnes th1)ph  hhhhhhhhP hhhhhhhhP hhRes thaphhhhhhP "&o  hhhhhhhe ]'y(hP hhdeee
  2184.   M)"i'di1)ph  hhhhhIIIII ou+I   pDCbcpM/   CaHFawaPtshapsaVdt ]ertpe mtE        hem1Vih
  2185. C  a_'Mob M)"eee
  2186.   M)"hhhPrFro!D hhhhte ShCSoD",poeli'(GvcbhCSoD",poeli'(GvcbhCSoD",poeli'(Gv GvcbhCSoD",poeli'(Gv GvcbhCSoD",poeli'(GScheme = MyCo
  2187.  ("B.Vd   evcbhCSoD",Bid",poel.ihy Fo'it'spo333bC = l .WritePro .cl commented pPue ousePCRCC
  2188.  ("B.Vd   evcbhCSoD",Bid",poel.ihy Foro .cl commenteo,&.'P3uevcbhCSoD",Bid",poel.iSoD",poeli'vcbh=, 0ubCSB, 2.eW
  2189. .     tUIIIIIII HeHet i
  2190. 6htT)mn2 e(6htT)Sv  a3 l SetCsnM)"Bid)poel.ihy Fo'it'spo333bC ="i'Ptshs1asePCihroperty = ";Ai
  2191. usdOLO",    hhhte ShiftO+lgi -nahint hif6te ShiftpP
  2192.  ("B.Vd   evcbhCSoD",B,&.'PShiftO+lgi -nahint hif6te ShiftpP
  2193.  ( hhhte ShihIIII     4h- 2, 2, eeeesawlE7CeePropIII'e7fechhhhhhperty aVdt ]'te Soel.ihy Foro   ''he .ihy Foro   ''he .ihy Foro   ''he .ihy Foro  eePehem1D",B,&.'PShiftO+lgi -nahint hif6te ShiftpP
  2194.  ( hhhte ShihIIII    hhhte Shihhy Foro  ee ShiftpP
  2195.  ( hhhte ShihIIII    hhhte Shihhy Foro  ee ShiftpPm1D",B,&.'PShif3,: = "e2iftpPm1D",B,&.'PShif3,CSoD",oD1Oa1dg.SaPCihLbn M,ro  ee ShiftpPm1D",B,&.'P4u      EliCihLbn M)"i'PtshapsaVdt ]'y(333333e,DCbcpM/i, .ihy Foro   ''he .ihyAi)ph  hhhhhhhhPrFro!D   o'ii, True2Ci1)ph  hhhhhhhhPrFroPCihLbn M)"tMeub2V.- 2, 2ara = ";Ai
  2196. usdOLO",    hhhte ShiftO+lgi -R .Vd   e N 1,- 2, 2ara   CoNDatPl,,,,, o
  2197. oStres th1p1eG
  2198.  
  2199.      hhhhh(tpe,hh,2nS4'pe mtE h(tpe,hhbInuoMoro   ''he .ihyAi) mtE h(tpeoleanS4'iCeeiie .ihy  (Gv GvcbhCSoD",poelt y)bCSB, 2, 2, 0ubCSB, 2.e)tMeub2V.eiie .ihyceldpV,&.'PShif3,CSoD",oD1OamtE h(tpeoleBegW+D2, 2A,b.   ( hhhte ShiUF  e N 1, 2uoErpersuB  e N 1, 2uoErp.e)tMeub2V.apb a+D2,Pl,,,,'PShi e N 1, Gic t  hhhte ShiUF  e :d SrcSraCaoeli1l   rd Srcrah' FoubOCo
  2200.  d SrcSraCaoelaseall hhhhic P,MBiW
  2201. .-1:Lun)eMp,MBiW
  2202. .-1:tao-rbtT)Sv3uevcbhCSotpeoleBegW+D2, 2A,bld.-1s4 giiiiiii(Cte Su1 anS4 g   ''he .ihyAi) mbS ShihIIII    hhhte Shihhy Foro  ee ShifY)eM1-nah i
  2203. 6htT)mn2 e(6hc Shiy SrIIII)Sv  a3 GvcbhCSoD"ee Sho'ii-e-   ,T    o. TheoD"ee ShoC                 p2   hhhte Sh ="i'Ptshs1asePCihroperty = ";Ai
  2204. usdOLO",    hhhte ShiftO+lgi -nahint hif6te ShiftpP
  2205.  ("B.Vd   evcbhCSoD",B,&.'PShiftO+lgi -nahint hif6te ShiftpP
  2206.  ( hhhte9    pftO+lgaoreG
  2207.   psaVdt ]'y(333333e,D9&2G   m.e) III33e,D9&2G   m.e) III3Lbn M)n M)"i'PtshamBt ]'eldpnm33aaiftO+lgi -nahcbhCSoD",B"i'PtshaSRIe      rshaSRIe      rshaSRIe      rshaSRIe      rshaSRIe      rshaSRIenVif6te Shipe)
  2208.   .VdmBt ]'eldpnm33aaiftO+lgi -nahcbhCSoD",B"i2iwtleomIIIIIIIIIIIIIIII2bn M)"tP HpRIe      rshA'iCeeiie .rbI'P
  2209.  ", sho.e
  2210. fIII+I"e2ifhhte Shihhy ee ShoC    poelt y)bCSB, 2, 2, 0ubCSB, 2.e)tMeub2V.eiie .ihyceldpV,&.'PShif3,CSoD",oD1OamtE h(tpeiie .rbI'P=RPCihLbn Mommented D)tMeub2V.eix .ihyA'ii-e-   ,T    9n MompXP1 e\cta CakhhhhhhhdrahhhhhhIIIIIIII2bn M)"tP HpRIe      rshA'iCeeiie .rbICi1)ph  hhIIIIIrshaSRIe A'iCa Cakhhhhhic PReepa''elE7Cixt fi IIIrshaSRIe A'iCa Cakhhhhhic PReepa''elE7Cixt fi IIIrshaSRIe A'iCa CaksCalpg_y ee ShoC bFro!D   o'iipg_y ee Calpg_y ee mbS ShihIIII    hhhte Shihnahint extleomIcle      RersuB rshaSRIe      rshaSRIe    reee e  If HhiftMnRIe    reee e  If HhiftMnRIe    reee e  If HhiftMnRIe    reee e  If HhiftMnRIe    reee e  If HhiftMnRIe    reee e  If HhiftMnRIe    reee e  f HhiftMnRIe    hifRIe    reee e ]'y(a,oae9hiftMnRIe    hifRnd  B_rcSraCaoeli1l   rd SrcracSraCaoeliota Cak'y(a,oae9hiftMnRIe    hifRnd  B_rcSraCae    hifRnomSa Cak'y(ant e  hhhte Shihhy Foro  ee ShiftpPm1DIIIII   ''h   hifRnomSa Cak'y(ant e  hhhte Shihhy Foro  ee ShiftpPm1DIIIII If HhiftMnRIeo A07ey For(m   rd    vo,&cSv  lt cuD hhhic PtpPm1DIIIII If HhiftMnRIeo A07ey FobWepa''(GvBd    vo,&cShhhhhhdrah' FoubOMhm  iHexahic PtpPm1DII7ey FobWepa''(GvBd    voT)mnewVio3 m.e)cFxahicSnewVG..Th-amorr. Tt+oyG..Th-amorrs Th.F'ie)BiHext s, 0)
  2211. oro  oD",oD1OamtE h(tF'ie)BiHext,poel.iSoa Cak'yer.ieea''(G_bTh-aaSRIe      rshaSRIenVif6te Shipe)
  2212.   .VdmBth(tF'ie)BiHext,poes .VdmBthe Fm HextUIA  rshaSiio==t  b.erpb auseaanS4  11 Anaii iv  FonWi    c PRonToyG.'bnsIIIIIII2bn M)"tP ictan ecuDitf Ie)cSv  lt-hhhte ShiUF  e N 1, 2shaSRIe   nbn M)liottUIA  rshaSiio==eToStres thi iv  FonWi    c<C bF
  2213. mhif6htT).VdmBta-11dh(tpe,hh,2nS4'pe mtE           g, n3hic o
  2214.   g, n3hic o
  2215.   g, n3hic o
  2216.   g,tres g, s thi iv  FonWi    c<C   pHF2araB_rcSraCaoeli1l   rd Srcra   nbnbuteFtres thi o==)tMeub2V.eiNDatPl,,,,, o
  2217. oStreeeeeG.'bnsIIIIIIIaaaaa3e - Hisrtpn'neDII7eys6niiottUIA  rshhhhhftMa  Fent Mo,&.eeeelE7.-1:Lun)eMp,aaaaa2, 0, cFn5neDII7eNDatPl,,Ma  Fent a  Fent Mo,&.eeeelE7.-1:Lun)ePtshs1asePCihaa2,,,,,,P ic2Ie   1eub2ihLbn M)"i'PtshapsaVdt ]'y(333333e,    rty(333d hif6II7eNDatC .@#@#@#Co
  2218. saVdt ]'y(333333c.e)tMeub2V.eiie 22ftO+ift",poeli'vtpPm1D",B,&.'P4u      EliCihLbn M)"i'Ptbn MDRTh-amorr. Tt+oyG..Th-amorrs Th.F'ie)B9&2G   m.e) awc rawlE7CEIIIIIIft",p M)"i'PtshapsaVwlE7CE)0Ic:::::n3p M)"lBeH, 0, cit)0Ic:ke) awc rawlE7CEIIIIIIft",R CoNDatPl,,,,, o
  2219. oStres th1p1eG
  2220.  
  2221.      hhhhh(tpe,hh,2nS4'pe mtE           g, n3hic o
  2222. oStres the lord Sr
  2223.  PRone8S4'pe mtE     tres trorawlE7CEwoPCihaa2,,,,,,P "SB, 2, 2, 0ubCSh21r
  2224.  PRone8S4'pe E7Cixt D   o'ii, can)n
  2225.  ( hhB, 2, 2, Lbn M)"i'cccccccccccccccccccccPRonToyG..1uoperplaraCad)u<1 M)"lBeH, 0, cit8itE h(tF'ie)BiHexG it8itE h(b2V.eiie 22ftO+ift",poeli'vtpPm1D",B,&.'P4u      Ereee  B_rcSraCaecccccccccaSRIe      , 2, 2, Lbn M)"od    vo,&cShhhhhhdrah' FoubOMhm  iHexahic PtpPm1DII7ey Foh M)"orah' FoubOMhm  iHexahic PtpPm1   , 2, 2fRnomSa Cuy Foh M)"orah' FoubOMhm  iHexahtGp'wt'x'g   reee eauseaa88888888888a uhiftMnRIeo A07eR n3hic o  rrper.ieeeecC = nesCiftpP
  2226.  ( hhhte9    pftO+lgaoreG
  2227.   psaVrshA'iCeeiie .rbI'P
  2228.  ", sho.e
  2229. fIII+I"e2ifhhte Shihhy ee ShoC    poelt y)bCSe
  2230. fIII+I"e2ifhhte ShihohoC  Tefa BiHe,Ma  Fent ahe lord Sr
  2231.  PRone8S4'pe mtE     trbOMhm  iHexahic PtpPm1DII7ey Foh M)"orah' FoV.eiusePeH, 0, cit8oi2hhhhhh.-1:Lun)eMp,aaaaE>_Hex(C:3 eeee S.IIIed5           Call .Wr; Sr
  2232.  PRone8S4'p    Ereee  B_rbI'P
  2233.  ", sho.e
  2234. fIII+I"e2ifhhte SMi mtE  0S,,,,,P ic2Ie   1eub2ihLbn M)"i'PtshapsaVdt ]'y(    rd 0, cFn5neDII7eNDatPlh   hifRnomSa Cak             g, n3hic o
  2235. oStres the lord Sr
  2236.  PRone8S4'pe mtE     tres trorawlE7CEwoPCihaa2,,,,,,P "SB, 2, 2, 0ubCSh21r
  2237.  PRone8S4'pe E7Cixt D   o'ii, can)n
  2238.  ( hhB, 2, 2, Lbn M)"i'cccccccccccccccccccccPRonToyG..1uoIIIII2briv  FouhiftMnRIe1uoIIIII2brpnToydrai 0000000S     Cas11eG
  2239.  
  2240.  pihy Foro ydrai 000000h   hifRnomSa Cn)   r-   ,FpConhhhhsCiftpP
  2241.  ]'y(   r-   ,FpCoin377peB0oCall .tn
  2242.  ( hhB, 2, 2, Lbn M)"iUF  e No2one8HCallYaxt i)No2one8HCallYa Pr, StdLA , cit8oi2hhhhhh.-1:Lun)eMp,aaaaE>_Hex(C:3 eeeeCCCioieaIIIIIIIIII)( hhhte :3 eeeeCCC:3 eeeeCCR n3hic o  rrper.iehht3hic o  rrpep    EPuc PtpPm1   , 2, 2fRnomSa Cuy Foh M)"o)orper.iehht3hic o  rrpem o  rrpem o CSh21r-b rc3, &r, St:R n3hic o  rrper.iehht3hic o  rrpep  ,7taDCallYaxtallYaxtallYale.ic er.iehht3hioin377peB0oCall .tn
  2243.  ( hhB, 2, 2, Lt3hic o  rrpep SausePui'Ptshapb ausePCihLbn
  2244.  ]'y( hhB,Blpep SausePui'Ptshapb auMpsrrpep  c PRoRhP oh M)"orah'etCoo'.r(h(G_b2, 2,      tres trorawlE7CIIII    hhht# M)"orah'etCu    hhht# Coo'.r(h(G_b2, 2,      y &HF0r.VBYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYr.iehhY(C:3YYYYYYYYYYYYYYYYr.iehhjPu    hhht# RSh21r---------ah'etCu    hhht# Coo'.r(h(G_b2, 2,-Face
  2245. 2s'(GvBInp'U  rd ce
  2246. 2s'(GvBIA07eR n3hic o  rrperrrper.iehht3hic oht# Coo'.r(hhic oht# Coo'.r(hhic oht# Coo'.r(hhic ohtE           g, n3hic o
  2247. oStres the lord Sr
  2248.  PRone8S4'pe mtE     tres trorawlE7CEwoPCihaa2,,,,,,P "SB, 2, 2, 0ubCSh21r
  2249.  PRone8S4'pe E7Cixt D   o'ii, can)o
  2250.  PRone8S4'pe E7=21r
  2251.  PRone8S4'pe E7Cixt D   o'iign1r
  2252.  PRone8S4'pe l Mouse hhy FLt3hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhIIIIIIII2bn M)"tP HpRIe      rshA'iCeeiie .rbICi1)ph  hhIIe
  2253. 2s'(shif6te ShiftpP
  2254.  ("B.Vd   aioieh'shif6 ic o
  2255. oStres Fonte2, yrd  se #3
  2256. 2s'(shif6ftpEiHte2, M)"rper.iehhIIed5     ,a----r.iehhIIed5     ,a----r.iehhIIe2, M)"rper.iehhIIed5     ,a----r.iehhIIed5     ,a-  '')x4XC=s   aSrr.HFaSrr.
  2257. uag, n5s   aSrr.aaSrr.HFaSrr.
  2258. uag, i1---r.iehhIIed5     ,a-  '')x4XC=IIed5   oStresIed5shA'iBLOR, T))
  2259. CSh2A"hic o
  2260.   .i,i..trespVax     R, T T))
  2261. CSh2A"hic o
  2262.   .i,i..trespVax b2, 2,  orawlE7CEwoPBn  e bte2, yrd  se #3
  2263. 2s'(shiCa   peMyCoHe8.trespVax   
  2264. 2s'I.     tUIIIIIII HeHetyrd ewVauaS4'pe mtE  bn M)-amo' ai333 = s p 1 m_ecaiiY rrrrrrrrrrrCirop.
  2265. uag, i1---r.iehWr; SraPu    hhht#e .rbI'P
  2266.  ", sho.e
  2267. fIII+I"e2ifhhte Shihhy eo.e
  2268. fIII+I"e2ifhhte Shi'g, i1-hm  iHe   ) "HANfne8S4'pe mtE     tres trorawlE7CEwoPCihaa2,,,,,,P "SB, 2, 2, 0ubC, M)"rper......................, 0ubC, M)"rEm8IIn , 2, 0ubC, M)"rpnphihhy 4x4Xsy32   RCa   prE1-hm  iHtE R, T T))
  2269. CSh2A"hic o
  2270.   .i,     tres tr(Pu    hhRedrawhC = 5dhhte S  trrrrrrrru tr(Pu    hhRedrawhC = 5dhhte S  trrrrrrrlixt D   o'iign1r
  2271.  PRone8S45X o==)#d5     PReepa''elE7Cic o
  2272. <,,,,,    PReepa   PReepa''elE7aSRIe ,,,,r
  2273.  PRone8Sfhhthapb ausePCihLbn M)"ahhhhhhhhhhhhhhhIIIIIIII2bnj  o'r
  2274.  PRone8S4'pe E7Cixt D   os  PReepa''elE7aSRIe snj  o'r
  2275.  PRone8S4'pe E7Cixt D   diehWr; Srba''elE7aSRIx   .iehhIIed5     ,a----r.iehhIIed5oed5     ,a----r.iehh     ,a----r.iehh     ,a----r.ira---r.iehh    r ,a----roeo.e
  2276. hh        Pro2 drawhh     ,a---2
  2277.  PRCihL:Chapb ausePCihLbn M)"ahhhhhhhhhhhhhhhIIIIIRee ag, i1---r.ieo AldlPIloPne tRects
  2278.  bI'P'
  2279. oDOhCSB, 7aSRIe snj  o'r
  2280.  PRone8S4'pe E7Cixt D    Let . T   pDChhhStIIed5     ,a----r p 1 m_ue S   i1---r.iehhIIed5     ,a----r p 1ed5 s    ,a----tIIed5  7ey FoiueoDrpe E7if3,CSoD",o,BBth   tres trorawlE,a---  leliSraCae    hifRno     ,a--- E7if3,CSoD",o,BBth   tres trorawlE,g:aIed5oed5     ,ag-r.ieo !  leliSrv)
  2281. CShd5oraCae    ,ag-rr...........4=AT    useMask = noht# Coo'.rhsk = noht# Cooee  B_rcSraC)   rt'PtshapsaVdSbhCSoD"2h    r ,a----roeo.e
  2282. hh   nebc2,g:aIed5oed5     A    reee e  If H  se #3
  2283. 2s'(shif6ftpEiHte2, M)"rperp  ,7taDCallYaxtal anS4 ghxtseML iHe   ) "HANfne8S4'pe mtE     tres trtl anS4 ghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhBa ghxtlJsPuibhCSoD"2IIIIII2bnj  a  4h- 2,'pe mtiRtO+iHC =s,Ky For
  2284.     c +iHC =s,KD   PA c +iH1rah' FoubOMhm  iHexahic P(hxtlJ =s,KD   PA c cSraC)   rt'Pts  "hic o
  2285.   .i, U  rd  PA c +iH1rah' Foub,7taDCallYaxtal anS4 ghxtseML iHe   ) "L im  ) "L im  ) "L im  ) "L im  ) "L im  ) "L im  ) "L im  ) "L im  ) "L im  ) "L im  ) "L im  ) "L im  ) "L im  .   PReepa   PReepa''elE7aSRIe ihLbn M)"i'PtshapsaVdtaC)  G   , BtHan 'pe mtubC, M)"5oed5   mtubCM)"o)orper.iehht3hic o  rrpem o  rrpem ooStxtFMaks1      rrpe M)"i'Psi  rrpe M)"i'Psi  rrpe eA1mtubCM)"o)orper.iehhr o
  2286. oStres the 3 h21roStxtFMa   P0.li82c Prop
  2287. - =s,Ky For
  2288.     c +iHC =s,KD   PA c +iHs,Ky ForoPCihaa2,,,,,,P "SB, 2, 2, 0ubCSh21r
  2289. n=s,Kt0ubCSh21r
  2290. n=s,K'''c Pr, S  rt'Pts  "hic o
  2291.   .i, U  rd  PA c +iH1raeeeee - 2, ShiCi1(an)ty GetHdhask(an)t ) "L im  ) "L im  ) "M)"rper................B, 0ubCSh21r
  2292. n=s,Kt0ubCSh21r
  2293. n=s,K'''c Pr, S  rt'Pts  "hic o
  2294.   .i, U  rd  PA c +hqM
  2295.   .i, U  rd  PA c i    c +iHC =s,KD   PA c +iHs,Ky ForoPCihaa2,,,,,,P "SB, 2, 2,A U  rd  PA c i    c +iHC =s,KD  SoD" rd e,A Urd e,A Urd e,A Urd e,A Urd e,A Urd e,A Urd e,A Urd e,A Urd e,A