Page 1 of 1

bug FWH EXCESS RELEASE [resuelto]

Posted: Fri Apr 10, 2020 11:59 am
by MOISES
Hola:

En cada ejecución del programa, se genera un .log con este contenido:

Code: Select all

10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBGROUP:SETFONT(3086) <-SETRIBBONBARTHEME(2388) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBTN:SETFONT(3086) <-SETRIBBONBARTHEME(2406) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBGROUP:SETFONT(3086) <-SETRIBBONBARTHEME(2388) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBTN:SETFONT(3086) <-SETRIBBONBARTHEME(2406) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBGROUP:SETFONT(3086) <-SETRIBBONBARTHEME(2388) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBTN:SETFONT(3086) <-SETRIBBONBARTHEME(2406) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBTN:SETFONT(3086) <-SETRIBBONBARTHEME(2406) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBGROUP:SETFONT(3086) <-SETRIBBONBARTHEME(2388) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBTN:SETFONT(3086) <-SETRIBBONBARTHEME(2406) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBTN:SETFONT(3086) <-SETRIBBONBARTHEME(2406) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBTN:SETFONT(3086) <-SETRIBBONBARTHEME(2406) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBGROUP:SETFONT(3086) <-SETRIBBONBARTHEME(2388) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBTN:SETFONT(3086) <-SETRIBBONBARTHEME(2406) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBGROUP:SETFONT(3086) <-SETRIBBONBARTHEME(2388) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBTN:SETFONT(3086) <-SETRIBBONBARTHEME(2406) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:53:58: EXCESS RELEASE OF FONT SYSTEM_FONT[ hFont : 1359611297] ( nCount : 0 )
     <-TFONT:END(297) <-TRBTN:SETFONT(3086) <-SETRIBBONBARTHEME(2406) <-MAIN(416)
    ------------------------------------------------------------    
10-04-2020 13:54:07: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:07: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:07: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:07: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:10: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:10: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:10: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:10: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:10: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:10: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:10: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:10: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:10: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:12: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:12: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:12: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:12: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:12: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:12: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:12: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:12: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:12: FW_SAYTEXT( 505 )  hFont =     "invalid font" = "invalid font" 
10-04-2020 13:54:12: EXCESS RELEASE OF FONT Segoe UI[ hFont : 0] ( nCount : 12 )
     <-TFONT:END(297) <-TCONTROL:DESTROY(2293) <-TBTNBMP:DESTROY(1019) <-(b)TBTNBMP(192) <-TBTNBMP:END(0) <-TXBRWCOLUMN:END(12009) <-TXBROWSE:DESTROY(942) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1827)
    ------------------------------------------------------------    
10-04-2020 13:54:12: EXCESS RELEASE OF FONT Segoe UI[ hFont : 0] ( nCount : 11 )
     <-TFONT:END(297) <-TCONTROL:DESTROY(2293) <-TBTNBMP:DESTROY(1019) <-(b)TBTNBMP(192) <-TBTNBMP:END(0) <-TXBRWCOLUMN:END(12013) <-TXBROWSE:DESTROY(942) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1827)
    ------------------------------------------------------------    
10-04-2020 13:54:12: EXCESS RELEASE OF FONT Segoe UI[ hFont : 0] ( nCount : 10 )
     <-TFONT:END(297) <-TCONTROL:DESTROY(2293) <-TBTNBMP:DESTROY(1019) <-(b)TBTNBMP(192) <-TBTNBMP:END(0) <-TXBRWCOLUMN:END(12009) <-TXBROWSE:DESTROY(942) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1827)
    ------------------------------------------------------------    
10-04-2020 13:54:12: EXCESS RELEASE OF FONT Segoe UI[ hFont : 0] ( nCount : 9 )
     <-TFONT:END(297) <-TCONTROL:DESTROY(2293) <-TBTNBMP:DESTROY(1019) <-(b)TBTNBMP(192) <-TBTNBMP:END(0) <-TXBRWCOLUMN:END(12013) <-TXBROWSE:DESTROY(942) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1827)
    ------------------------------------------------------------    
10-04-2020 13:54:12: EXCESS RELEASE OF FONT Segoe UI[ hFont : 0] ( nCount : 8 )
     <-TFONT:END(297) <-TCONTROL:DESTROY(2293) <-TBTNBMP:DESTROY(1019) <-(b)TBTNBMP(192) <-TBTNBMP:END(0) <-TXBRWCOLUMN:END(12009) <-TXBROWSE:DESTROY(942) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1827)
    ------------------------------------------------------------    
10-04-2020 13:54:12: EXCESS RELEASE OF FONT Segoe UI[ hFont : 0] ( nCount : 7 )
     <-TFONT:END(297) <-TCONTROL:DESTROY(2293) <-TBTNBMP:DESTROY(1019) <-(b)TBTNBMP(192) <-TBTNBMP:END(0) <-TXBRWCOLUMN:END(12013) <-TXBROWSE:DESTROY(942) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1827)
    ------------------------------------------------------------    
10-04-2020 13:54:12: EXCESS RELEASE OF FONT Segoe UI[ hFont : 0] ( nCount : 6 )
     <-TFONT:END(297) <-TCONTROL:DESTROY(2293) <-TBTNBMP:DESTROY(1019) <-(b)TBTNBMP(192) <-TBTNBMP:END(0) <-TXBRWCOLUMN:END(12009) <-TXBROWSE:DESTROY(942) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1827)
    ------------------------------------------------------------    
10-04-2020 13:54:12: EXCESS RELEASE OF FONT Segoe UI[ hFont : 0] ( nCount : 5 )
     <-TFONT:END(297) <-TCONTROL:DESTROY(2293) <-TBTNBMP:DESTROY(1019) <-(b)TBTNBMP(192) <-TBTNBMP:END(0) <-TXBRWCOLUMN:END(12013) <-TXBROWSE:DESTROY(942) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1827)
    ------------------------------------------------------------    
10-04-2020 13:54:12: EXCESS RELEASE OF FONT Segoe UI[ hFont : 0] ( nCount : 4 )
     <-TFONT:END(297) <-TCONTROL:DESTROY(2293) <-TBTNBMP:DESTROY(1019) <-(b)TBTNBMP(192) <-TBTNBMP:END(0) <-TXBRWCOLUMN:END(12009) <-TXBROWSE:DESTROY(942) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1827)
    ------------------------------------------------------------    
10-04-2020 13:54:12: EXCESS RELEASE OF FONT Segoe UI[ hFont : 0] ( nCount : 3 )
     <-TFONT:END(297) <-TCONTROL:DESTROY(2293) <-TBTNBMP:DESTROY(1019) <-(b)TBTNBMP(192) <-TBTNBMP:END(0) <-TXBRWCOLUMN:END(12013) <-TXBROWSE:DESTROY(942) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1827)
    ------------------------------------------------------------    
10-04-2020 13:54:12: EXCESS RELEASE OF FONT Segoe UI[ hFont : 0] ( nCount : 2 )
     <-TFONT:END(297) <-TCONTROL:DESTROY(2293) <-TBTNBMP:DESTROY(1019) <-(b)TBTNBMP(192) <-TBTNBMP:END(0) <-TXBRWCOLUMN:END(12009) <-TXBROWSE:DESTROY(942) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1827)
    ------------------------------------------------------------    
10-04-2020 13:54:12: EXCESS RELEASE OF FONT Segoe UI[ hFont : 0] ( nCount : 1 )
     <-TFONT:END(297) <-TCONTROL:DESTROY(2293) <-TBTNBMP:DESTROY(1019) <-(b)TBTNBMP(192) <-TBTNBMP:END(0) <-TXBRWCOLUMN:END(12013) <-TXBROWSE:DESTROY(942) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1827)
    ------------------------------------------------------------    
10-04-2020 13:54:12: EXCESS RELEASE OF FONT Segoe UI[ hFont : 0] ( nCount : 0 )
     <-TFONT:END(297) <-TCONTROL:DESTROY(2293) <-TXBROWSE:DESTROY(992) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1827) <-TXBROWSE:HANDLEEVENT(11238) <-_FWH(3559) <-DESTROYWINDOW(0) <-TDIALOG:CLOSE(967)
    ------------------------------------------------------------    
10-04-2020 13:54:14: EXCESS RELEASE OF FONT Segoe UI[ hFont : 0] ( nCount : -1 )
     <-TFONT:END(297) <-MAIN(474)
    ------------------------------------------------------------    
 
Gracias.

Re: bug FWH EXCESS RELEASE

Posted: Mon Apr 13, 2020 7:11 am
by MOISES
??

Re: bug FWH EXCESS RELEASE

Posted: Mon Apr 13, 2020 7:53 am
by Antonio Linares
Moises,

Ese mensaje quiere decir que se ha intentado liberar un recurso más veces de las necesarias.

Es decir, si tu has hecho un oFont:End() que no era necesario, al intentar la RibbonBar hacer lo mismo, FWH genera ese mensaje.

Puedes proporcionar un PRG pequeño y autocontenido que genere esos mensajes ? gracias

Re: bug FWH EXCESS RELEASE

Posted: Mon Apr 13, 2020 8:49 am
by MOISES
Claro, aquí va:

Code: Select all

#include "FiveWin.ch"
#include "ribbon.ch"

#define RB_THEME_DARK          6
#define RB_THEME_BLUE          7
#define RB_THEME_RED           8
#define RB_THEME_GREEN         9
#define RB_THEME_ORANGE       10
#define RB_THEME_PURPLE       11

#define CLR_MSBLUE       RGB(  43,  87, 154 )
#define CLR_MSLIGHTGRAY  RGB( 243, 243, 243 )
#define CLR_MSGRAY       RGB( 198, 198, 198 )
#define CLR_DARKGRAY     RGB(  54,  54,  54 )

#define CLR_MSRED    RGB( 164, 55, 58 )
#define CLR_MSORANGE RGB( 184, 72, 43 )
#define CLR_MSPURPLE RGB( 128, 57, 123 )

#define CLR_MSBLUE1 RGB( 1, 115, 199 )
#define CLR_MSBLUE2 RGB( 57, 85, 163 )
#define CLR_MSBLUE3 RGB( 42, 87, 154 )

#define CLR_MSGREEN1 RGB( 49, 117, 47 )
#define CLR_MSGREEN2 RGB( 7, 117, 104 )
#define CLR_MSGREEN3 RGB( 34, 116, 71 )

#define COLOR_GRAYTEXT       17

//----------------------------------------------------------------------------//

function Main()

   local oWnd

   DEFINE WINDOW oWnd

   oWnd:SetSize( 1200, 800 )

   BuildRibbon( oWnd )

   ACTIVATE WINDOW oWnd CENTER // MAXIMIZED

return nil

//----------------------------------------------------------------------------//

function BuildRibbon( oWnd )

   local oRb := TRibbonBar():New( oWnd ), oGroup, oBtn, oMenu

   MENU oMenu POPUP
      MENUITEM "Dark"  ;
         ACTION ( SetRibbonBarTheme( oRb, RB_THEME_DARK ),  oRb:Refresh() )

      MENUITEM "Blue"  ;
         ACTION ( SetRibbonBarTheme( oRb, RB_THEME_BLUE ) , oRb:Refresh() )

      MENUITEM "Green"  ;
         ACTION ( SetRibbonBarTheme( oRb, RB_THEME_GREEN ), oRb:Refresh() )

      MENUITEM "Red"    ;
         ACTION ( SetRibbonBarTheme( oRb, RB_THEME_RED ),   oRb:Refresh() )

      MENUITEM "Orange" ;
         ACTION ( SetRibbonBarTheme( oRb, RB_THEME_ORANGE ), oRb:Refresh() )

      MENUITEM "Purple"  ;
         ACTION ( SetRibbonBarTheme( oRb, RB_THEME_PURPLE ) ,  oRb:Refresh() )
   ENDMENU

   oRb:SetStyles( .F., .T. )

   oGroup = oRb:AddGroup( 185, "First", 1 )
   oBtn = oGroup:AddButton( 3, 3, oGroup:nHeight - 19, 90, "One", { || MsgInfo( "One" ) } )
   oBtn:LoadBitmaps( "..\bitmaps\32x32\cascade.bmp" )
   oBtn = oGroup:AddButton( 3, oBtn:nWidth + 3, oGroup:nHeight - 19, 90, "Two", { || MsgInfo( "Two" ) } )
   oBtn:LoadBitmaps( "..\bitmaps\32x32\tiled.bmp" )

   oGroup = oRb:AddGroup( 185, "Second", 1 )
   oBtn = oGroup:AddButton( 3, 3, oGroup:nHeight - 19, 90, "Three" )
   oBtn:LoadBitmaps( "..\bitmaps\32x32\world.bmp" )
   oBtn = oGroup:AddButton( 3, oBtn:nWidth + 3, oGroup:nHeight - 19, 90, "Four" )
   oBtn:LoadBitmaps( "..\bitmaps\32x32\task.bmp" )

   oGroup = oRb:AddGroup( 75, "Styles", 1 )

   @ 3,5 ADD BUTTON oBtn ;
     PROMPT "Change" BITMAP "..\bitmaps\stylechange32.BMP";
     GROUP oGroup MENU oMenu ;
     SPLITPOPUP SIZE 65,75 TOP

   SetRibbonBarTheme( oRb, RB_THEME_BLUE )   // as default

return oRb

//----------------------------------------------------------------------------//

function SetRibbonBarTheme( oRb, nTheme )

   local oDlg, oGroup, oBtn

   oRb:nHeight     = 130
   oRb:nHeightFld  =  20
   oRb:hSeparation =   4
   oRb:nLeftMargin =  20
   oRb:nRoundBox   =   0

   do case
      case nTheme == RB_THEME_DARK
        oRb:nClrPaneRB    = CLR_BLACK
        oRb:nClrBoxOut    = CLR_DARKGRAY
        oRb:nClrBoxIn     = CLR_DARKGRAY
        oRb:nClrBoxSelOut = CLR_DARKGRAY
        oRb:nClrBoxSelIn  = CLR_DARKGRAY
        oRb:aGrad         = { { 1, CLR_DARKGRAY, CLR_DARKGRAY } }
        oRb:aGradFld      = { | nOpt | If( nOpt == oRb:nStart, { { 1, CLR_DARKGRAY, CLR_DARKGRAY } },;
                                                            { { 1, CLR_DARKGRAY, CLR_DARKGRAY } } ) }
        oRb:aGradHigh     = { { 1, CLR_BLACK, CLR_BLACK } }
        oRb:aGradOver     = { { 1, RGB( 0, 114, 198 ), RGB( 0, 114, 198 ) } }

        AFill( oRb:aClrTabTxt, { | oSelf, nPrompt | If( nPrompt == oSelf:nOption, CLR_WHITE, CLR_WHITE ) } )

        DeleteObject( oRb:hBmpBrushEx )
        DeleteObject( oRb:hBrushEx )
        oRb:hBmpBrushEx = GradientBmp( oRb, oRb:nRight - oRb:nRightMargin - 3, oRb:nBottom - oRb:nTopMargin + 1, oRb:aGrad )
        oRb:hBrushEx    = CreatePatternBrush( oRb:hBmpBrushEx )

        for each oDlg in oRb:aDialogs
           oDlg:hBack = oRb:hBrushEx

           for each oGroup in oDlg:aControls
              if oGroup:IsKindOf( "TRBGROUP" )
                 oGroup:oFont:End()
                 oGroup:SetFont( oRb:oFont )

                 oGroup:nHeight      = 100
                 oGroup:nClrBoxIn    = CLR_LIGHTGRAY
                 oGroup:aGradCaption = { { 1, CLR_LIGHTGRAY, CLR_LIGHTGRAY } }
                 oGroup:bClrText     = { | lEnable | If( lEnable, CLR_WHITE, CLR_DARKGRAY ) }
                 oGroup:nClrBoxIn    = CLR_LIGHTGRAY
                 oGroup:nClrBoxOut   = CLR_LIGHTGRAY

                 DeleteObject( oGroup:hBrushSel )
                 DeleteObject( oGroup:hBrushUnSel )
                 DeleteObject( oGroup:hBack )
                 oGroup:hBrushUnSel  = oDlg:hBack
                 oGroup:hBack        = nil

                 for each oBtn in oGroup:aControls
                    if oBtn:IsKindOf( "TRBTN" )
                       oBtn:oFont:End()
                       oBtn:SetFont( oRb:oFont )

                       oBtn:nHeight        = 80
                       oBtn:bClrText       = { || CLR_WHITE }
                       oBtn:bClrGradNormal = { | lPressed | If( lPressed, { { 1, CLR_GRAY, CLR_GRAY } },;
                                                                          { { 1, CLR_GRAY, CLR_GRAY } } ) }
                       oBtn:aClrGradUnder = { || { { 1, CLR_LIGHTGRAY, CLR_LIGHTGRAY } } }
                       oBtn:aClrGradBack  = { { 1, CLR_LIGHTGRAY, CLR_LIGHTGRAY } }
                       oBtn:nClrBoxIn     = CLR_LIGHTGRAY
                       oBtn:nClrBoxOut    = CLR_LIGHTGRAY
                       oBtn:Refresh()
                    endif
                 next
                 oGroup:Refresh()
              endif
           next
        next

      case nTheme == RB_THEME_BLUE
         oRb:nClrPaneRB    = CLR_MSBLUE
         oRb:nClrBoxOut    = CLR_MSLIGHTGRAY
         oRb:nClrBoxIn     = CLR_MSLIGHTGRAY
         oRb:nClrBoxSelOut = CLR_MSLIGHTGRAY
         oRb:nClrBoxSelIn  = CLR_MSLIGHTGRAY
         oRb:aGrad         = { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } }
         oRb:aGradFld      = { | nOpt | If( nOpt == oRb:nStart, { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } },;
                                                                { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } } ) }
         oRb:aGradHigh     = { { 1, CLR_BLACK, CLR_BLACK } }
         oRb:aGradOver     = { { 1, RGB( 0, 114, 198 ), RGB( 0, 114, 198 ) } }

         AFill( oRb:aClrTabTxt, { | oSelf, nPrompt | If( nPrompt == oSelf:nOption, CLR_MSBLUE, CLR_WHITE ) } )

         DeleteObject( oRb:hBmpBrushEx )
         DeleteObject( oRb:hBrushEx )
         oRb:hBmpBrushEx = GradientBmp( oRb, oRb:nRight - oRb:nRightMargin - 3, oRb:nBottom - oRb:nTopMargin + 1, oRb:aGrad )
         oRb:hBrushEx    = CreatePatternBrush( oRb:hBmpBrushEx )

         for each oDlg in oRb:aDialogs

            oDlg:hBack = oRb:hBrushEx
            oDlg:Refresh()

            for each oGroup in oDlg:aControls
               if oGroup:IsKindOf( "TRBGROUP" )
                  oGroup:oFont:End()
                  oGroup:SetFont( oRb:oFont )

                  oGroup:nHeight      = 100
                  oGroup:nClrBoxIn    = CLR_LIGHTGRAY
                  oGroup:aGradCaption = { { 1, CLR_LIGHTGRAY, CLR_LIGHTGRAY } }
                  oGroup:bClrText     = { | lEnable | If( lEnable, CLR_BLACK, CLR_DARKGRAY ) }
                  oGroup:nClrBoxIn    = CLR_MSBLUE // CLR_LIGHTGRAY
                  oGroup:nClrBoxOut   = CLR_MSBLUE // CLR_LIGHTGRAY

                  DeleteObject( oGroup:hBrushSel )
                  DeleteObject( oGroup:hBrushUnSel )
                  DeleteObject( oGroup:hBack )
                  oGroup:hBrushUnSel  = oDlg:hBack
                  oGroup:hBack        = oDlg:hBack

                  for each oBtn in oGroup:aControls
                     if oBtn:IsKindOf( "TRBTN" )
                        oBtn:oFont:End()
                        oBtn:SetFont( oRb:oFont )

                        oBtn:nHeight        = 80
                        oBtn:bClrText       = { || CLR_BLACK }
                        oBtn:bClrGradNormal = { | lPressed | If( lPressed, { { 1, CLR_MSGRAY, CLR_MSGRAY } },;
                                                                           { { 1, CLR_MSGRAY, CLR_MSGRAY } } ) }
                        oBtn:aClrGradUnder = { || { { 1, CLR_MSGRAY, CLR_MSGRAY } } }
                        oBtn:aClrGradBack  = { { 1, CLR_MSGRAY, CLR_MSGRAY } }
                        oBtn:nClrBoxIn     = CLR_MSGRAY
                        oBtn:nClrBoxOut    = CLR_MSGRAY
                        oBtn:Refresh()
                     endif
                  next
                  oGroup:Refresh()
               endif
            next
         next

      case nTheme == RB_THEME_RED
         oRb:nClrPaneRB    = CLR_MSRED
         oRb:nClrBoxOut    = CLR_MSLIGHTGRAY
         oRb:nClrBoxIn     = CLR_MSLIGHTGRAY
         oRb:nClrBoxSelOut = CLR_MSLIGHTGRAY
         oRb:nClrBoxSelIn  = CLR_MSLIGHTGRAY
         oRb:aGrad         = { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } }
         oRb:aGradFld      = { | nOpt | If( nOpt == oRb:nStart, { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } },;
                                                                { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } } ) }
         oRb:aGradHigh     = { { 1, CLR_BLACK, CLR_BLACK } }
         oRb:aGradOver     = { { 1, RGB( 0, 114, 198 ), RGB( 0, 114, 198 ) } }

         AFill( oRb:aClrTabTxt, { | oSelf, nPrompt | If( nPrompt == oSelf:nOption, CLR_MSRED, CLR_WHITE ) } )

         DeleteObject( oRb:hBmpBrushEx )
         DeleteObject( oRb:hBrushEx )
         oRb:hBmpBrushEx = GradientBmp( oRb, oRb:nRight - oRb:nRightMargin - 3, oRb:nBottom - oRb:nTopMargin + 1, oRb:aGrad )
         oRb:hBrushEx    = CreatePatternBrush( oRb:hBmpBrushEx )

         for each oDlg in oRb:aDialogs

            oDlg:hBack = oRb:hBrushEx
            oDlg:Refresh()

            for each oGroup in oDlg:aControls
               if oGroup:IsKindOf( "TRBGROUP" )
                  oGroup:oFont:End()
                  oGroup:SetFont( oRb:oFont )

                  oGroup:nHeight      = 100
                  oGroup:nClrBoxIn    = CLR_LIGHTGRAY
                  oGroup:aGradCaption = { { 1, CLR_LIGHTGRAY, CLR_LIGHTGRAY } }
                  oGroup:bClrText     = { | lEnable | If( lEnable, CLR_BLACK, CLR_DARKGRAY ) }
                  oGroup:nClrBoxIn    = CLR_MSRED
                  oGroup:nClrBoxOut   = CLR_MSRED

                  DeleteObject( oGroup:hBrushSel )
                  DeleteObject( oGroup:hBrushUnSel )
                  DeleteObject( oGroup:hBack )
                  oGroup:hBrushUnSel  = oDlg:hBack
                  oGroup:hBack        = oDlg:hBack

                  for each oBtn in oGroup:aControls
                     if oBtn:IsKindOf( "TRBTN" )
                        oBtn:oFont:End()
                        oBtn:SetFont( oRb:oFont )

                        oBtn:nHeight        = 80
                        oBtn:bClrText       = { || CLR_BLACK }
                        oBtn:bClrGradNormal = { | lPressed | If( lPressed, { { 1, CLR_MSGRAY, CLR_MSGRAY } },;
                                                                           { { 1, CLR_MSGRAY, CLR_MSGRAY } } ) }
                        oBtn:aClrGradUnder = { || { { 1, CLR_MSGRAY, CLR_MSGRAY } } }
                        oBtn:aClrGradBack  = { { 1, CLR_MSGRAY, CLR_MSGRAY } }
                        oBtn:nClrBoxIn     = CLR_MSGRAY
                        oBtn:nClrBoxOut    = CLR_MSGRAY
                        oBtn:Refresh()
                     endif
                  next
                  oGroup:Refresh()

               endif
            next
         next

      case nTheme == RB_THEME_GREEN
         oRb:nClrPaneRB    = CLR_MSGREEN1
         oRb:nClrBoxOut    = CLR_MSLIGHTGRAY
         oRb:nClrBoxIn     = CLR_MSLIGHTGRAY
         oRb:nClrBoxSelOut = CLR_MSLIGHTGRAY
         oRb:nClrBoxSelIn  = CLR_MSLIGHTGRAY
         oRb:aGrad         = { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } }
         oRb:aGradFld      = { | nOpt | If( nOpt == oRb:nStart, { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } },;
                                                                { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } } ) }
         oRb:aGradHigh     = { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } }
         oRb:aGradOver     = { { 1, RGB( 0, 114, 198 ), RGB( 0, 114, 198 ) } }

         AFill( oRb:aClrTabTxt, { | oSelf, nPrompt | If( nPrompt == oSelf:nOption, CLR_MSGREEN2, CLR_WHITE ) } )

         DeleteObject( oRb:hBmpBrushEx )
         DeleteObject( oRb:hBrushEx )
         oRb:hBmpBrushEx = GradientBmp( oRb, oRb:nRight - oRb:nRightMargin - 3, oRb:nBottom - oRb:nTopMargin + 1, oRb:aGrad )
         oRb:hBrushEx    = CreatePatternBrush( oRb:hBmpBrushEx )

         for each oDlg in oRb:aDialogs

            oDlg:hBack = oRb:hBrushEx
            oDlg:Refresh()

            for each oGroup in oDlg:aControls
               if oGroup:IsKindOf( "TRBGROUP" )
                  oGroup:oFont:End()
                  oGroup:SetFont( oRb:oFont )

                  oGroup:nHeight      = 100
                  oGroup:nClrBoxIn    = CLR_MSGREEN2
                  oGroup:aGradCaption = { { 1, CLR_MSGREEN3, CLR_MSGREEN3 } }
                  oGroup:bClrText     = { | lEnable | If( lEnable, CLR_BLACK, CLR_MSLIGHTGRAY ) }
                  oGroup:nClrBoxIn    = CLR_MSGREEN3
                  oGroup:nClrBoxOut   = CLR_MSGREEN3

                  DeleteObject( oGroup:hBrushSel )
                  DeleteObject( oGroup:hBrushUnSel )
                  DeleteObject( oGroup:hBack )
                  oGroup:hBrushUnSel  = oDlg:hBack
                  oGroup:hBack        = oDlg:hBack

                  for each oBtn in oGroup:aControls
                     if oBtn:IsKindOf( "TRBTN" )
                        oBtn:oFont:End()
                        oBtn:SetFont( oRb:oFont )

                        oBtn:nHeight        = 80
                        oBtn:bClrText       = { || CLR_BLACK }
                        oBtn:bClrGradNormal = { | lPressed | If( lPressed, { { 1, CLR_MSGREEN1, CLR_MSGREEN1 } },;
                                                                           { { 1, CLR_MSGREEN2, CLR_MSGREEN2 } } ) }
                        oBtn:aClrGradUnder = { || { { 1, CLR_MSGREEN3, CLR_MSGREEN3 } } }
                        oBtn:aClrGradBack  = { { 1, CLR_MSGREEN1, CLR_MSGREEN1 } }
                        oBtn:nClrBoxIn     = CLR_MSGRAY
                        oBtn:nClrBoxOut    = CLR_MSGRAY
                        oBtn:Refresh()
                     endif
                  next
                  oGroup:Refresh()

               endif
            next
         next

      case nTheme == RB_THEME_ORANGE
         oRb:nClrPaneRB    = CLR_MSORANGE
         oRb:nClrBoxOut    = CLR_MSLIGHTGRAY
         oRb:nClrBoxIn     = CLR_MSLIGHTGRAY
         oRb:nClrBoxSelOut = CLR_MSLIGHTGRAY
         oRb:nClrBoxSelIn  = CLR_MSLIGHTGRAY
         oRb:aGrad         = { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } }
         oRb:aGradFld      = { | nOpt | If( nOpt == oRb:nStart, { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } },;
                                                                { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } } ) }
         oRb:aGradHigh     = { { 1, CLR_BLACK, CLR_BLACK } }
         oRb:aGradOver     = { { 1, RGB( 0, 114, 198 ), RGB( 0, 114, 198 ) } }

         AFill( oRb:aClrTabTxt, { | oSelf, nPrompt | If( nPrompt == oSelf:nOption, CLR_MSBLUE, CLR_WHITE ) } )

         DeleteObject( oRb:hBmpBrushEx )
         DeleteObject( oRb:hBrushEx )
         oRb:hBmpBrushEx = GradientBmp( oRb, oRb:nRight - oRb:nRightMargin - 3, oRb:nBottom - oRb:nTopMargin + 1, oRb:aGrad )
         oRb:hBrushEx    = CreatePatternBrush( oRb:hBmpBrushEx )

         for each oDlg in oRb:aDialogs

            oDlg:hBack = oRb:hBrushEx
            oDlg:Refresh()

            for each oGroup in oDlg:aControls
               if oGroup:IsKindOf( "TRBGROUP" )
                  oGroup:oFont:End()
                  oGroup:SetFont( oRb:oFont )

                  oGroup:nHeight      = 100
                  oGroup:nClrBoxIn    = CLR_LIGHTGRAY
                  oGroup:aGradCaption = { { 1, CLR_LIGHTGRAY, CLR_LIGHTGRAY } }
                  oGroup:bClrText     = { | lEnable | If( lEnable, CLR_BLACK, CLR_DARKGRAY ) }
                  oGroup:nClrBoxIn    = CLR_MSORANGE // CLR_LIGHTGRAY
                  oGroup:nClrBoxOut   = CLR_MSORANGE // CLR_LIGHTGRAY

                  DeleteObject( oGroup:hBrushSel )
                  DeleteObject( oGroup:hBrushUnSel )
                  DeleteObject( oGroup:hBack )
                  oGroup:hBrushUnSel  = oDlg:hBack
                  oGroup:hBack        = oDlg:hBack

                  for each oBtn in oGroup:aControls
                     if oBtn:IsKindOf( "TRBTN" )
                        oBtn:oFont:End()
                        oBtn:SetFont( oRb:oFont )

                        oBtn:nHeight        = 80
                        oBtn:bClrText       = { || CLR_BLACK }
                        oBtn:bClrGradNormal = { | lPressed | If( lPressed, { { 1, CLR_MSGRAY, CLR_MSGRAY } },;
                                                                           { { 1, CLR_MSGRAY, CLR_MSGRAY } } ) }
                        oBtn:aClrGradUnder = { || { { 1, CLR_MSGRAY, CLR_MSGRAY } } }
                        oBtn:aClrGradBack  = { { 1, CLR_MSGRAY, CLR_MSGRAY } }
                        oBtn:nClrBoxIn     = CLR_MSGRAY
                        oBtn:nClrBoxOut    = CLR_MSGRAY
                        oBtn:Refresh()
                     endif
                  next
                  oGroup:Refresh()

               endif
            next
         next

      case nTheme == RB_THEME_PURPLE
         oRb:nClrPaneRB    = CLR_MSPURPLE
         oRb:nClrBoxOut    = CLR_MSLIGHTGRAY
         oRb:nClrBoxIn     = CLR_MSLIGHTGRAY
         oRb:nClrBoxSelOut = CLR_MSLIGHTGRAY
         oRb:nClrBoxSelIn  = CLR_MSLIGHTGRAY
         oRb:aGrad         = { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } }
         oRb:aGradFld      = { | nOpt | If( nOpt == oRb:nStart, { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } },;
                                                                { { 1, CLR_MSLIGHTGRAY, CLR_MSLIGHTGRAY } } ) }
         oRb:aGradHigh     = { { 1, CLR_BLACK, CLR_BLACK } }
         oRb:aGradOver     = { { 1, RGB( 0, 114, 198 ), RGB( 0, 114, 198 ) } }

         AFill( oRb:aClrTabTxt, { | oSelf, nPrompt | If( nPrompt == oSelf:nOption, CLR_MSBLUE, CLR_WHITE ) } )

         DeleteObject( oRb:hBmpBrushEx )
         DeleteObject( oRb:hBrushEx )
         oRb:hBmpBrushEx = GradientBmp( oRb, oRb:nRight - oRb:nRightMargin - 3, oRb:nBottom - oRb:nTopMargin + 1, oRb:aGrad )
         oRb:hBrushEx    = CreatePatternBrush( oRb:hBmpBrushEx )

         for each oDlg in oRb:aDialogs

            oDlg:hBack = oRb:hBrushEx
            oDlg:Refresh()

            for each oGroup in oDlg:aControls
               if oGroup:IsKindOf( "TRBGROUP" )
                  oGroup:oFont:End()
                  oGroup:SetFont( oRb:oFont )

                  oGroup:nHeight      = 100
                  oGroup:nClrBoxIn    = CLR_LIGHTGRAY
                  oGroup:aGradCaption = { { 1, CLR_LIGHTGRAY, CLR_LIGHTGRAY } }
                  oGroup:bClrText     = { | lEnable | If( lEnable, CLR_BLACK, CLR_DARKGRAY ) }
                  oGroup:nClrBoxIn    = CLR_MSPURPLE
                  oGroup:nClrBoxOut   = CLR_MSPURPLE

                  DeleteObject( oGroup:hBrushSel )
                  DeleteObject( oGroup:hBrushUnSel )
                  DeleteObject( oGroup:hBack )
                  oGroup:hBrushUnSel  = oDlg:hBack
                  oGroup:hBack        = oDlg:hBack

                  for each oBtn in oGroup:aControls
                     if oBtn:IsKindOf( "TRBTN" )
                        oBtn:oFont:End()
                        oBtn:SetFont( oRb:oFont )

                        oBtn:nHeight        = 80
                        oBtn:bClrText       = { || CLR_BLACK }
                        oBtn:bClrGradNormal = { | lPressed | If( lPressed, { { 1, CLR_MSGRAY, CLR_MSGRAY } },;
                                                                           { { 1, CLR_MSGRAY, CLR_MSGRAY } } ) }
                        oBtn:aClrGradUnder = { || { { 1, CLR_MSGRAY, CLR_MSGRAY } } }
                        oBtn:aClrGradBack  = { { 1, CLR_MSGRAY, CLR_MSGRAY } }
                        oBtn:nClrBoxIn     = CLR_MSGRAY
                        oBtn:nClrBoxOut    = CLR_MSGRAY
                        oBtn:Refresh()
                     endif
                  next
                  oGroup:Refresh()
               endif
            next
         next

   endcase

   oRb:Default()

return nil

//----------------------------------------------------------------------------//
Muchas gracias.

Re: bug FWH EXCESS RELEASE

Posted: Mon Apr 13, 2020 2:02 pm
by cnavarro
Moises, quita todas las llamadas a

Code: Select all

oBtn:oFont:End()

y 

oGroup:oFont:End()
 
El metodo SetFont ya lo hace

Re: bug FWH EXCESS RELEASE

Posted: Mon Apr 13, 2020 2:58 pm
by MOISES
Ok, solucionado. Desconocía ese cambio.

Muchas gracias.