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
Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
Private Const COLOR_HIGHLIGHT = 13
Private Const COLOR_BTNFACE = 15
Private Const COLOR_BTNSHADOW = 16
Private Const COLOR_BTNTEXT = 18
Private Const COLOR_BTNHIGHLIGHT = 20
Private Const COLOR_BTNDKSHADOW = 21
Private Const COLOR_BTNLIGHT = 22
Private Declare Function OleTranslateColor Lib "oleaut32.dll" (ByVal lOleColor As Long, ByVal lHPalette As Long, lColorRef As Long) As Long
Private Declare Function GetBkColor Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function GetTextColor Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
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
Private Const DT_CALCRECT = &H400
Private Const DT_WORDBREAK = &H10
Private Const DT_CENTER = &H1 Or DT_WORDBREAK Or &H4
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Private Declare Function FrameRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Private Declare Function DrawFocusRect Lib "user32" (ByVal hdc As Long, lpRect As RECT) As Long
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
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, lpPoint As POINTAPI) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Const PS_SOLID = 0
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
Private Const RGN_DIFF = 4
Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Private Declare Function InflateRect Lib "user32" (lpRect As RECT, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function OffsetRect Lib "user32" (lpRect As RECT, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function CopyRect Lib "user32" (lpDestRect As RECT, lpSourceRect As RECT) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function SetCapture Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
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
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
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
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
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
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
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Type BITMAPINFOHEADER
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
Private Type RGBTRIPLE
rgbBlue As Byte
rgbGreen As Byte
rgbRed As Byte
End Type
Private Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors As RGBTRIPLE
End Type
Public Enum ButtonTypes
[Windows 16-bit] = 1 'the old-fashioned Win16 button
[Windows 32-bit] = 2 'the classic windows button
[Windows XP] = 3 'the new brand XP button totally owner-drawn
[Mac] = 4 'i suppose it looks exactly as a Mac button... i took the style from a GetRight skin!!!
[Java metal] = 5 'there are also other styles but not so different from windows one
[Netscape 6] = 6 'this is the button displayed in web-pages, it also appears in some java apps
[Simple Flat] = 7 'the standard flat button seen on toolbars
[Flat Highlight] = 8 'again the flat button but this one has no border until the mouse is over it
[Office XP] = 9 'the new Office XP button
'[MacOS-X] = 10 'this is a plan for the future...
[Transparent] = 11 'suggested from a user...
[3D Hover] = 12 'took this one from "Noteworthy Composer" toolbal
[Oval Flat] = 13 'a simple Oval Button
[KDE 2] = 14 'the great standard KDE2 button!
End Enum
Public Enum ColorTypes
[Use Windows] = 1
[Custom] = 2
[Force Standard] = 3
[Use Container] = 4
End Enum
Public Enum PicPositions
cbLeft = 0
cbRight = 1
cbTop = 2
cbBottom = 3
cbBackground = 4
End Enum
Public Enum fx
cbNone = 0
cbEmbossed = 1
cbEngraved = 2
cbShadowed = 3
End Enum
Private Const FXDEPTH As Long = &H28
'events
Public Event Click()
Attribute Click.VB_MemberFlags = "200"
Public Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Public Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Public Event MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Public Event KeyPress(KeyAscii As Integer)
Public Event KeyDown(KeyCode As Integer, Shift As Integer)
Public Event KeyUp(KeyCode As Integer, Shift As Integer)
Public Event MouseOver()
Public Event MouseOut()
'variables
Private MyButtonType As ButtonTypes
Private MyColorType As ColorTypes
Private PicPosition As PicPositions
Private SFX As fx 'font and picture effects
Private He As Long 'the height of the button
Private Wi As Long 'the width of the button
Private BackC As Long 'back color
Private BackO As Long 'back color when mouse is over
Private ForeC As Long 'fore color
Private ForeO As Long 'fore color when mouse is over
Private MaskC As Long 'mask color
Private OXPb As Long, OXPf As Long
Private useMask As Boolean, useGrey As Boolean
Private useHand As Boolean
Private picNormal As StdPicture, picHover As StdPicture
Private pDC As Long, pBM As Long, oBM As Long 'used for the treansparent button
Private elTex As String 'current text
Private rc As RECT, rc2 As RECT, rc3 As RECT, fc As POINTAPI 'text and focus rect locations
Private picPT As POINTAPI, picSZ As POINTAPI 'picture Position & Size
Private rgnNorm As Long
Private LastButton As Byte, LastKeyDown As Byte
Private isEnabled As Boolean, isSoft As Boolean
Private HasFocus As Boolean, showFocusR As Boolean
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
Private lastStat As Byte, TE As String, isShown As Boolean 'used to avoid unnecessary repaints
Private isOver As Boolean, inLoop As Boolean
Private Locked As Boolean
Private captOpt As Long
Private isCheckbox As Boolean, cValue As Boolean
Private Sub OverTimer_Timer()
If Not isMouseOver Then
OverTimer.Enabled = False
isOver = False
Call Redraw(0, True)
RaiseEvent MouseOut
End If
End Sub
Private Sub UserControl_AccessKeyPress(KeyAscii As Integer)
LastButton = 1
Call UserControl_Click
End Sub
Private Sub UserControl_AmbientChanged(PropertyName As String)
If Not MyColorType = [Custom] Then
Call SetColors
Call Redraw(lastStat, True)
End If
End Sub
Private Sub UserControl_Click()
If LastButton = 1 And isEnabled Then
If isCheckbox Then cValue = Not cValue
Call Redraw(0, True) 'be sure that the normal status is drawn
UserControl.Refresh
RaiseEvent Click
End If
End Sub
Private Sub UserControl_DblClick()
If LastButton = 1 Then
Call UserControl_MouseDown(1, 0, 0, 0)
SetCapture hWnd
End If
End Sub
Private Sub UserControl_GotFocus()
HasFocus = True
Call Redraw(lastStat, True)
End Sub
Private Sub UserControl_Hide()
isShown = False
End Sub
Private Sub UserControl_Initialize()
'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...
isShown = True
End Sub
Private Sub UserControl_KeyDown(KeyCode As Integer, Shift As Integer)
RaiseEvent KeyDown(KeyCode, Shift)
LastKeyDown = KeyCode
Select Case KeyCode
Case 32 'spacebar pressed
Call Redraw(2, False)
Case 39, 40 'right and down arrows
SendKeys "{Tab}"
Case 37, 38 'left and up arrows
SendKeys "+{Tab}"
End Select
End Sub
Private Sub UserControl_KeyPress(KeyAscii As Integer)
RaiseEvent KeyPress(KeyAscii)
End Sub
Private Sub UserControl_KeyUp(KeyCode As Integer, Shift As Integer)
RaiseEvent KeyUp(KeyCode, Shift)
If (KeyCode = 32) And (LastKeyDown = 32) Then 'spacebar pressed, and not cancelled by the user
peFseDrawLin- 2angle 01OwFrame e e e e e e e e e e e e)s Bo He - nteger, svel = isSof2, ShiftCi , He - 2, cWi - 3, 3,EiftCHe - () As MoE= isSof2, ShiftCi d If
t) e e e e rTrue)
PropertyChanged:5 e e e e e aawLine WLin- 2anglKOCON"
End Property
Public Property ine WLine DrawRectangle 0, 0, Wi, He, OXPb, True
MoEN isp , pDC, 0, 0, vbSrcCopy
Call DrawCaption(Abs(isOver))
Call le 0, k
t) e e e e rTrue)
PropertyChang rue
c e e i -2LCT, r'c e e i -2LCT, r'c e e i -2LCT, r'c e e i -2LCT,l 2, He - 2, ShiftColor(cbit MyButtonType = [Flat Hirue
e-i - 3, He - 3, XPFace
ce XP
c e e - 3, &H6BCBFF, Wi, H , o Propeil DrawFocusR
Oe this picture immediately
PropertyChanged "PICOWi - 2, He - 2, cShadow
WcShaDraw WcShaDraw WcShais ppertyChanged "PICOWi - 2, He - 2, cShat) e egle rButtonType = [Flat Hirue
Wi, He, cDarkFFFFXaptAbs( Useo &tAbs( Useo &tAbs( Useo &taptAb - () As MoE= isSof2, Shil = prevB- (db - () As MoE====uEsne 2, B ,oA3y As Me 1 e = .ReadPirRdePiColFlat Hirue
"
i -&H40)
LPR-&H40)
"
YcTrue
ConTypeeEvent MouseMovPFace
. False
Calue
all Redraw(2, False)
isOver = False
ConTypepctCo 3k
End If
, 12 'Flat buttons
e e rTawLine WLin- 28 e e rTawLse
ns
Call DrawCaption(2"
End Property
Public i -&H40)
XPFacypepctCo ntete hWnd.VB_UserM -&H40)
LPiCte0, 0, WWi, m awLin- 2,
Public Propel, 0, WWi, mSe DrawRectangleWWi, mSe ic P mSeopel, 0, WWi, mSe DraEypepctCo ntet, 2, .ReadProperty("Pp Case W DrawEllipse 0, 0, Wi, He, cDai, c i -&H40)
XPAsDefault Then
57 c ver))
Call A BitBlt hdc, 0, 0, Wi, He, pDChWnd.VB_Us2DCol} &H DrawElRectangleW 40), hat) e egle rButtonType = 2, B ,cus Or Ambient.Display=Sxe egle rBisplay=Sxe egle rBis DrawLine
l Redraw(False
Shadow, cShiftColor(Wi, D ,oA36 hat) e eglidraw(Falrr))
Call A r))
2, He=Sxe ,oA36 hat) e eglidraall A r))
2, He=Sxe ,oA36 hatWLit hdc, 0, 0, Wie
l Redraw(False
2, He=Sxe ,oA36 hatWLit hdc, 0, 0, Wie
l Redraw(False
2, Hes( Useo &tA
2, F m0, 0draw(False
28 d Case 5 'Java
o
lTex), rc, DT_CENTER
'Po C
l, Fudi,DT_CENTER
P
d"Case stepXP1 ====YPE", 2)
elTex = .ReadProperty("TX"+p ehing Then Call Redraw(lastStat, T<- 2,butt,ropert ehing Then Call Redraw((4SelTex = .ReadProperty("T2,
&H40) v r'c e e i -2LC(n Color( e e e e e e e e il, 0, WWi, mSS2LC(n =in( ee e e eN.n Color( e e e e cie il, 0, WWi, mS6u"PICOW'So if you wSo if you wSo if y
mSetPixel 2, el 2,o , He - 3,H &H Ca ", 22, el 2,o , He &H_coTrue
If He Then Call Redraw(0, True)4a4G-Col 3,H DrawFocusR
Case 11 'transparesparesparesparesparesparespares w3erne 2, B , Case 5 'Jalr w3erne 2, B , C'Jalr heP Nex< w3ern ColWi, mSS2LC(n =in( ee e
DrawFTsespar Then
'#@#@#@#@#@# BUTTONtect = se Draw.1oX B , =7e BUTTOColor(c# BUTlor(c# BUTlor(uypeol} *xrrue= 2)=xel Wi - 2, 2,l W Case MyButtonTypnmSS2LC(n =in( ern ColWi, hif
2, 2,l eeEvent MouseMoht
Cs Cs Ck a"BCO PrlsDr W P6 Case
c e e - 3,3HighLight, cShadow, cLight, False
ine Wi - e eol}Falseeol}play=Sxe egl )Wi - e eol}Falseeol}plaeee)
gl P- 1, fv<SetPixU(FalsDrawR e)T Case X D 3FocuEieolB, 2, He - 3, y=Sxe egl )Wi - e eol}Falseeol}plaeee)
gl P- 1, fv<SetPixU(FalsDr}plaeee)
gl P- im'&H8),ect = se Draw.1oX B , =7e BUTTOColor(c# BUTlor(c# BUTlor(uypeol} *xrrue= 2)=xel Wi }
m B lor(c# BUTlue
s) TTOColor(c# BUTlor(color(XPFace, E:xe e lor(color(XPFace, E:xe e lor(color(XPFace, E:xer(color(transparentdraw(Fae)Arawin( ee Aed = isEnabled
PropertyChanged "ENAB"
Es w3erne 2,p &HCC9999, TrecsEnabled
PropertyChanged "ENAB" &HCC9999r(tl), hat) e egle rButtonType = 2, B ,cus Or Ambient.DisFalsDrawR e)3erne awLine3erne 2, B , PFaceier ghLight, cShadow, cLighdraw(F }
m B loruerM -&H40)
LPiCte0, 0, WWi lor(color(XPFO12 'Fl= w3e"5r'c e e i -2LC(n Coee)
gl ,Uc, 2, H) e egle rButtonType = 2, B .Wriapt5color(XPFO1Teol}Falseeol}plaeee)
gl Face,rawR e)3erne awLine = 2, B . 3FU Cs Cs Ck a"BCO 3, y=Uture
Attribute Mou
lseeoe Cs Cs Ck a"BCO 3, y=Uture
Attribute Mou
lseeoe Cs Cs Ck E>O1all .WrieudProperty("VAL Cs lm anged "ENAB"
PE", lor(coloreoe lm anged "ENAB"
Cs 2, 1,
Pr- 1, fv<S6s 2, r ute = DrawLine 2, 1, WirawLine 2,el Wi }
m B lor(c# BUTlue
, 1)iinensparesparesparespareseo &tAbs Al Wi }
mesp_cShadow, -&H30), True
R
End Select
anged "EDkine 2, He - 2, Wi - 2, He - 2, cHighLight
c"
End Property
Pub Select
ouritePropert
anged "eao FacFalsene 2 "
E awCaption(AbCol 3,H eIE0o(" 3FU Cs Cs Cmiuuuu 2, Wi SS2LC(n =in( ee e e eN.n Color( e e e e cie a"BCOao FacFaNext
_(AbCol
ehing Then Calle e e e e e e angedHe - =Fal- 3,ert
anged "eao FacFalsene 2 Wi SS2LC(n =in( ee e e eN.n Color( e, TrecsEnable=in( eeCOao FaWi, D ,oA36 hat) eREnabled
c e e - 3,3H *xrriftColor(tol} *xrcTO36LopeTR, Geled
EnlWi, hif
- eaV_FalsDra6LopeTR, Geled
EnlWi, hif
, True
Cs Ck E>O1allDrawLineWi,edHe6Loperty("TR, GetSysColo6Lo
alle Loperty(" e alle LodCallf
,0)
LPiCte
c e e - 3,3H *xrrift6Lo Re
RkSh
gl FwR Dra - DrawLine Wi - 2, 2, Wi -is/her desk Cs Cmiuui O1Teol}FalDrawRectangle 1, 1, Wi e=Sxe ,ond Prope Trz A36L2, WPi ,ond Prope Trz PrEuee e eN.n Color( e e ene 2,p &HCeolB, 2, He - 3, y=Sxe eU(FalsDr}plaeee)
gl A36L2, WPi ,ond P,o :(l R miuui O1Teol}FalDrxe eU(glidRectangle 1, 1, Wi eI Wi, Hightangle3 eIE0)
XPFacS
S
S
Sn miuui O1Teol} DrawRecta82r Wi - 2, 1,S
ky mi mi Case 5 'Jalr w3erneeN.n Color( e e LineWi, A36Loperty1,S
ky mi mi Case 5 'Jall i - 3ci - 3ci - 36LdCallf
,0)aw(Fy1,He - 2 Cs Cs Ck a"BCO PrlsDr W P6 Case } *xrcTO36LopeTR, Geled
EnlWi,)O36LopeTRH0,r we LineWi, A3Wi,W DrawEllipse 0, 0, W LineWi,(R a"BCO PrlsDr(A), TrurawCaptionhen Ca"ipse 0, 0, W Line)
ky mi mi C:c_i - tl 'tran immediate DrawRectangle 0ect-ru
Cs Cs Ck &H40) v r',nM Cs Cs Ck &H40) DrawReg is drawn here 3, yrcTO36Lfaw ,oA3y As M- r(,e Hig M- r(mnarkS6 hatWLit hdc, 0, 0, Wie
k &H40) DrawReg is drawnc(tol} *xr WcSh DrawReg is d Dra6LopeTR, Geledt
Shadow, -i,A is d Dra6LopeTR, i - 3ci - 3ci= isSof2, SLrty
Public Prleaurcu3ci= M eIE0o( hatWLit hdc,cSha ise 5i-&Hori-&H40)w=sR
egld P( -2LCu lor(c#nabled,cSh"Yu2Liw, -iaeI -iaeguo He
leaurcu3ci= M eI yrcTO36Lfaw ,oA3y As M- r(,e Hig M- r(mnarkS6 hatWLit hdc, 0, 0e5h, mSetPiPixel 1, HepeTR, i - w Abs(MyCol- 2, B . 3FU Wi - 2, 2, Wi -,uB,dged "EDkine 2, He - 2, Wi - 2, He - 2, cHighLlFU W_< fv<Sethad, Wi -,uB,dg, Wi 0, 1, cHighLightnLx"tur He - 2, c+ 4, fc.Y + 2, &HCC9999, True
Case 6 'C999wRecVAL e3 eIE0)
XPFacS
ou
angle f4rE0)
, Wi, He, Shi3IE0)
me 2, He - 2, Wi it hdc, 0,L mSetP(
hatWLit hdc, 0, Ck &H40) v r'(l OlDraanglw0, Ck &H40) v r'(l Ol36 0,L me 2e 2, He - 2, Wi it hdc, 0,L 0lorR gle v Call DrasWi it hdcCase 3 'Windows XP
stepXP1 = 25ws XP
m stepXP1)w= t HirauE 2e 2, He - 2, Wi it hdcl P6 2e 2, He - 2, Wi it hdcl P6 2e 2, He Wi - 4, Hee - 2, Wi it hdcl P6 23 3ci - 2e 2, He - 2, WEMXPFace,n
mB2e 2, He 1N-0, Wi, He, sR
Caaaaaaaaaaan CeH WWi, mSS2S2S2S WW0lor- 6, cH=2mSS2S2S2Sp(XPFack mSS2S2iie - m stepX egld P( -2LCu lor(c#nabled,cSh- 2, , -iaeI -iaeguo He
r+ v r'3O( -2LC=bT2w+ ", 22, ScShadolseeoe . r'True
n DrawRere)cL", Wi - eoO3O3 - 3cure
r'( -2Wi - 2b3O3O3O3"_ buolor3 a Elsdo fiept
gs TR, i - 3cd If
ui( v r', Wi i i - 3c:6XO v r', Wi i i - 3c3ci - 3ci= isSof2, S122, v r', W Integer,12 'cd ci -SetviLine 2, 2, 2, Ho He= tSysColor(COLO2, 2, e i 16L22M-BO6 6 0ise 5in2, Ho He= solo9TT2wTO3O3 yrcTO36Lfaw ,oA3y As Mem Eaaaaaaaaaan CeH