*-------------------------------------------------------------------------------------------------------------------------------------------------------- * (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! *-------------------------------------------------------------------------------------------------------------------------------------------------------- *< FOXBIN2PRG: Version="1.21" SourceFile="zoomnavbar.vcx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * * DEFINE CLASS reflectedimage AS image *< CLASSDATA: Baseclass="image" Timestamp="" Scale="Pixels" Uniqueid="" /> * *m: enabled_assign *p: deletedisabledpicture && Internal to the class. Specify if disabled picture must be deleted when control is destroyed. *p: deletepicture && Internal to the class. Specify if picture must be deleted when control is destroyed. *p: disabledpicture && Internal to the class. Specifies the graphic to display when the control is disabled. *p: enabledpicture && Internal to the class. Specifies the graphic to display when the control is enabled. *p: _memberdata && XML Metadata for customizable properties * * BackStyle = 0 deletedisabledpicture = .F. deletepicture = .F. disabledpicture = ("") enabledpicture = ("") Height = 48 Name = "reflectedimage" Stretch = 2 Themes = .F. Width = 48 _memberdata = * PROCEDURE Destroy * Change this method for builder version * Set picture property to a non existant image to avoid * errors while deleting temporary reflected image. This.Picture = "ZoomNavBarFake.bmp" * If This.DeleteDisabledPicture If File(This.DisabledPicture) Clear Resources (This.DisabledPicture) Delete File (This.DisabledPicture) Endif Endif If This.DeletePicture If File(This.EnabledPicture) Clear Resources (This.EnabledPicture) Delete File (This.EnabledPicture) Endif Endif DoDefault() ENDPROC HIDDEN PROCEDURE enabled_assign Lparameters vNewVal With This If m.vNewVal .Picture = .EnabledPicture Else .Picture = .DisabledPicture Endif .Enabled = m.vNewVal Endwith ENDPROC ENDDEFINE DEFINE CLASS separatorimage AS image *< CLASSDATA: Baseclass="image" Timestamp="" Scale="Pixels" Uniqueid="" /> * *m: changetheme *m: initthemedcontrol *p: imageid && Internal to the class. Unique identifier. *p: _memberdata && XML Metadata for customizable properties * * BackStyle = 0 Height = 48 imageid = 0 Name = "separatorimage" Stretch = 2 Themes = .F. Width = 48 _memberdata = * PROCEDURE changetheme With This Local lcMemberName lcMemberName = "" If Upper(.Parent.Name)=="CNTREFLECTED" lcMemberName = "Reflected" Endif .Picture = _Screen.ThemesManager.GetMember("ZoomNavBar."+lcMemberName+"Separator.Picture") Endwith ENDPROC PROCEDURE Init * Change this method for builder version With This .Top = 0 .InitThemedControl() .Visible = .T. Endwith ENDPROC HIDDEN PROCEDURE initthemedcontrol If Not Vartype(_Screen.ThemesManager)=="O" _Screen.Newobject("ThemesManager","ThemesManager","ThemedControls.vcx") Endif This.ChangeTheme() ENDPROC ENDDEFINE DEFINE CLASS stackbutton AS container *< CLASSDATA: Baseclass="container" Timestamp="" Scale="Pixels" Uniqueid="" /> *-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder *< OBJECTDATA: ObjPath="imgBackground" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="lblCaption" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="imgPicture" UniqueID="" Timestamp="" /> * *m: changetheme && Internal to the class. Occurs when theme change. *m: enabled_assign *m: initthemedcontrol && Internal to the class. *p: deletedisabledpicture && Internal to the class. Specify if disabled picture must be deleted when control is destroyed. *p: disabledpicture && Internal to the class. Specifies the graphic to display when the control is disabled. *p: enabledpicture && Internal to the class. Specifies the graphic to display when the control is enabled. *p: _memberdata && XML Metadata for customizable properties * * BackStyle = 0 BorderWidth = 0 deletedisabledpicture = .F. disabledpicture = ("") enabledpicture = ("") Height = 36 Name = "stackbutton" Width = 192 _memberdata = * ADD OBJECT 'imgBackground' AS image WITH ; BackStyle = 0, ; Height = 24, ; Name = "imgBackground", ; Stretch = 2, ; Top = 6, ; Width = 155 *< END OBJECT: BaseClass="image" /> ADD OBJECT 'imgPicture' AS image WITH ; BackStyle = 0, ; Height = 32, ; Left = 157, ; Name = "imgPicture", ; Stretch = 2, ; Top = 2, ; Width = 32 *< END OBJECT: BaseClass="image" /> ADD OBJECT 'lblCaption' AS label WITH ; Alignment = 1, ; BackStyle = 0, ; Caption = "Label1", ; FontBold = .T., ; FontSize = 8, ; ForeColor = 255,255,255, ; Height = 16, ; Left = 5, ; Name = "lblCaption", ; Top = 10, ; Width = 145 *< END OBJECT: BaseClass="label" /> PROCEDURE changetheme && Internal to the class. Occurs when theme change. This.imgBackground.Picture = _Screen.ThemesManager.GetMember("ZoomNavBar.StackButton.Picture") ENDPROC PROCEDURE Destroy * Change this method for builder version * Set picture property to a non existant image to avoid * errors while deleting temporary reflected image. This.imgPicture.Picture = "ZoomNavBarFake.bmp" * If This.DeleteDisabledPicture If File(This.DisabledPicture) Clear Resources (This.DisabledPicture) Delete File (This.DisabledPicture) Endif Endif DoDefault() ENDPROC HIDDEN PROCEDURE enabled_assign Lparameters vNewVal With This If m.vNewVal .imgPicture.Picture = .EnabledPicture Else .imgPicture.Picture = .DisabledPicture Endif .Enabled = m.vNewVal Endwith ENDPROC PROCEDURE Init Lparameters lcCaption, lcPicture, lcDisabledPicture, ; llDeleteDisabledPicture, llEnabled, lnTop With This With .lblCaption .Caption = lcCaption .Width = Txtwidth(lcCaption,.FontName,.FontSize,"B")*; Fontmetric(6,.FontName,.FontSize,"B") Endwith .DeleteDisabledPicture = llDeleteDisabledPicture .DisabledPicture = lcDisabledPicture .EnabledPicture = lcPicture .Enabled = llEnabled .imgBackground.Width = .lblCaption.Width + 10 .Top = lnTop .Width = .imgBackground.Width + ; 5 + .imgPicture.Width .imgPicture.Left = .Width - 2 - .imgPicture.Width If .Width > .Parent.Width .Parent.Width = .Width Endif .InitThemedControl() .Visible = .T. Endwith ENDPROC HIDDEN PROCEDURE initthemedcontrol && Internal to the class. If Not Vartype(_Screen.ThemesManager)=="O" _Screen.Newobject("ThemesManager","ThemesManager","ThemedControls.vcx") Endif This.ChangeTheme() ENDPROC ENDDEFINE DEFINE CLASS stackcontainer AS container *< CLASSDATA: Baseclass="container" Timestamp="" Scale="Pixels" Uniqueid="" /> *-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder *< OBJECTDATA: ObjPath="shpMouseHandler" UniqueID="" Timestamp="" /> * *m: buttonclicked && Occurs when a button is clicked. *m: reposition && Move the stack to the current parent button coordinates. *p: _memberdata && XML Metadata for customizable properties * * BackStyle = 0 BorderWidth = 0 Name = "stackcontainer" Visible = .F. _memberdata = * ADD OBJECT 'shpMouseHandler' AS shape WITH ; Anchor = 15, ; BackStyle = 0, ; BorderStyle = 0, ; Height = 75, ; Name = "shpMouseHandler", ; Width = 75 *< END OBJECT: BaseClass="shape" /> PROCEDURE buttonclicked && Occurs when a button is clicked. ENDPROC PROCEDURE reposition && Move the stack to the current parent button coordinates. Lparameters lnRight, lnTop With This .Left = lnRight - .Width .Top = lnTop - .Height .shpMouseHandler.ZOrder(0) .Visible = .T. Endwith ENDPROC PROCEDURE shpMouseHandler.Click This.Visible = .F. Local loObject, lcButton, llEnabled loObject = Sys(1270) llEnabled = .T. Do Case Case Upper(loObject.Class)=="STACKBUTTON" lcButton = loObject.Name llEnabled = loObject.Enabled Case Upper(loObject.Parent.Class)=="STACKBUTTON" lcButton = loObject.Parent.Name llEnabled = loObject.Parent.Enabled Endcase loObject = Null This.Visible = .T. If llEnabled This.Parent.Visible = .F. If Not Empty(lcButton) This.Parent.ButtonClicked(lcButton) Endif Endif ENDPROC PROCEDURE shpMouseHandler.MouseLeave Lparameters nButton, nShift, nXCoord, nYCoord This.Parent.Visible = .F. ENDPROC ENDDEFINE DEFINE CLASS zoomimage AS image *< CLASSDATA: Baseclass="image" Timestamp="" Scale="Pixels" Uniqueid="" /> * *m: enabled_assign *p: deletedisabledpicture && Internal to the class. Specify if disabled picture must be deleted when control is destroyed. *p: description && Button's function description. *p: disabledpicture && Internal to the class. Specifies the graphic to display when the control is disabled. *p: enabledpicture && Internal to the class. Specifies the graphic to display when the control is enabled. *p: imageid && Internal to the class. Unique identifier. *p: stack && Internal to the class. A pointer to an StackContainer object. *p: _memberdata && XML Metadata for customizable properties * * BackStyle = 0 deletedisabledpicture = .F. disabledpicture = ("") enabledpicture = ("") Height = 48 imageid = 0 Name = "zoomimage" stack = .F. Stretch = 2 Themes = .F. Width = 48 _memberdata = * PROCEDURE Click With This.Parent.Parent If Vartype(This.Stack)=="O" Bindevent(This.Stack,"ButtonClicked",This.Parent.Parent,"StackButtonClicked",1) Bindevent(This.Stack.shpMouseHandler,"MouseLeave",This,"MouseLeave",1) This.Stack.RePosition(.Left+This.Left+This.Width,.Top+3) Else .ButtonClicked(.ActiveButtonName) Endif Endwith ENDPROC PROCEDURE Destroy This.Stack = Null * Change this method for builder version * Set picture property to a non existant image to avoid * errors while deleting temporary reflected image. This.Picture = "ZoomNavBarFake.bmp" * If This.DeleteDisabledPicture If File(This.DisabledPicture) Clear Resources (This.DisabledPicture) Delete File (This.DisabledPicture) Endif Endif DoDefault() ENDPROC HIDDEN PROCEDURE enabled_assign Lparameters vNewVal With This If m.vNewVal .Picture = .EnabledPicture Else .Picture = .DisabledPicture Endif .Enabled = m.vNewVal Endwith ENDPROC PROCEDURE MouseEnter Lparameters nButton, nShift, nXCoord, nYCoord This.Parent.Parent.ActiveButtonName = This.Name This.Parent.Parent.ActiveButtonNumber = This.ImageID This.Parent.Parent.RearrangeButtons() * With This.Parent.Parent With .Ctl32_BalloonTip .ctlVisible = .F. .ctlFadeIn = .T. .ctlFadeOut = .T. .ctlOffsetY = 1 .ctlAlignment = 6 .ctlPosition = 6 .ctlPositionStyle = 4 .ctlHideDelay = 10000 .ctlCapsLockStyle = 0 .ctlText = This.Description .ctlVisible = .T. Endwith Endwith ENDPROC PROCEDURE MouseLeave Lparameters nButton, nShift, nXCoord, nYCoord * With This.Parent.Parent With .Ctl32_BalloonTip If .ctlVisible .ctlVisible = .F. Endif Endwith Endwith * Local llStack llStack = (Vartype(This.Stack)=="O") If Not (llStack And This.Stack.Visible) If llStack Unbindevents(This.Stack,"ButtonClicked",This.Parent.Parent,"StackButtonClicked") Unbindevents(This.Stack.shpMouseHandler,"MouseLeave",This,"MouseLeave") Endif This.Parent.Parent.Parent.Refresh() This.Parent.Parent.ActiveButtonName = "None" This.Parent.Parent.ActiveButtonNumber = 0 This.Parent.Parent.RearrangeButtons() Endif ENDPROC ENDDEFINE DEFINE CLASS zoomnavbar AS container *< CLASSDATA: Baseclass="container" Timestamp="" Scale="Pixels" Uniqueid="" /> *-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder *< OBJECTDATA: ObjPath="imgBackground" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="shpMouseHandler" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="Ctl32_BalloonTip" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="cntZoom" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="cntReflected" UniqueID="" Timestamp="" /> * *m: addbutton && Add a new button. *m: addstackbutton && Add a new stack button. *m: buttonclicked && Occurs when a button is clicked. *m: changetheme && Internal to the class. Occurs when theme change. *m: createadditionalimages && Internal to the class. Create necessary images to achieve the effects. *m: initthemedcontrol && Internal to the class. *m: rearrangebuttons && Internal to the class. Rearrange buttons to show in correctly position. *m: setbuttonstate && Set the button state: enabled or disabled. *m: setstackbuttonstate && Set the stack button state: enabled or disabled. *m: stackbuttonclicked && Occurs when a stack button is clicked. *p: activebuttonname && Internal to the class. Contain the name of the active (zoomed) button. *p: activebuttonnumber && Internal to the class. Contain the number of the active (zoomed) button. *p: custombuilder *p: stretch && Specify if the bar is stretched or not. *p: version && ZoomNavBar version. *p: _memberdata && XML Metadata for customizable properties * PROTECTED version * activebuttonname = ("None") activebuttonnumber = 0 Anchor = 14 BackStyle = 0 BorderWidth = 0 custombuilder = Double click here to open Builder Height = 125 Name = "zoomnavbar" version = 3.5.0 Width = 200 _memberdata = * ADD OBJECT 'cntReflected' AS container WITH ; BackStyle = 0, ; BorderWidth = 0, ; Height = 24, ; Left = 0, ; Name = "cntReflected", ; Top = 99, ; Width = 200 *< END OBJECT: BaseClass="container" /> ADD OBJECT 'cntZoom' AS container WITH ; BackStyle = 0, ; BorderWidth = 0, ; Height = 96, ; Left = 0, ; Name = "cntZoom", ; Top = 3, ; Width = 200 *< END OBJECT: BaseClass="container" /> ADD OBJECT 'Ctl32_BalloonTip' AS ctl32_balloontip WITH ; Height = 0, ; Name = "Ctl32_BalloonTip", ; Width = 0, ; tmrHide.Name = "tmrHide", ; lblname.Name = "lblname", ; tmrShow.Name = "tmrShow" *< END OBJECT: ClassLib="ctl32.vcx" BaseClass="container" /> ADD OBJECT 'imgBackground' AS image WITH ; BackStyle = 0, ; BorderStyle = 1, ; Height = 0, ; Left = 0, ; Name = "imgBackground", ; Stretch = 2, ; Themes = .F., ; Top = 75, ; Width = 0 *< END OBJECT: BaseClass="image" /> ADD OBJECT 'shpMouseHandler' AS shape WITH ; BackStyle = 0, ; BorderStyle = 0, ; Height = 3, ; Name = "shpMouseHandler", ; Width = 200 *< END OBJECT: BaseClass="shape" /> PROCEDURE addbutton && Add a new button. Lparameters lcName, lcDescription, ; lcPicture, lcReflectedPicture, ; lcDisabledPicture, lcDisabledReflectedPicture, ; llEnabled If Pcount()<7 * To avoid changes to this method call when upgrading from previous versions llEnabled = .T. Endif With This Local lcClassLibrary, lnControlCount lcClassLibrary = "ZoomNavBar.vcx" lnControlCount = .cntZoom.ControlCount+1 If Upper(lcName)=="SEPARATOR" lcName = lcName + Alltrim(Transform(lnControlCount)) .cntZoom.Newobject( lcName,"SeparatorImage",lcClassLibrary ) .cntReflected.Newobject( lcName,"SeparatorImage",lcClassLibrary ) Else Local llCreateReflectedPicture, llCreateDisabledPicture, llCreateDisabledReflectedPicture lcPicture = Fullpath(lcPicture) * If Empty(lcReflectedPicture) lcReflectedPicture = Addbs(_Screen.ThemesManager.TempFolder) + ; Juststem(lcPicture) + "_Reflected." + Justext(lcPicture) Endif llCreateReflectedPicture = Not File(lcReflectedPicture) If Empty(lcDisabledPicture) lcDisabledPicture = Addbs(_Screen.ThemesManager.TempFolder) + ; Juststem(lcPicture) + "_Disabled." + Justext(lcPicture) Endif llCreateDisabledPicture = Not File(lcDisabledPicture) If Empty(lcDisabledReflectedPicture) lcDisabledReflectedPicture = Addbs(_Screen.ThemesManager.TempFolder) + ; Juststem(lcPicture) + "_DisabledReflected." + Justext(lcPicture) Endif llCreateDisabledReflectedPicture = Not File(lcDisabledReflectedPicture) * If llCreateReflectedPicture Or llCreateDisabledPicture Or llCreateDisabledReflectedPicture .CreateAdditionalImages(lcPicture,; Iif(llCreateReflectedPicture,lcReflectedPicture,""),; Iif(llCreateDisabledPicture,lcDisabledPicture,""),; Iif(llCreateDisabledReflectedPicture,lcDisabledReflectedPicture,"")) Endif * .cntZoom.Newobject( lcName,"ZoomImage",lcClassLibrary ) With .cntZoom.Controls(lnControlCount) .DeleteDisabledPicture = llCreateDisabledPicture .Description = lcDescription .DisabledPicture = lcDisabledPicture .EnabledPicture = lcPicture .ImageID = lnControlCount .Top = 48 .Visible = .T. Endwith * .cntReflected.Newobject( lcName,"ReflectedImage",lcClassLibrary ) With .cntReflected.Controls(lnControlCount) .DeleteDisabledPicture = llCreateDisabledReflectedPicture .DeletePicture = llCreateReflectedPicture .DisabledPicture = lcDisabledReflectedPicture .EnabledPicture = lcReflectedPicture .Top = 0 .Visible = .T. Endwith * .SetButtonState(lcName,llEnabled) Endif If Upper(Thisform.BaseClass)=="TOOLBAR" This.Width = (lnControlCount*48)+48+24+24+12 Endif .ReArrangeButtons() Endwith ENDPROC PROCEDURE addstackbutton && Add a new stack button. Lparameters lcParent, lcName, lcCaption, ; lcPicture, lcDisabledPicture, llEnabled If Pcount()<6 * To avoid changes to this method call when upgrading from previous versions llEnabled = .T. Endif If Not Upper(Thisform.BaseClass)=="TOOLBAR" If Pemstatus(This.cntZoom,lcParent,5) * Local llCreateDisabledPicture lcPicture = Fullpath(lcPicture) If Empty(lcDisabledPicture) lcDisabledPicture = Addbs(_Screen.ThemesManager.TempFolder) + ; Juststem(lcPicture) + "_Disabled." + Justext(lcPicture) Endif llCreateDisabledPicture = Not File(lcDisabledPicture) If llCreateDisabledPicture .CreateAdditionalImages(lcPicture,"",; Iif(llCreateDisabledPicture,lcDisabledPicture,""),; "") Endif * Local lcClassLibrary, loParent, lnTop lcClassLibrary = "ZoomNavBar.vcx" loParent = Evaluate("This.cntZoom."+lcParent) If Not Vartype(loParent.Stack)=="O" Local lcStackName lcStackName = "Stack_"+loParent.Name Thisform.Newobject(lcStackName,"StackContainer",lcClassLibrary) loParent.Stack = Evaluate("Thisform."+lcStackName) Endif lnTop = ((loParent.Stack.ControlCount-1)*36) loParent.Stack.Newobject(lcName,"StackButton",lcClassLibrary,,; lcCaption,lcPicture,lcDisabledPicture,llCreateDisabledPicture,llEnabled,lnTop) loParent.Stack.Controls(loParent.Stack.ControlCount).ChangeTheme() * Local lnHeight, loStackButton lnHeight = 0 For Each loStackButton In loParent.Stack.Controls With loStackButton If Upper(loStackButton.Class)=="STACKBUTTON" lnHeight = lnHeight + .Height .Left = loParent.Stack.Width - .Width Endif Endwith Endfor loParent.Stack.Height = lnHeight * Store Null To loStackButton, loParent Endif Endif ENDPROC PROCEDURE buttonclicked && Occurs when a button is clicked. Lparameters lcName ENDPROC PROCEDURE changetheme && Internal to the class. Occurs when theme change. With This.imgBackground .BorderColor = _Screen.ThemesManager.GetMember("Container.BorderColor") .Picture = _Screen.ThemesManager.GetMember("ZoomNavBar.Bar.Picture") Endwith ENDPROC PROCEDURE createadditionalimages && Internal to the class. Create necessary images to achieve the effects. Lparameters lcPicture, lcReflectedPicture, ; lcDisabledPicture, lcDisabledReflectedPicture If Not Vartype(_Screen.System)=="O" Do System.App && Init GDIPlusX Endif Local loBitmap As xfcBitmap, loClrMatrix As xfcColorMatrix With _Screen.System.Drawing If Not Empty(lcReflectedPicture) Or Not Empty(lcDisabledReflectedPicture) loBitmap = .Bitmap.New(lcPicture) loBitmap.RotateFlip(.RotateFlipType.Rotate180FlipX) loClrMatrix = .Imaging.ColorMatrix.New() loClrMatrix.Matrix33 = 0.3 loBitmap.ApplyColorMatrix(loClrMatrix) If Not Empty(lcReflectedPicture) loBitmap.Save(lcReflectedPicture,.Imaging.ImageFormat.Png) Endif If Not Empty(lcDisabledReflectedPicture) loClrMatrix = _Screen.System.Drawing.Imaging.ColorMatrix.New( ; .299, .299, .299, 0, 0, ; .587, .587, .587, 0, 0, ; .114, .114, .114, 0, 0, ; 0 , 0, 0, 1, 0, ; 0 , 0, 0, 0, 1) loBitmap.ApplyColorMatrix(loClrMatrix) loBitmap.Save(lcDisabledReflectedPicture,.Imaging.ImageFormat.Png) Endif Endif * If Not Empty(lcDisabledPicture) loBitmap = .Bitmap.New(lcPicture) loClrMatrix = _Screen.System.Drawing.Imaging.ColorMatrix.New( ; .299, .299, .299, 0, 0, ; .587, .587, .587, 0, 0, ; .114, .114, .114, 0, 0, ; 0 , 0, 0, 1, 0, ; 0 , 0, 0, 0, 1) loBitmap.ApplyColorMatrix(loClrMatrix) loBitmap.Save(lcDisabledPicture,.Imaging.ImageFormat.Png) Endif * Endwith Store Null To loBitmap, loClrMatrix ENDPROC PROCEDURE Init Thisform.ShowTips = .T. This.InitThemedControl() ENDPROC HIDDEN PROCEDURE initthemedcontrol && Internal to the class. If Not Vartype(_Screen.ThemesManager)=="O" _Screen.Newobject("ThemesManager","ThemesManager","ThemedControls.vcx") Endif This.ChangeTheme() ENDPROC PROCEDURE rearrangebuttons && Internal to the class. Rearrange buttons to show in correctly position. Local lnActiveButton lnActiveButton = This.ActiveButtonNumber With This.cntZoom Local lnControlCount, lnZoomOffset, lnLeft, lnButton, lnWidth lnControlCount = .ControlCount If lnActiveButton==0 lnZoomOffset = 0 Else lnZoomOffset = 48 If lnActiveButton>1 And Not ; Upper(.Controls(lnActiveButton-1).Class)=="SEPARATORIMAGE" lnZoomOffset = lnZoomOffset + 24 Endif If lnActiveButton0 And ; lnActiveButton==.ImageID .Top = 0 lnWidth = 96 Else If Not Upper(.Class)=="SEPARATORIMAGE" And ; lnActiveButton>0 And ; Inlist(.ImageID,lnActiveButton-1,; lnActiveButton+1) .Top = 24 lnWidth = 72 Else .Top = 48 lnWidth = 48 Endif Endif Store lnWidth To .Height, .Width, ; This.cntReflected.Controls(lnButton).Height, ; This.cntReflected.Controls(lnButton).Width lnLeft = lnLeft + lnWidth Endwith Next * If Not This.Stretch And lnControlCount>0 With This.cntZoom This.imgBackground.Left = .Controls(1).Left - 6 This.imgBackground.Width = (.Controls(lnControlCount).Left + ; .Controls(lnControlCount).Width) - This.imgBackground.Left + 6 Endwith Endif Endwith ENDPROC PROCEDURE Resize DoDefault() With This .shpMouseHandler.Width = .Width .cntZoom.Width = .Width .cntReflected.Width = .Width If .Stretch .imgBackground.Width = .Width Endif .ReArrangeButtons() Endwith ENDPROC PROCEDURE setbuttonstate && Set the button state: enabled or disabled. Lparameters lcButton, llEnabled Store llEnabled To ; This.cntZoom.&lcButton..Enabled, ; This.cntReflected.&lcButton..Enabled ENDPROC PROCEDURE setstackbuttonstate && Set the stack button state: enabled or disabled. Lparameters lcButton, lcStackButton, llEnabled This.cntZoom.&lcButton..Stack.&lcStackButton..Enabled = llEnabled ENDPROC PROCEDURE stackbuttonclicked && Occurs when a stack button is clicked. Lparameters lcName ENDPROC PROCEDURE imgBackground.Init This.Height = 50 ENDPROC PROCEDURE shpMouseHandler.MouseEnter Lparameters nButton, nShift, nXCoord, nYCoord With This.Parent If Not .ActiveButtonName = "None" .ActiveButtonName = "None" .ActiveButtonNumber = 0 .RearrangeButtons() Endif Endwith ENDPROC ENDDEFINE