*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.21" SourceFile="outlooknavbar.vcx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
*
DEFINE CLASS outlooknavbar 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="PanelVertical" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Title" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="OverflowPanel" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="ShrinkButton" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Panel" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Splitter" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Panes" UniqueID="" Timestamp="" />
*
*m: beforechangeselectedbutton
*m: buttonclicked && Occurs when a button is clicked.
*m: changetheme && Occurs when theme change.
*m: changeviewmode && Change control state (shrunk or not).
*m: inainte_de_showless
*m: inainte_de_showmore
*m: initthemedcontrol
*m: rearrangebuttons && Internal to the class. Rearrange buttons to show in correctly order and position.
*m: repositioncontrols && Reposition all controls inside OutlookNavBar to avoid bugs if height is changed at design time.
*m: selectedbutton_assign && Internal to the class. Occurs when SelectedButton property is changed.
*m: showless && Internal to the class. Show less buttons in the panel.
*m: showmore && Internal to the class. Show more buttons in the panel.
*m: updatepane && Change the specified pane properties: Caption, Picture16, Picture24 and HotKey.
*m: viewmodechanged && Occurs when the control was shrunk.
*p: displayshrinkbutton && Specify if Shrink button will be displayed or not.
*p: maxshowedbuttons && Maximum number of buttons displayed in the panel.
*p: mnushowlesstext && The text that is displayed in the "Show less" shortcut menu item.
*p: mnushowmoretext && The text that is displayed in the "Show more" shortcut menu item.
*p: mnuthemestext && The text that is displayed in the "Themes" shortcut menu item.
*p: selectedbutton && Internal to the class. The number of selected button.
*p: showedbuttons && Internal to the class. The number of showed buttons.
*p: targetformname && Internal to the class. Name of the target form where the toolbar will be docked.
*p: version && OutlookNavBar version.
*p: _memberdata && XML Metadata for customizable properties
*
PROTECTED Init,version
*
Anchor = 7
BackColor = 255,255,255
displayshrinkbutton = .T.
Height = 400
maxshowedbuttons = 5
mnushowlesstext = Mai putine
mnushowmoretext = Mai multe
mnuthemestext = Themes...
Name = "outlooknavbar"
selectedbutton = 0
showedbuttons = 0
targetformname = ("")
version = 3.5.0
Width = 200
_memberdata =
*
ADD OBJECT 'OverflowPanel' AS overflowpanel WITH ;
Anchor = 14, ;
Left = 1, ;
Name = "OverflowPanel", ;
Top = 368, ;
Width = 198, ;
MENUBUTTON.imgPicture.Name = "imgPicture", ;
MENUBUTTON.Name = "MENUBUTTON", ;
MENUBUTTON.shpTransparent.Name = "shpTransparent"
*< END OBJECT: ClassLib="outlooknavbar.vcx" BaseClass="container" />
ADD OBJECT 'Panel' AS panel WITH ;
Height = 0, ;
Left = 1, ;
Name = "Panel", ;
Top = 368
*< END OBJECT: ClassLib="outlooknavbar.vcx" BaseClass="container" />
ADD OBJECT 'PanelVertical' AS panelvertical WITH ;
Left = 2, ;
Name = "PanelVertical", ;
Top = 29, ;
lblCaption.Name = "lblCaption"
*< END OBJECT: ClassLib="outlooknavbar.vcx" BaseClass="control" />
ADD OBJECT 'Panes' AS panes WITH ;
Anchor = 11, ;
ErasePage = .T., ;
Height = 332, ;
Left = 1, ;
Name = "Panes", ;
Top = 28
*< END OBJECT: ClassLib="outlooknavbar.vcx" BaseClass="pageframe" />
ADD OBJECT 'ShrinkButton' AS shrinkbutton WITH ;
Anchor = 9, ;
Left = 176, ;
Name = "ShrinkButton", ;
Top = 5
*< END OBJECT: ClassLib="outlooknavbar.vcx" BaseClass="control" />
ADD OBJECT 'Splitter' AS splitterhorizontal WITH ;
Left = 1, ;
Name = "Splitter", ;
objectabove = This.Parent.Panes, ;
objectbelow = This.Parent.Panel, ;
Top = 360, ;
imgBackground.Name = "imgBackground", ;
imgGripper.Name = "imgGripper"
*< END OBJECT: ClassLib="outlooknavbar.vcx" BaseClass="control" />
ADD OBJECT 'Title' AS title WITH ;
Name = "Title", ;
Top = 0, ;
imgBackground.Name = "imgBackground", ;
lblCaption.Name = "lblCaption"
*< END OBJECT: ClassLib="outlooknavbar.vcx" BaseClass="control" />
PROCEDURE beforechangeselectedbutton
Lparameters lnOldValue, lnNewValue
ENDPROC
PROCEDURE buttonclicked && Occurs when a button is clicked.
Lparameters lnNumber, lcCaption, lcPicture24
ENDPROC
PROCEDURE changetheme && Occurs when theme change.
This.BorderColor = _Screen.ThemesManager.GetMember("OutlookNavBar.BorderColor")
ENDPROC
PROCEDURE changeviewmode && Change control state (shrunk or not).
This.ShrinkButton.ChangeViewMode()
ENDPROC
PROCEDURE inainte_de_showless
ENDPROC
PROCEDURE inainte_de_showmore
ENDPROC
PROTECTED PROCEDURE Init
With Thisform
.LockScreen = .T.
.ShowTips = .T.
Local loPane
If .BaseClass=="Form"
.MinHeight = This.Height + 4
.MinWidth = This.Width + 4
*
* Special action for forms
For Each loPane In This.Panes.Pages
With loPane
This.UpdatePane(.PageOrder,.Caption,;
.Picture16,.Picture24,.HotKey)
Endwith
Endfor
*
Else
* Special action for toolbars
For Each loPane In This.Panes.Pages
If This.ShowedButtons This.ShowedButtons
If lnControl <= (This.ShowedButtons + lnMaxShowedButtons + 1)
lnLeft = lnLeft - .Width
.Anchor = 0
.Left = lnLeft
.Anchor = 9
llVisible = .T.
Endif
Endif
.Visible = llVisible
Endwith
Endfor
Endwith
ENDPROC
PROCEDURE repositioncontrols && Reposition all controls inside OutlookNavBar to avoid bugs if height is changed at design time.
* To avoid bugs when OutlookNavBar is resized at design time.
If Not This.OverflowPanel.Top == (This.Height - (This.OverflowPanel.Height + 1))
Local lnAnchor
*
With This.OverflowPanel
lnAnchor = .Anchor
.Anchor = 0
.Top = This.Height - (.Height + 1)
.Anchor = lnAnchor
.ZOrder(0)
Endwith
*
With This.Panes
lnAnchor = .Anchor
.Anchor = 0
.Height = This.OverflowPanel.Top - This.Splitter.Height - .Top
.Anchor = lnAnchor
Endwith
*
With This.Panel
lnAnchor = .Anchor
.Anchor = 0
.Top = This.OverflowPanel.Top
.Anchor = lnAnchor
Endwith
*
With This.Splitter
lnAnchor = .Anchor
.Anchor = 0
.Top = This.OverflowPanel.Top - .Height
.Anchor = lnAnchor
Endwith
Endif
ENDPROC
HIDDEN PROCEDURE selectedbutton_assign && Internal to the class. Occurs when SelectedButton property is changed.
Lparameters vNewVal
If Between(m.vNewVal,1,This.Panes.PageCount)
With This
Local lnOldSelectedButton, lcTitle, lcPicture24
lnOldSelectedButton = .SelectedButton
If .BeforeChangeSelectedButton(lnOldSelectedButton, m.vNewVal)
.SelectedButton = m.vNewVal
With .Panel
If lnOldSelectedButton>0 And ;
Type(".Controls(lnOldSelectedButton)")=="O"
.Controls(lnOldSelectedButton).ChangeBackground()
Endif
.Controls(m.vNewVal).ChangeBackground()
lcTitle = .Controls(m.vNewVal).GetCaption()
lcPicture24 = .Controls(m.vNewVal).imgPicture.Picture
Endwith
With .OverflowPanel
If lnOldSelectedButton>0 And ;
Type(".Controls(lnOldSelectedButton+1)")=="O"
.Controls(lnOldSelectedButton+1).ChangeBackground()
Endif
.Controls(m.vNewVal+1).ChangeBackground()
Endwith
.Title.Caption = lcTitle
.PanelVertical.Caption = lcTitle
.Panes.ActivePage = m.vNewVal
.ButtonClicked(m.vNewVal,lcTitle,lcPicture24)
Endif
Endwith
Endif
ENDPROC
PROCEDURE showless && Internal to the class. Show less buttons in the panel.
this.inainte_de_showless()
With This.Splitter
.Top = .Top + .Steps
Endwith
ENDPROC
PROCEDURE showmore && Internal to the class. Show more buttons in the panel.
this.inainte_de_showmore()
With This.Splitter
.Top = .Top - .Steps
Endwith
ENDPROC
PROCEDURE updatepane && Change the specified pane properties: Caption, Picture16, Picture24 and HotKey.
Lparameters lnPane, lcCaption, lcPicture16, lcPicture24, lcHotKey
With This
With .Panes.Pages(lnPane)
.Caption = lcCaption
.Picture16 = lcPicture16
.Picture24 = lcPicture24
Endwith
With .Panel.Controls(lnPane)
.SetCaption(lcCaption, lcHotKey)
.imgPicture.Picture = lcPicture24
Endwith
With .OverflowPanel.Controls(lnPane+1)
.SetAll("ToolTipText",lcCaption)
.imgPicture.Picture = lcPicture16
Endwith
If lnPane==.SelectedButton
.SelectedButton = lnPane
Endif
Endwith
ENDPROC
PROCEDURE viewmodechanged && Occurs when the control was shrunk.
Lparameters llShrunk
ENDPROC
PROCEDURE OverflowPanel.MENUBUTTON.fillmenu
Local lnOption, ;
loThemes, ;
lnTheme, ;
lcName, ;
lcBar, ;
lcInheritWindowsThemeText
lnOption = DoDefault()
*!* Define Bar (lnOption) Of ShortcutMenu Prompt '\-'
*!* lnOption = lnOption + 1
*!* With _Screen.ThemesManager
*!* lcInheritWindowsThemeText = Strtran(.InheritWindowsThemeText,"\<","")
*!* Define Bar (lnOption) Of ShortcutMenu Prompt lcInheritWindowsThemeText
*!* On Selection Bar (lnOption) Of ShortcutMenu ;
*!* _Screen.ThemesManager.InheritWindowsTheme = !_Screen.ThemesManager.InheritWindowsTheme
*!* Set Mark Of Bar lnOption Of ShortcutMenu To .InheritWindowsTheme
*!* Endwith
*!* lnOption = lnOption + 1
*!* Define Bar (lnOption) Of ShortcutMenu Prompt '\-'
*!* loThemes = _Screen.ThemesManager.Themes
*!* For lnTheme = 1 To loThemes.Count
*!* lcName = loThemes.GetKey(lnTheme)
*!* Define Bar (lnOption + lnTheme) Of ShortcutMenu Prompt lcName ;
*!* Style Iif(_Screen.ThemesManager.ActiveTheme = lnTheme, 'B', '')
*!* lcBar = Transform(lnOption)
*!* On Selection Bar (lnOption + lnTheme) Of ShortcutMenu ;
*!* _Screen.ThemesManager.SetActiveTheme(Bar() - &lcBar)
*!* Next lnTheme
*lnOption = lnOption + lnTheme
Return lnOption
ENDPROC
PROCEDURE Panes.Resize
With This
.Parent.PanelVertical.Height = .Height - 1
Endwith
ENDPROC
PROCEDURE ShrinkButton.buttonclicked
Lparameters llShrunk
With This.Parent
If llShrunk
This.OldWidth = .Width
This.OldAnchor = .Anchor
.Anchor = 0
.Width = 33
.Anchor = 7
.Panes.SetAll("Visible",.F.)
.Panes.Visible = .F.
Else
.Anchor = 0
.Width = This.OldWidth
.Anchor = This.OldAnchor
.Panes.SetAll("Visible",.T.)
.Panes.Visible = .T.
Endif
.ReArrangeButtons()
.ViewModeChanged(llShrunk)
Endwith
ENDPROC
PROCEDURE Splitter.splittermoved
With This.Parent
.ShowedButtons = Int(.Panel.Height/32)
.ReArrangeButtons()
This.ObjectAboveMinSize = .OverflowPanel.Top - ;
(Min(.MaxShowedButtons,.Panes.PageCount)*32) - ;
(This.Height - 1) - ;
.Panes.Top
Endwith
ENDPROC
ENDDEFINE
DEFINE CLASS overflowpanel 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="MenuButton" UniqueID="" Timestamp="" />
*
*m: addbutton && Add a new button to panel.
*m: changetheme && Occurs when theme change.
*m: initthemedcontrol
*p: _memberdata && XML Metadata for customizable properties
*
*
BorderWidth = 0
Height = 31
Name = "overflowpanel"
Width = 198
_memberdata =
*
ADD OBJECT 'MenuButton' AS overflowpanelbutton WITH ;
Anchor = 9, ;
Left = 177, ;
Name = "MenuButton", ;
Top = 0, ;
imgPicture.Name = "imgPicture", ;
shpTransparent.Name = "shpTransparent"
*< END OBJECT: ClassLib="outlooknavbar.vcx" BaseClass="container" />
PROCEDURE addbutton && Add a new button to panel.
Lparameters lcCaption, lcPicture
With This
Local lnControlCount
lnControlCount = .ControlCount + 1
.Newobject("Button"+Alltrim(Str(lnControlCount - 1)),;
"OverflowPanelButton",This.ClassLibrary,,;
lcCaption,lcPicture)
Endwith
ENDPROC
PROCEDURE changetheme && Occurs when theme change.
With _Screen.ThemesManager
This.Picture = .GetMember("OverflowPanel.Background.Picture")
This.MenuButton.imgPicture.Picture = .GetMember("OverflowPanel.MenuButton.Picture")
Endwith
ENDPROC
PROCEDURE Init
This.InitThemedControl()
ENDPROC
HIDDEN PROCEDURE initthemedcontrol
If Not Vartype(_Screen.ThemesManager)=="O"
_Screen.Newobject("ThemesManager","ThemesManager",Forcepath('ThemedControls.vcx', Justpath(This.ClassLibrary)))
Endif
This.ChangeTheme()
ENDPROC
ENDDEFINE
DEFINE CLASS overflowpanelbutton 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="imgPicture" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="shpTransparent" UniqueID="" Timestamp="" />
*
*m: changebackground && Change button's background image.
*m: changeselectedbutton && Change selected button.
*m: changetheme && Occurs when theme change.
*m: fillmenu
*m: initthemedcontrol
*p: imgfocusednotselected && Path and name of the button's image displayed when button is focused and not selected.
*p: imgfocusedselected && Path and name of the button's image displayed when button is focused and selected.
*p: imgnotfocusedselected && Path and name of the button's image displayed when button is not focused and selected.
*p: order && Button position in OverflowPanel.
*p: _memberdata && XML Metadata for customizable properties
*
HIDDEN imgfocusednotselected,imgfocusedselected,imgnotfocusedselected
PROTECTED Init
*
BackStyle = 0
BorderWidth = 0
Height = 31
imgfocusednotselected = .F.
imgfocusedselected = .F.
imgnotfocusedselected = .F.
Name = "overflowpanelbutton"
order = 0
Width = 22
_memberdata =
*
ADD OBJECT 'imgPicture' AS image WITH ;
BackStyle = 0, ;
Height = 16, ;
Left = 3, ;
MousePointer = 15, ;
Name = "imgPicture", ;
Stretch = 1, ;
Top = 7, ;
Width = 16
*< END OBJECT: BaseClass="image" />
ADD OBJECT 'shpTransparent' AS shape WITH ;
Anchor = 15, ;
BackStyle = 0, ;
BorderStyle = 0, ;
Height = 31, ;
Left = 0, ;
MousePointer = 15, ;
Name = "shpTransparent", ;
Top = 0, ;
Width = 22
*< END OBJECT: BaseClass="shape" />
PROCEDURE changebackground && Change button's background image.
Lparameters llGotFocus
#Define lnFocused 8
#Define lnNotFocused 16
#Define lnSelected 32
#Define lnNotSelected 64
Local llSelected, lnState, lcImage
With This
llSelected = (.Order>0 And .Order==.Parent.Parent.SelectedButton)
lnState = (Iif(llGotFocus,lnFocused,lnNotFocused) + ;
Iif(llSelected,lnSelected,lnNotSelected))
Do Case
Case lnState = (lnFocused + lnSelected)
lcImage = .ImgFocusedSelected
Case lnState = (lnFocused + lnNotSelected)
lcImage = .ImgFocusedNotSelected
Case lnState = (lnNotFocused + lnSelected)
lcImage = .ImgNotFocusedSelected
Otherwise
lcImage = ""
Endcase
.BackStyle = Iif(Empty(lcImage),0,1)
.Picture = lcImage
Endwith
ENDPROC
PROCEDURE changeselectedbutton && Change selected button.
If Upper(This.Name)=="MENUBUTTON"
Local lnButtonCount
lnButtonCount = This.Parent.ControlCount - 1
If lnButtonCount > 0
Local loBar
loBar = This.Parent.Parent
*
* Workaround to show menu in correct coordinates when
* OutlookNavBar is in a ToolBar.
If Upper(Thisform.BaseClass)=="TOOLBAR"
If Not Empty(loBar.TargetFormName)
Local lcTargetFormName, lcOlderFormName
lcTargetFormName = Upper(loBar.TargetFormName)
lcOlderFormName = Thisform.Name
If lcTargetFormName=="SCREEN"
Activate Screen
Else
Activate Window (lcTargetFormName)
Endif
Endif
Endif
*
Local lnRow, lnCol
lnRow = Mrow()
lnCol = Mcol()
Define Popup ShortcutMenu From lnRow, lnCol Margin SHORTCUT
This.FillMenu()
Activate Popup ShortcutMenu
Release Popups ShortcutMenu Extended
loBar = Null
If Vartype(lcOlderFormName)=="C"
Activate Window (lcOlderFormName)
Endif
Endif
Else
This.Parent.Parent.Selectedbutton = This.Order
Endif
ENDPROC
PROCEDURE changetheme && Occurs when theme change.
With _Screen.ThemesManager
This.ImgFocusedSelected = .GetMember("OverflowPanelButton.FocusedSelected.Picture")
This.ImgFocusedNotSelected = .GetMember("OverflowPanelButton.FocusedNotSelected.Picture")
This.ImgNotFocusedSelected = .GetMember("OverflowPanelButton.NotFocusedSelected.Picture")
This.ChangeBackground(.F.)
Endwith
ENDPROC
PROCEDURE fillmenu
Local lnButtonCount, loBar, lnOption
Local llUpDisabled, lcUpText, lcUpPicture
Local llDownDisabled, lcDownText, lcDownPicture
lnButtonCount = This.Parent.ControlCount - 1
loBar = This.Parent.Parent
lnOption = 1
llUpDisabled = (loBar.Showedbuttons>Min(lnButtonCount,loBar.MaxShowedbuttons))
lcUpText = Iif(llUpDisabled,"\","") + loBar.mnuShowMoreText
lcUpPicture = _Screen.ThemesManager.GetMember("ShortcutMenu.Up."+Iif(llUpDisabled,"Disabled","Enabled")+".Picture")
Define Bar (lnOption) Of ShortcutMenu Prompt (lcUpText) Picture (lcUpPicture)
On Selection Bar (lnOption) Of ShortcutMenu loBar.ShowMore()
lnOption = lnOption + 1
llDownDisabled = (loBar.Showedbuttons=0)
lcDownText = Iif(llDownDisabled,"\","") + loBar.mnuShowLessText
lcDownPicture = _Screen.ThemesManager.GetMember("ShortcutMenu.Down."+Iif(llDownDisabled,"Disabled","Enabled")+".Picture")
Define Bar (lnOption) Of ShortcutMenu Prompt (lcDownText) Picture (lcDownPicture)
On Selection Bar (lnOption) Of ShortcutMenu loBar.ShowLess()
lnOption = lnOption + 1
Define Bar (lnOption) Of ShortcutMenu Prompt "\-"
Local laMenu[lnButtonCount, 2]
laMenu=""
Local loButton
For Each loButton In This.Parent.Controls
With loButton
If Upper(.Class) == Upper("OverflowPanelButton") And .Name <> This.Name
laMenu[.Order, 1] = .imgPicture.ToolTipText
laMenu[.Order, 2] = .imgPicture.Picture
Endif
Endwith
Endfor
loButton = Null
Local lnMenuItem, lcBar
For lnMenuItem=1 To Alen(laMenu,1)
Define Bar (lnOption+lnMenuItem) Of ShortcutMenu Prompt (laMenu[lnMenuItem, 1]) ;
Style (Iif(lnMenuItem=loBar.Selectedbutton,"B","")) ;
Picture (laMenu[lnMenuItem, 2])
lcBar = Transform(lnOption)
On Selection Bar (lnOption+lnMenuItem) Of ShortcutMenu loBar.Selectedbutton=Bar()-&lcBar
Endfor
loBar = Null
Return lnOption+lnMenuItem
ENDPROC
PROTECTED PROCEDURE Init
Lparameters lcToolTipText, lcPicture
With This
If Not Upper(.Name)=="MENUBUTTON"
.Order = (.TabIndex - 1)
.Top = 0
.SetAll("ToolTipText",lcToolTipText)
.imgPicture.Picture = lcPicture
Endif
.InitThemedControl()
Endwith
ENDPROC
HIDDEN PROCEDURE initthemedcontrol
If Not Vartype(_Screen.ThemesManager)=="O"
_Screen.Newobject("ThemesManager","ThemesManager",Forcepath('ThemedControls.vcx', Justpath(This.ClassLibrary)))
Endif
This.ChangeTheme()
ENDPROC
PROCEDURE shpTransparent.Click
This.Parent.ChangeSelectedButton()
ENDPROC
PROCEDURE shpTransparent.MouseEnter
Lparameters nButton, nShift, nXCoord, nYCoord
This.Parent.ChangeBackground(.T.)
ENDPROC
PROCEDURE shpTransparent.MouseLeave
Lparameters nButton, nShift, nXCoord, nYCoord
This.Parent.ChangeBackground(.F.)
ENDPROC
ENDDEFINE
DEFINE CLASS pane AS page
*< CLASSDATA: Baseclass="page" Timestamp="" Scale="Pixels" Uniqueid="" />
*
*m: hotkey_assign
*p: hotkey && Specify the letter contained in the caption that will be used as a HotKey.
*p: picture16 && 16x16 image displayed in the panel buttons.
*p: picture24 && 24x24 image displayed in the panel buttons.
*p: _memberdata && XML Metadata for customizable properties
*
PROTECTED Destroy,Init
*
BackColor = 255,255,255
Caption = "Page1"
Height = 136
hotkey = ("")
Name = "pane"
picture16 = ("")
picture24 = ("")
Width = 136
_memberdata =
*
PROTECTED PROCEDURE Destroy
Try
With This.Parent.Parent
.Splitter.Anchor = 0
* Remove all buttons in all panels
Local lnButton
m.lnButton = "BUTTON"+Transform(This.PageOrder)
.Panel.RemoveObject(m.lnButton)
.OverflowPanel.RemoveObject(m.lnButton)
*
If This.PageOrder<=.ShowedButtons
If .ShowedButtons>0
.ShowLess()
Endif
Else
.ReArrangeButtons()
Endif
.Splitter.Anchor = 14
Endwith
Catch
Endtry
ENDPROC
HIDDEN PROCEDURE hotkey_assign
Lparameters vNewVal
If Not Vartype(m.vNewVal)=="C"
m.vNewVal = ""
Endif
This.HotKey = m.vNewVal
ENDPROC
PROTECTED PROCEDURE Init
With This.Parent.Parent
* Add a button to all panels
.Panel.AddButton(This.Caption, This.HotKey, This.Picture24)
.OverflowPanel.AddButton(This.Caption, This.Picture16)
*
If Not Upper(Thisform.BaseClass)=="TOOLBAR" Or ;
This.Parent.Initialised = .T.
.Splitter.Anchor = 0
If .ShowedButtons<.MaxShowedButtons
.ShowMore()
Else
.ReArrangeButtons()
Endif
.Splitter.Anchor = 14
Endif
Endwith
ENDPROC
ENDDEFINE
DEFINE CLASS panel AS container
*< CLASSDATA: Baseclass="container" Timestamp="" Scale="Pixels" Uniqueid="" />
*
*m: addbutton && Add a new button to panel.
*m: changetheme && Occurs when theme change.
*m: initthemedcontrol
*p: _memberdata && XML Metadata for customizable properties
*
PROTECTED Init
*
BorderWidth = 0
Height = 32
Name = "panel"
Width = 198
_memberdata =
*
PROCEDURE addbutton && Add a new button to panel.
Lparameters lcCaption, lcHotKey, lcPicture
With This
.Newobject("Button"+Alltrim(Str(.ControlCount + 1)),;
"PanelButton",This.ClassLibrary,,;
lcCaption,lcHotKey,lcPicture)
Endwith
ENDPROC
PROCEDURE changetheme && Occurs when theme change.
This.Picture = _Screen.ThemesManager.GetMember("Panel.Background.Picture")
ENDPROC
PROTECTED PROCEDURE Init
This.InitThemedControl()
ENDPROC
HIDDEN PROCEDURE initthemedcontrol
If Not Vartype(_Screen.ThemesManager)=="O"
_Screen.Newobject("ThemesManager","ThemesManager",Forcepath('ThemedControls.vcx', Justpath(This.ClassLibrary)))
Endif
This.ChangeTheme()
ENDPROC
ENDDEFINE
DEFINE CLASS panelbutton 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="cmdHotKey" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="lblCaption" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="imgPicture" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="shpTransparent" UniqueID="" Timestamp="" />
*
*m: changebackground && Change button's background image.
*m: changeselectedbutton && Change selected button.
*m: changetheme && Occurs when theme change.
*m: getcaption && Return the panel button's caption without the hot key.
*m: initthemedcontrol
*m: setcaption && Set the Caption and HotKey panel button's properties.
*p: imgfocusednotselected && Path and name of the button's image displayed when button is focused and not selected.
*p: imgfocusedselected && Path and name of the button's image displayed when button is focused and selected.
*p: imgnotfocusedselected && Path and name of the button's image displayed when button is not focused and selected.
*p: lblnotselectedcolor && Color of the button's caption when not selected.
*p: lblselectedcolor && Color of the button's caption when selected.
*p: _memberdata && XML Metadata for customizable properties
*
HIDDEN imgfocusednotselected,imgfocusedselected,imgnotfocusedselected,lblnotselectedcolor,lblselectedcolor
PROTECTED Init
*
BackStyle = 0
BorderWidth = 0
Height = 32
imgfocusednotselected = .F.
imgfocusedselected = .F.
imgnotfocusedselected = .F.
lblnotselectedcolor = .F.
lblselectedcolor = .F.
Name = "panelbutton"
Width = 198
_memberdata =
*
ADD OBJECT 'cmdHotKey' AS commandbutton WITH ;
Anchor = 15, ;
Caption = "", ;
Height = 29, ;
Left = 1, ;
Name = "cmdHotKey", ;
Style = 1, ;
TabIndex = 1, ;
TabStop = .F., ;
Top = 2, ;
Width = 196
*< END OBJECT: BaseClass="commandbutton" />
ADD OBJECT 'imgPicture' AS image WITH ;
BackStyle = 0, ;
Enabled = .F., ;
Height = 24, ;
Left = 4, ;
MousePointer = 15, ;
Name = "imgPicture", ;
Top = 4, ;
Width = 24
*< END OBJECT: BaseClass="image" />
ADD OBJECT 'lblCaption' AS label WITH ;
Anchor = 10, ;
BackStyle = 0, ;
Caption = "", ;
Enabled = .F., ;
FontBold = .T., ;
Height = 17, ;
Left = 35, ;
MousePointer = 15, ;
Name = "lblCaption", ;
TabIndex = 2, ;
Top = 7, ;
Width = 159
*< END OBJECT: BaseClass="label" />
ADD OBJECT 'shpTransparent' AS shape WITH ;
Anchor = 15, ;
BackStyle = 0, ;
BorderStyle = 0, ;
Height = 32, ;
MousePointer = 15, ;
Name = "shpTransparent", ;
Width = 198
*< END OBJECT: BaseClass="shape" />
PROCEDURE changebackground && Change button's background image.
Lparameters llGotFocus
#Define lnFocused 8
#Define lnNotFocused 16
#Define lnSelected 32
#Define lnNotSelected 64
Local lnState, lcImage, lnColor
With This
lnState = (Iif(llGotFocus,lnFocused,lnNotFocused) + ;
Iif(.Parent.Parent.SelectedButton==.TabIndex,lnSelected,lnNotSelected))
Do Case
Case lnState = (lnFocused + lnSelected)
lcImage = .ImgFocusedSelected
lnColor = .LblSelectedColor
Case lnState = (lnFocused + lnNotSelected)
lcImage = .ImgFocusedNotSelected
lnColor = .LblNotSelectedColor
Case lnState = (lnNotFocused + lnSelected)
lcImage = .ImgNotFocusedSelected
lnColor = .LblSelectedColor
Otherwise
lcImage = ""
lnColor = .LblNotSelectedColor
Endcase
.BackStyle = Iif(Empty(lcImage),0,1)
.Picture = lcImage
.lblCaption.ForeColor = lnColor
Endwith
ENDPROC
PROCEDURE changeselectedbutton && Change selected button.
This.Parent.Parent.SelectedButton = This.TabIndex
ENDPROC
PROCEDURE changetheme && Occurs when theme change.
With _Screen.ThemesManager
This.ImgFocusedSelected = .GetMember("PanelButton.FocusedSelected.Picture")
This.ImgFocusedNotSelected = .GetMember("PanelButton.FocusedNotSelected.Picture")
This.ImgNotFocusedSelected = .GetMember("PanelButton.NotFocusedSelected.Picture")
This.LblSelectedColor = .GetMember("PanelButton.Selected.FontColor")
This.LblNotSelectedColor = .GetMember("PanelButton.NotSelected.FontColor")
This.ChangeBackground(.F.)
Endwith
ENDPROC
PROCEDURE getcaption && Return the panel button's caption without the hot key.
Return Strtran(This.lblCaption.Caption,"\<","")
ENDPROC
PROTECTED PROCEDURE Init
Lparameters lcCaption, lcHotKey, lcPicture
With This
.Anchor = 0
.Left = 0
.Top = ((.TabIndex*(.Height))-.Height)
.Anchor = 10
.SetCaption(lcCaption, lcHotKey)
.imgPicture.Picture = lcPicture
.InitThemedControl()
.Visible = .T.
Endwith
ENDPROC
HIDDEN PROCEDURE initthemedcontrol
If Not Vartype(_Screen.ThemesManager)=="O"
_Screen.Newobject("ThemesManager","ThemesManager",Forcepath('ThemedControls.vcx', Justpath(This.ClassLibrary)))
Endif
This.ChangeTheme()
ENDPROC
PROCEDURE setcaption && Set the Caption and HotKey panel button's properties.
Lparameters lcCaption, lcHotKey
With This
If Not Empty(Evl(lcHotKey,"")) And ;
Upper(Thisform.BaseClass)=="FORM"
Local lnPos
lnPos = At(lcHotKey,lcCaption,1)
If lnPos>0
lcCaption = Stuff(lcCaption,lnPos,0,"\<")
lcHotKey = "\<" + lcHotKey
Endif
Endif
.lblCaption.Caption = lcCaption
.cmdHotKey.Caption = lcHotKey
Endwith
ENDPROC
PROCEDURE cmdHotKey.Click
This.Parent.ChangeSelectedButton()
Keyboard '{DNARROW}'
Local lcWindow
lcWindow = Mwindow()
Mouse At Mrow(lcWindow), Mcol(lcWindow) Window (lcWindow)
ENDPROC
PROCEDURE shpTransparent.Click
This.Parent.ChangeSelectedButton()
ENDPROC
PROCEDURE shpTransparent.MouseEnter
Lparameters nButton, nShift, nXCoord, nYCoord
This.Parent.ChangeBackground(.T.)
ENDPROC
PROCEDURE shpTransparent.MouseLeave
Lparameters nButton, nShift, nXCoord, nYCoord
This.Parent.ChangeBackground(.F.)
ENDPROC
ENDDEFINE
DEFINE CLASS panelvertical AS control
*< CLASSDATA: Baseclass="control" Timestamp="" Scale="Pixels" Uniqueid="" />
*-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder
*< OBJECTDATA: ObjPath="lblCaption" UniqueID="" Timestamp="" />
*
*m: caption_access
*m: caption_assign
*m: changetheme && Occurs when theme change.
*m: initthemedcontrol
*p: caption && Specifies the text displayed in an object's caption.
*p: focusedbackcolor && Specifies the backcolor when panel is focused.
*p: notfocusedbackcolor && Specifies the backcolor when panel isn't focused.
*p: _memberdata && XML Metadata for customizable properties
*
PROTECTED Init,MouseEnter,MouseLeave
*
BorderWidth = 0
caption = ("")
focusedbackcolor = .F.
Height = 331
Name = "panelvertical"
notfocusedbackcolor = .F.
Width = 30
_memberdata =
*
ADD OBJECT 'lblCaption' AS label WITH ;
BackStyle = 0, ;
Caption = "", ;
FontBold = .T., ;
FontSize = 14, ;
Height = 325, ;
Left = 3, ;
Name = "lblCaption", ;
Rotation = 90, ;
Top = 3, ;
Width = 23
*< END OBJECT: BaseClass="label" />
PROCEDURE caption_access
Return This.lblCaption.Caption
ENDPROC
PROCEDURE caption_assign
Lparameters vNewVal
This.lblCaption.Caption = m.vNewVal
ENDPROC
PROCEDURE changetheme && Occurs when theme change.
With _Screen.ThemesManager
This.FocusedBackcolor = .GetMember("PanelVertical.Focused.BackColor")
This.NotFocusedBackcolor = .GetMember("PanelVertical.NotFocused.BackColor")
This.lblCaption.ForeColor = .GetMember("PanelVertical.FontColor")
This.BackColor = This.NotFocusedBackcolor
Endwith
ENDPROC
PROTECTED PROCEDURE Init
This.InitThemedControl()
ENDPROC
HIDDEN PROCEDURE initthemedcontrol
If Not Vartype(_Screen.ThemesManager)=="O"
_Screen.Newobject("ThemesManager","ThemesManager",Forcepath('ThemedControls.vcx', Justpath(This.ClassLibrary)))
Endif
This.ChangeTheme()
ENDPROC
PROTECTED PROCEDURE MouseEnter
Lparameters nButton, nShift, nXCoord, nYCoord
This.BackColor = This.FocusedBackcolor
ENDPROC
PROTECTED PROCEDURE MouseLeave
Lparameters nButton, nShift, nXCoord, nYCoord
This.BackColor = This.NotFocusedBackcolor
ENDPROC
PROCEDURE Resize
This.lblCaption.Height = This.Height - 6
ENDPROC
PROCEDURE lblCaption.MouseEnter
Lparameters nButton, nShift, nXCoord, nYCoord
This.Parent.BackColor = This.Parent.FocusedBackcolor
ENDPROC
PROCEDURE lblCaption.MouseLeave
Lparameters nButton, nShift, nXCoord, nYCoord
This.Parent.BackColor = This.Parent.NotFocusedBackcolor
ENDPROC
ENDDEFINE
DEFINE CLASS panes AS pageframe
*< CLASSDATA: Baseclass="pageframe" Timestamp="" Scale="Pixels" Uniqueid="" />
*
*m: pagecount_assign
*p: initialised && Specify if the control was initialised or not.
*p: _memberdata && XML Metadata for customizable properties
*
*
ActivePage = 0
BorderWidth = 0
ErasePage = .T.
Height = 332
initialised = .F.
MemberClass = "pane"
MemberClassLibrary = outlooknavbar.vcx
Name = "panes"
SpecialEffect = 2
Tabs = .F.
Themes = .F.
Width = 198
_memberdata =
*
PROCEDURE Init
This.Initialised = .T.
If This.PageCount = 0
This.Parent.RepositionControls()
Endif
ENDPROC
HIDDEN PROCEDURE pagecount_assign
Lparameters vNewVal
If This.PageCount = 0
This.Parent.RepositionControls()
Endif
With This
.PageCount = m.vNewVal
*
Do Case
Case .PageCount==0
.Parent.SelectedButton = 0
Case .Parent.SelectedButton > .PageCount
.Parent.SelectedButton = 1
Otherwise
With .Parent
.SelectedButton = .SelectedButton
Endwith
Endcase
Endwith
ENDPROC
ENDDEFINE
DEFINE CLASS shrinkbutton AS control
*< CLASSDATA: Baseclass="control" Timestamp="" Scale="Pixels" Uniqueid="" />
*
*m: buttonclicked && Occurs when button is clicked.
*m: changebackground && Change button's background image.
*m: changetheme && Occurs when theme change.
*m: changeviewmode && Change button state (shrunk or not).
*m: initthemedcontrol
*m: shrunk_assign
*p: imgfocusednotshrunk && Path and name of the button's image displayed when button is focused and not shrunk.
*p: imgfocusedshrunk && Path and name of the button's image displayed when button is focused and shrunk.
*p: imgnotfocusednotshrunk && Path and name of the button's image displayed when button is not focused and not shrunk.
*p: imgnotfocusedshrunk && Path and name of the button's image displayed when button is not focused and shrunk.
*p: oldanchor
*p: oldwidth
*p: shrunk && Specifies if the button was shrunk or not.
*p: _memberdata && XML Metadata for customizable properties
*
HIDDEN imgfocusednotshrunk,imgfocusedshrunk,imgnotfocusednotshrunk,imgnotfocusedshrunk,shrunk
PROTECTED Click,Init
*
BorderWidth = 0
Height = 18
imgfocusednotshrunk = .F.
imgfocusedshrunk = .F.
imgnotfocusednotshrunk = .F.
imgnotfocusedshrunk = .F.
MousePointer = 15
Name = "shrinkbutton"
oldanchor = 0
oldwidth = 0
shrunk = .F.
Width = 18
_memberdata =
*
PROCEDURE buttonclicked && Occurs when button is clicked.
Lparameters llShrunk
ENDPROC
HIDDEN PROCEDURE changebackground && Change button's background image.
Lparameters llGotFocus
#Define lnFocused 8
#Define lnNotFocused 16
#Define lnShrunk 32
#Define lnNotShrunk 64
Local lnState, lcImage, lnColor
With This
lnState = (Iif(llGotFocus,lnFocused,lnNotFocused) + ;
Iif(.Shrunk,lnShrunk,lnNotShrunk))
Do Case
Case lnState = (lnFocused + lnShrunk)
lcImage = .ImgFocusedShrunk
Case lnState = (lnFocused + lnNotShrunk)
lcImage = .ImgFocusedNotShrunk
Case lnState = (lnNotFocused + lnShrunk)
lcImage = .ImgNotFocusedShrunk
Case lnState = (lnNotFocused + lnNotShrunk)
lcImage = .ImgNotFocusedNotShrunk
Otherwise
lcImage = ""
Endcase
.Picture = lcImage
Endwith
ENDPROC
PROCEDURE changetheme && Occurs when theme change.
With _Screen.ThemesManager
This.ImgFocusedShrunk = .GetMember("ShrinkButton.FocusedShrunk.Picture")
This.ImgFocusedNotShrunk = .GetMember("ShrinkButton.FocusedNotShrunk.Picture")
This.ImgNotFocusedShrunk = .GetMember("ShrinkButton.NotFocusedShrunk.Picture")
This.ImgNotFocusedNotShrunk = .GetMember("ShrinkButton.NotFocusedNotShrunk.Picture")
This.ChangeBackground(.F.)
Endwith
ENDPROC
PROCEDURE changeviewmode && Change button state (shrunk or not).
This.Shrunk = Not This.Shrunk
ENDPROC
PROTECTED PROCEDURE Click
This.ChangeViewMode()
ENDPROC
PROTECTED PROCEDURE Init
This.InitThemedControl()
ENDPROC
HIDDEN PROCEDURE initthemedcontrol
If Not Vartype(_Screen.ThemesManager)=="O"
_Screen.Newobject("ThemesManager","ThemesManager",Forcepath('ThemedControls.vcx', Justpath(This.ClassLibrary)))
Endif
This.ChangeTheme()
ENDPROC
PROCEDURE MouseEnter
Lparameters nButton, nShift, nXCoord, nYCoord
This.ChangeBackground(.T.)
ENDPROC
PROCEDURE MouseLeave
Lparameters nButton, nShift, nXCoord, nYCoord
This.ChangeBackground(.F.)
ENDPROC
HIDDEN PROCEDURE shrunk_assign
Lparameters vNewVal
This.Shrunk = m.vNewVal
This.ChangeBackground(.F.)
This.ButtonClicked(m.vNewVal)
ENDPROC
ENDDEFINE
DEFINE CLASS splitterhorizontal AS control
*< CLASSDATA: Baseclass="control" 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="imgGripper" UniqueID="" Timestamp="" />
*
*m: changetheme && Occurs when theme change.
*m: getreference && Evaluate the content of the string passed as a parameter and return the object if the content evaluates to an object.
*m: initthemedcontrol
*m: objectabove_access
*m: objectbelow_access
*m: splittermoved && Occurs after splitter is moved.
*p: objectabove && Object placed above the splitter.
*p: objectaboveminsize && Specifies the minimum height that ObjectAbove can be resized to.
*p: objectbelow && Object placed below the splitter.
*p: objectbelowminsize && Specifies the minimum height that ObjectBelow can be resized to.
*p: steps && Minimum mumber of pixels that Splitter will move when mouse moves.
*p: _memberdata && XML Metadata for customizable properties
*
PROTECTED Destroy,Init
*
BorderWidth = 0
Height = 8
MousePointer = 7
Name = "splitterhorizontal"
objectabove = .F.
objectaboveminsize = 32
objectbelow = .F.
objectbelowminsize = 0
steps = 32
TabStop = .F.
Width = 198
_memberdata =
*
ADD OBJECT 'imgBackground' AS image WITH ;
Anchor = 15, ;
Height = 8, ;
MousePointer = 7, ;
Name = "imgBackground", ;
Stretch = 2, ;
Width = 198
*< END OBJECT: BaseClass="image" />
ADD OBJECT 'imgGripper' AS image WITH ;
Anchor = 768, ;
BackStyle = 0, ;
Height = 8, ;
Left = 81, ;
MousePointer = 7, ;
Name = "imgGripper", ;
Width = 35
*< END OBJECT: BaseClass="image" />
PROCEDURE changetheme && Occurs when theme change.
With _Screen.ThemesManager
This.imgBackground.Picture = .GetMember("Splitter.Background.Picture")
This.imgGripper.Picture = .GetMember("Splitter.Gripper.Picture")
Endwith
ENDPROC
PROTECTED PROCEDURE Destroy
*========================================================
* Release object references
*========================================================
With This
.ObjectAbove = Null
.ObjectBelow = Null
Endwith
ENDPROC
HIDDEN PROCEDURE getreference && Evaluate the content of the string passed as a parameter and return the object if the content evaluates to an object.
*========================================================
* Returns an object reference
*========================================================
Lparameter toReference
Do Case
Case Vartype(m.toReference) == "X"
Return m.toReference
Case Vartype(m.toReference) == "O"
Return m.toReference
Case Vartype(m.toReference) == "C"
Return Evaluate(m.toReference)
Otherwise
Error 107
Endcase
ENDPROC
PROTECTED PROCEDURE Init
*========================================================
* Setup the visual appearance and initial position to
* make anchor work correctly
*========================================================
With This
If Vartype(.ObjectAbove)=="O" And Vartype(.ObjectBelow)="O"
This.InitThemedControl()
Else
Messagebox("You must specify Object Above and ObjectBelow properties correctly.",16,"Error")
Return .F.
Endif
Endwith
ENDPROC
HIDDEN PROCEDURE initthemedcontrol
If Not Vartype(_Screen.ThemesManager)=="O"
_Screen.Newobject("ThemesManager","ThemesManager",Forcepath('ThemedControls.vcx', Justpath(This.ClassLibrary)))
Endif
This.ChangeTheme()
ENDPROC
PROCEDURE MouseMove
*========================================================
* Move the bar around while the button is pressed
*========================================================
Lparameters nButton, nShift, nXCoord, nYCoord
If nButton == 1
With This
Local lnTop, lnStep
lnTop = Min(Max(nYCoord,.ObjectAbove.Top+.ObjectAboveMinSize-Iif(.Steps==1,0,.Steps)),;
.ObjectBelow.Top+.ObjectBelow.Height-.ObjectBelowMinSize-.Height)
With .ObjectBelow
lnStep = Mod(Max(.Height+.Top-lnTop-This.Height,0),This.Steps)
Endwith
.Anchor = 0
.Top = lnTop+lnStep
.Anchor = 14
Endwith
Endif
ENDPROC
PROCEDURE Moved
*========================================================
* Whenever this container is moved around, we resize the
* two surrounding controls
*========================================================
Try
With This
With .ObjectAbove
.Anchor = 0
.Move(.Left,.Top,.Width,This.Top-.Top)
.Anchor = 11
Endwith
With .ObjectBelow
.Anchor = 0
.Move(.Left,This.Top+This.Height,.Width,Max(.Height+.Top-This.Top-This.Height,0))
.Anchor = 14
Endwith
.Anchor = 0
.SplitterMoved()
.Anchor = 14
Endwith
Catch
Endtry
ENDPROC
HIDDEN PROCEDURE objectabove_access
Return This.GetReference(This.ObjectAbove)
ENDPROC
HIDDEN PROCEDURE objectbelow_access
Return This.GetReference(This.ObjectBelow)
ENDPROC
PROCEDURE splittermoved && Occurs after splitter is moved.
ENDPROC
PROCEDURE imgBackground.MouseMove
Lparameters nButton, nShift, nXCoord, nYCoord
This.Parent.MouseMove(nButton, nShift, nXCoord, nYCoord)
ENDPROC
PROCEDURE imgGripper.MouseMove
Lparameters nButton, nShift, nXCoord, nYCoord
This.Parent.MouseMove(nButton, nShift, nXCoord, nYCoord)
ENDPROC
ENDDEFINE
DEFINE CLASS title AS control
*< CLASSDATA: Baseclass="control" 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="" />
*
*m: caption_assign
*m: changetheme && Occurs when theme change.
*m: fontname_assign
*m: initthemedcontrol
*p: caption && Specifies the text displayed in an object's caption.
*p: fontname && Specifies the name of the font used to display text.
*p: _memberdata && XML Metadata for customizable properties
*
PROTECTED Init
*
Anchor = 11
BackStyle = 0
caption = .F.
fontname = Arial
Height = 28
Name = "title"
Width = 200
_memberdata =
*
ADD OBJECT 'imgBackground' AS image WITH ;
Anchor = 15, ;
Height = 26, ;
Left = 1, ;
Name = "imgBackground", ;
Stretch = 2, ;
Top = 1, ;
Width = 198
*< END OBJECT: BaseClass="image" />
ADD OBJECT 'lblCaption' AS label WITH ;
Anchor = 11, ;
BackStyle = 0, ;
Caption = "Navigation title", ;
FontBold = .T., ;
FontSize = 12, ;
Height = 21, ;
Left = 7, ;
Name = "lblCaption", ;
Top = 3, ;
Width = 165
*< END OBJECT: BaseClass="label" />
HIDDEN PROCEDURE caption_assign
Lparameters vNewVal
With This
Store m.vNewVal To .Caption, .lblCaption.Caption
Endwith
ENDPROC
PROCEDURE changetheme && Occurs when theme change.
With _Screen.ThemesManager
This.BorderColor = .GetMember("Title.BorderColor")
This.imgBackground.Left = .GetMember("Title.Background.Left")
This.imgBackground.Width = This.Width - This.imgBackground.Left - 1
This.imgBackground.Picture = .GetMember("Title.Background.Picture")
This.imgBackground.Anchor = 0
This.imgBackground.Anchor = 15
This.lblCaption.ForeColor = .GetMember("Title.FontColor")
Endwith
ENDPROC
PROCEDURE fontname_assign
Lparameters vNewVal
Store m.vNewVal To This.FontName, ;
This.lblCaption.FontName
ENDPROC
PROTECTED PROCEDURE Init
This.InitThemedControl()
ENDPROC
HIDDEN PROCEDURE initthemedcontrol
If Not Vartype(_Screen.ThemesManager)=="O"
_Screen.Newobject("ThemesManager","ThemesManager",Forcepath('ThemedControls.vcx', Justpath(This.ClassLibrary)))
Endif
This.ChangeTheme()
ENDPROC
ENDDEFINE