Hi, Roger.
See attached pictures. "static1.jpg" shows how it should be. "static2.jpg" shows how this looks when using build 260.
@ 1,1 DCSAY 'This is my static' SIZE 30,1 COLOR GRA_CLR_BLACK,GRA_CLR_BLUE SUBCLASS 'BoxWithGradientBackGroundCentered()'
The attached code shows how the subclass works. It paints a box with rounded corners and clips the path of the box. Afterwards, a gradient is painted in the clipped area. After that, the caption is painted.
Code: Select all
CLASS BoxWithGradientBackGroundCentered FROM DC_XbpStatic
INLINE METHOD Init(a,b,c,d,e,f,g,h)
::DC_XbpStatic:init(a,b,c,d,e,f,g,h)
::DrawMode := XBP_DRAW_OWNERADVANCED
::Draw := {|o,a|BoxWithGradientBackGroundDraw(o,a,::DC_XbpStatic,.T.)}
RETURN self
ENDCLASS
FUNCTION BoxWithGradientBackGroundDraw(oPs,aInfo,oObject,lCentered,lWordBreak)
local aLineAttrs := Array(GRA_AL_COUNT), aBoxAttrs := Array(GRA_AA_COUNT), nBackColor := oObject:SetColorBG(),;
nParentBack := oObject:SetParent():SetColorBG(), nAlign := XBPALIGN_LEFT+XBPALIGN_VCENTER
DEFAULT lCentered := .F., lWordBreak := .F.
IF lCentered
nAlign := XBPALIGN_HCENTER+XBPALIGN_VCENTER
ENDIF
IF lWordBreak
nAlign := XBPALIGN_HCENTER+XBPALIGN_WORDBREAK
ENDIF
aLineAttrs[ GRA_AL_COLOR ] := GraMakeRGBColor( { 167, 167, 167 } )
aBoxAttrs[GRA_AA_COLOR] := nBackColor
aBoxAttrs[GRA_AA_SYMBOL] := GRA_SYM_BLANK
aLineAttrs[ GRA_AL_TYPE ] := GRA_LINETYPE_SOLID
GraSetAttrLine( oPS, aLineAttrs)
GraSetAttrArea( oPS,aBoxAttrs)
GraBox(oPs,{ aInfo[ XBP_DRAWINFO_RECT, 1 ],aInfo[ XBP_DRAWINFO_RECT, 2 ] }, { aInfo[ XBP_DRAWINFO_RECT, 3 ], aInfo[ XBP_DRAWINFO_RECT, 4 ] },GRA_OUTLINE,4,4)
GraPathBegin(oPs)
GraBox(oPs,{ aInfo[ XBP_DRAWINFO_RECT, 1 ],aInfo[ XBP_DRAWINFO_RECT, 2 ] }, { aInfo[ XBP_DRAWINFO_RECT, 3 ], aInfo[ XBP_DRAWINFO_RECT, 4 ] },GRA_OUTLINE,4,4)
oPs:SetColor(oObject:SetColorFG())
GraPathEnd(oPs)
GraPathClip(oPs,.T.)
GraGradient(oPS,{ aInfo[ XBP_DRAWINFO_RECT, 1 ]+BoxOffsets()[1],aInfo[ XBP_DRAWINFO_RECT, 2 ]+BoxOffsets()[2] },;
{{ aInfo[ XBP_DRAWINFO_RECT, 3 ]-BoxOffsets()[1],aInfo[ XBP_DRAWINFO_RECT, 4 ]-BoxOffsets()[2] }}, {nBackColor,GradOffset(nBackColor,65,.T.)} ,GRA_GRADIENT_VERTICAL)
GraPathClip(oPs,.F.)
GraCaptionStr( oPS, {aInfo[ XBP_DRAWINFO_RECT,1 ], aInfo[ XBP_DRAWINFO_RECT,2 ]}, { aInfo[ XBP_DRAWINFO_RECT, 3 ], aInfo[ XBP_DRAWINFO_RECT, 4 ] }, Trim(oObject:Caption), nAlign )
RETURN .F.
FUNCTION BoxOffsets(nLeft,nUp)
STATIC nLeftOffset := 1, nUpOffset := 1
IF PCount() > 0
nLeftOffset := nLeft
nUpOffset := nUp
ENDIF
RETURN {nLeftOffset,nUpOffset}
FUNCTION GradOffset(nColor) // just for the sample to work
RETURN GRA_CLR_DARKED