Page 1 of 1

Los Says que muestran los colores no funcionan (solucionado)

PostPosted: Sun Aug 17, 2014 3:41 pm
by mastintin
Los says que muestran visualmente los colores que usamos en el reporte no funcionan . Boton Fonts -> folder colors ...

Se quedan transparentes y no asignan el color de fondo . He revisado el código y parece que está bien pero no va y no lo localizo . ¿ Puede ser un tema del color de fondo del dialogo ? . No pillo el gazapo y seguro que es tonto .

Re: Los Says que muestran los colores no funcionan

PostPosted: Sun Aug 17, 2014 5:50 pm
by cnavarro
Manuel, llevo unas horas mirando y tampoco lo consigo
Lo máximo que he podido ver es:

Image

Code: Select all  Expand view

   For x = 1 to Len( aColorSay )
       nDefClr := Val( aColors[ x ] )
       REDEFINE SAY aColorSay[ x ] ID 401+(x-1) OF oFld:aDialogs[i] COLORS nDefClr , nDefClr
   Next x
 


Lo que pretendía es algo parecido a lo que tiene el compañero, en el que todo el Say aparezca relleno con el color correspondiente
viewtopic.php?f=3&t=29016#p163898

Re: Los Says que muestran los colores no funcionan

PostPosted: Sun Aug 17, 2014 9:07 pm
by mastintin
Se resuelve comentando la linea :

// SetDlgGradient( { { 1, RGB( 199, 216, 237 ), RGB( 237, 242, 248 ) } } )

en la function main() al principio del programa.

Re: Los Says que muestran los colores no funcionan

PostPosted: Mon Aug 18, 2014 8:56 am
by mastintin
Es un problema con los say cuando se usa manifest o degradados , que no coge los colores de fondo que se asignan ya que el fondo se vuelve transparente .
Seria deseable que en el codigo fivewin pudieramos asignar algo como osay:lOldColors := .t. y esto hiciera que el comportamiento de los say fuera como antiguamente ...

Re: Los Says que muestran los colores no funcionan

PostPosted: Mon Aug 18, 2014 12:38 pm
by Antonio Linares
Manuel,

Prueba a hacer con cada SAY:

oSay:lTransparent := .F.

Re: Los Says que muestran los colores no funcionan

PostPosted: Mon Aug 18, 2014 1:10 pm
by mastintin
Antonio Linares wrote:Manuel,

Prueba a hacer con cada SAY:

oSay:lTransparent := .F.


No funciona , lo he revisado y este comportamiento pasa cuando el say esta colocado dentro de un Folder . Si lo colocamos directamente sobre el dialogo funciona correcto .

Code: Select all  Expand view

// esto debe compilarse incluyendo  el manifest ...

function Main()

   local oDlg, i
   local aSay[42]
   local aColors := { "COLOR_SCROLLBAR"      ,;
                      "COLOR_BACKGROUND"     ,;
                      "COLOR_ACTIVECAPTION"  ,;
                      "COLOR_INACTIVECAPTION",;
                      "COLOR_MENU"           ,;
                      "COLOR_WINDOW"         ,;
                      "COLOR_WINDOWFRAME"    ,;
                      "COLOR_MENUTEXT"       ,;
                      "COLOR_WINDOWTEXT"     ,;
                      "COLOR_CAPTIONTEXT"    ,;
                      "COLOR_ACTIVEBORDER"   ,;
                      "COLOR_INACTIVEBORDER" ,;
                      "COLOR_APPWORKSPACE"   ,;
                      "COLOR_HIGHLIGHT"      ,;
                      "COLOR_HIGHLIGHTTEXT"  ,;
                      "COLOR_BTNFACE"        ,;
                      "COLOR_BTNSHADOW"      ,;
                      "COLOR_GRAYTEXT"       ,;
                      "COLOR_BTNTEXT"        ,;
                      "COLOR_INACTIVECAPTIONTEXT",;
                      "COLOR_BTNHIGHLIGHT"   }

   DEFINE DIALOG oDlg FROM 1, 1 TO 46, 130   ;
      TITLE "Colores de Windows"

   @ 10,10 FOLDER oFld PROMPT "1-99", "100-199" OF oDlg  PIXEL SIZE 200,175


   FOR i := 1 TO 21
      @ i, 02 SAY aSay[(2*i)-1] PROMPT STR(i-1,2)+ " "+ aColors[i] OF oFld:aDialogs[ 1 ]
      @ i, 18 SAY aSay[2*i] PROMPT "       " SIZE 30, 8  ;
         COLOR GetSysColor(i-1), GetSysColor(i-1) OF oFld:aDialogs[ 1 ]
         aSay[2*i] :=lTransparent:= .f.
   NEXT
   FOR i := 1 TO 21
      @ i, 44 SAY aSay[(2*i)-1] PROMPT STR(i-1+21,2)+ " "+ aColors[i] OF oDlg
      @ i, 60 SAY aSay[2*i] PROMPT "       " SIZE 30, 8  ;
         COLOR GetSysColor(i-1+21), GetSysColor(i-1+21) OF oDlg

   NEXT

   ACTIVATE DIALOG oDlg

return nil

 


Image

Re: Los Says que muestran los colores no funcionan

PostPosted: Tue Aug 19, 2014 10:41 am
by mastintin
Despues de muchos intentos una mejor solucion es usar btnFlat en vez say . Para ello he implementado el methodo redefine en la clase btnflat :

Code: Select all  Expand view


METHOD ReDefine( nId, bAction, oWnd,  oFont, ;
                 lUpdate, bWhen, bValid, cPrompt, lBorder,;
                 nClrText, nClrPane, lCancel, lDefault ) CLASS TBtnFlat

 DEFAULT lBorder := .F., ;
         nClrText := CLR_WHITE, nClrPane := CLR_BLUE, ;
         lCancel := .F. , lDefault := .F.

 DEFAULT oWnd := GetWndDefault()

   ::nStyle    = nOR( WS_CHILD, WS_VISIBLE, WS_TABSTOP, If( lDefault, BS_DEFPUSHBUTTON, 0 ) )
   ::nId       = nId
   ::bAction   = bAction
   
   if oFont == nil
      ::GetFont()
   else
      ::SetFont( oFont )
   endif
   
   ::oWnd      = oWnd
   ::lUpdate   = lUpdate
   ::bWhen     = bWhen
   ::bValid    = bValid
   ::cCaption  = cPrompt
   ::lCancel   = lCancel
   ::nClrText  = nClrText
   ::nClrPane  = nClrPane
   ::lBorder   = lBorder
   ::lDefault  = lDefault
   ::lPressed  = .F.
   ::lBtnDown  = .F.
   ::lBtnUp    = .F.
   ::lWorking  = .F.
   ::lTransparent = .F.

   ::nDlgCode  = DLGC_WANTALLKEYS

   ::Register( nOR( CS_VREDRAW, CS_HREDRAW ) )

   oWnd:DefControl( Self )

return Self


 


y su include correspondiente :

Code: Select all  Expand view


#xcommand REDEFINE FLATBTN [<oBtn>] ;
             [ ID <nId> ] ;
             [ ACTION <uAction,...> ] ;
             [ <of:OF, WINDOW, DIALOG> <oWnd> ] ;
             [ VALID <uValid> ] ;
             [ WHEN <uWhen> ] ;
             [ <lUpdate: UPDATE> ] ;
             [ PROMPT <cPrompt> ] ;
             [ COLOR <nClrText>, <nClrPane> ] ;
             [ FONT <oFont> ] ;
             [ <lNoBorder: NOBORDER> ] ;
             [ <lCancel: CANCEL> ] ;
             [ <lDefault: DEFAULT> ] ;
          => ;
         [ <oBtn> := ] TBtnFlat():Redefine( <nId>,;
           [{|Self|<uAction>}],  <oWnd>, <oFont>,  <.lUpdate.>,<{uWhen}>, <{uValid}>,;
            <cPrompt>, !<.lNoBorder.>, <nClrText>, <nClrPane>, <.lCancel.>,  <.lDefault.> )



 

He hecho un pequeño test y funciona bien con los recursos button ...

Re: Los Says que muestran los colores no funcionan

PostPosted: Tue Aug 19, 2014 2:19 pm
by mastintin
Con esto se resuelve el problema ...

Code: Select all  Expand view


function GeneralSettings()

   ......

   FOR n=1 TO 30
        REDEFINE FLATBTN aColorSay[n ] PROMPT "" ID (400+n) OF oFld:aDialogs[i] COLOR SetColor( aColors[n ], nDefClr ), SetColor( aColors[n ], nDefClr ) ;
   ACTION .t.

   next

//   REDEFINE SAY aColorSay[1 ] PROMPT "" ID 401 OF oFld:aDialogs[i] COLORS SetColor( aColors[1 ], nDefClr ), SetColor( aColors[1 ], nDefClr )
//   REDEFINE SAY aColorSay[2 ] PROMPT "" ID 402 OF oFld:aDialogs[i] COLORS SetColor( aColors[2 ], nDefClr ), SetColor( aColors[2 ], nDefClr )
   .....


 

Re: Los Says que muestran los colores no funcionan

PostPosted: Thu Aug 21, 2014 12:32 pm
by Antonio Linares
Manuel,

Actualizado FWH con tus cambios, muchas gracias :-)

Re: Los Says que muestran los colores no funcionan

PostPosted: Fri Aug 22, 2014 3:45 am
by Antonio Linares
Manuel,

He conseguido solucionar los colores evitando tenr que usar BtnFlats :-)

Ya he actualizado el respositorio