Page 1 of 1

Color en checkbox no editable

Posted: Tue May 12, 2020 5:16 pm
by José Luis Sánchez
Hola a todos,
en el Puchero https://github.com/JoseluisSanchez/puchero tengo un formulario de recetas donde _ se calculan de manera automática. _ son GET no editables y los pongo en color haciendo lo siguiente:

Code: Select all

   REDEFINE GET aSayEsc[ 9 ] VAR nReAz2 PICTURE "@E 9,999,999.99" ;
      ID 27 OF oFld:aDialogs[ 6 ] WHEN .F.
   aSayEsc[ 9 ]:lDisColors  := .F.
   aSayEsc[ 9 ]:nClrTextDis := GetSysColor( 13 )
 
El resultado es

Image

Ahora quiero hacer lo mismo con unos checkbox que también llevan la clausula WHEN .f para que el usuario no los edite, pero no encuentro la forma. Quiero darles el mismo color por un tema de coherencia del interfaz, pues el gris de control deshabilitado queda un tanto feote.

Image

¿ Alguien sabe como hacer esto ?

Saludos,
José Luis

Re: Color en checkbox no editable

Posted: Wed May 13, 2020 8:29 pm
by Rick Lipkin
Jose

I have had trouble tabbing thru check-boxes and active gets in a mix of controls was confusing to users . I found this simple code which changes the color of the Get when it gets in focus:

Code: Select all

SetGetColorFocus( rgb(209,224,252) )      // turn on color for in focus gets

SetGetColorFocus( CLR_WHITE )   // resets the in-focus back to default ..
 
may not be exactly what you are looking for ..

Rick Lipkin

Re: Color en checkbox no editable

Posted: Thu May 14, 2020 7:19 am
by JESUS MARIN
Buenos días José Luis.
Prueba, si lo deseas este ejemplo. Por si te puede inspirar algo.

Code: Select all

# INCLUDE "FIVEWIN.CH"


FUNCTION MAIN()

LOCAL oDlg, oFont
LOCAL oCheck, lCheck:=.t.


DEFINE FONT oFont NAME "calibri" SIZE 0,-14

DEFINE DIALOG oDlg FROM 0,0 TO 300,600 PIXEL TITLE "Prueba de color en CheckBox desactivado"


      @20,50 CHECKBOX oCheck VAR lCheck PROMPT "Gluten" OF oDlg PIXEL UPDATE FONT oFont SIZE 80,20


     @120,10  BUTTON "Desactivar" OF oDlg PIXEL FONT oFont SIZE 50,22 ACTION xDisable(oCheck)
     @120,70  BUTTON "Activar"    OF oDlg PIXEL FONT oFont SIZE 50,22 ACTION oCheck:Enable()
     @120,240 BUTTON "Salir"      OF oDlg PIXEL FONT oFont SIZE 50,22 ACTION oDlg:End()

ACTIVATE DIALOG oDlg CENTER


oFont:End()

RETURN(NIL)



STATIC FUNCTION xDisable(oCheckBox)

LOCAL oWnd     := oCheckBox:oWnd
LOCAL oFont    := oCheckBox:oFont
LOCAL cCaption := oCheckBox:cCaption
LOCAL nTop     := oCheckBox:nTop
LOCAL nLeft    := oCheckBox:nLeft
LOCAL nWidth   := oCheckBox:nWidth-18      // Los ajustes -18 y -12 dependen del tipo de letra, si es un Dialogo, etc..
LOCAL nHeight  := oCheckBox:nHeight-12      // Debería ser calculado para cualquier font. Esto es solo para el ejemplo

oCheckBox:Disable()
@nTop+12,nLeft+18 SAY cCaption OF oWnd SIZE nWidth, nHeight FONT oFont PIXEL

RETURN(NIL)

 

Re: Color en checkbox no editable

Posted: Thu May 14, 2020 11:12 am
by mgsoft
José Luis,

¿Podrías decirnos como pones el título del diálogo en azul?

Muchas gracias.

Re: Color en checkbox no editable

Posted: Thu May 14, 2020 3:18 pm
by José Luis Sánchez
Rick, thanks but that's not what I'm looking for
Jesús, pues lo de la letra lo veo complicado de calcular, pero me has dado una idea. Tendría que hacerlo con bitmaps, es un trabajazo pero puede quedar bien.
MG, los colores son los de Windows con énfasis en la barra de título, no es cosa de mi programa.

Saludos,

Re: Color en checkbox no editable

Posted: Thu May 14, 2020 3:57 pm
by jgabri
José Luis, pon los checkbox sin texto y a la derecha de cada uno, le pones un say, al say le cambias el color...

Un saludo

Re: Color en checkbox no editable

Posted: Fri May 15, 2020 3:41 pm
by José Luis Sánchez
Al final decidí hacerme mis propios checkbox usando un bitmappara el cuadro y un text para la etiqueta. De esta manera tengo los mismos colores que en los get no editables. Es más frabajo, pero creo que el resultado ha valido la pena:

Image

El código es muy sencillo:

Code: Select all

   REDEFINE BITMAP aAler[01] ID 201 OF oFld:aDialogs[ 7 ] ;
      RESOURCE IIF(lReEGluten==.t., "16_CHECK_BOX", "16_UNCHECK_BOX") TRANSPARENT UPDATE 
   REDEFINE SAY aAler[ 16 ] ID 202 OF oFld:aDialogs[ 7 ] COLOR GetSysColor( 13 )
 
Saludos,