Page 1 of 1

Cambiar Color a una CELDA en Xbrowse por cada registro

PostPosted: Tue Sep 06, 2022 11:14 pm
by José Camilo
Hola, buenas noches para mi.
Tengo una dbf de artículos con el precio actual y precios de 4 proveedores distintos mas un campo por cada uno que me establece el porcentaje de diferencia con el precio actual.
necesito cambiar EN CADA REGISTRO el color de la celda del valor mas bajo de los precios de los 4 proveedores ya sea el color de fondo o el del importe.
si alguien ya encaro un tema así le agradecería me oriente como hacerlo.
Gracias.
José Camilo

Re: Cambiar Color a una CELDA en Xbrowse por cada registro

PostPosted: Wed Sep 07, 2022 3:25 pm
by leandro
Hola como vas?

Se me ocurre que recorras toda la dbf antes de mostrarla, identificas los registros que necesitas cambiar de color y los marcas. mediante una función defines los colores y luego si abres el xbrowse.

Code: Select all  Expand view


....

    oCol:bClrStd      = {|| {_CLR_GRIS,colorEstado( oDbf->campoestado ) }  }


...


****************************
*CAMBIA EL COLOR DE LA CELDA
****************************
Function colorEstado(valor)

    IF valor=="A"
        Return nRGB(139,139,139) //gris oscuro
    ELSEIF valor=="D"
        Return nRGB(0,210,0) //verde oscuro
    ELSEIF valor=="E"
        Return nRGB(255,117,117) //rojo oscuro
    ELSEIF valor=="V"
        Return nRGB(255,117,117) //rojo oscuro
    ELSEIF valor=="I"
        Return nRGB(255,243,21) //Amarillo Oscuro
    ELSEIF valor=="Z"
        Return nRGB(255,243,21) //Amarillo Oscuro
    ELSE
        Return nRGB(94, 174, 255) //Azul Defecto
    ENDIF

 

Re: Cambiar Color a una CELDA en Xbrowse por cada registro

PostPosted: Wed Sep 07, 2022 5:11 pm
by cmsoft
Creo que tendrías que poner el color según el valor mas chico para cada caso
Suponte que tienes la tabla con los siguientes campos: data1, data2, data3, valor1, valor2, valor3, valor4 , donde valor1 a valor4 son los que quieres comparar
Code: Select all  Expand view

#include "FiveWin.ch"
//----------------------------------------------------------------//
function Main()
   local oDlg, oLbx
   USE Data
   DEFINE DIALOG oDlg FROM 5,10 TO 24, 86 ;
      TITLE "Valor minimo en verde"

   @  1, 0.50 XBROWSE oLbx ALIAS "DATA" AUTOCOLS SIZE 285, 95 OF oDlg
   WITH OBJECT oLbx
      :aCols[4]:bClrStd := {|| {CLR_BLACK,colorMin(4) }  }
      :aCols[5]:bClrStd := {|| {CLR_BLACK,colorMin(5) }  }
      :aCols[6]:bClrStd := {|| {CLR_BLACK,colorMin(6) }  }
      :aCols[7]:bClrStd := {|| {CLR_BLACK,colorMin(7) }  }
      :CreateFromCode()
   END

   @ 10, 18 BUTTON "&Cancel" OF oDlg SIZE 40, 12  ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED

return nil

STATIC FUNCTION ColorMin(n)
LOCAL nColor := CLR_WHITE
DO CASE
   CASE n = 4
        IF(data->valor1 < data->valor2 .and. data->valor1 < data->valor3 .and. data->valor1 < data->valor4 )
           nColor := CLR_GREEN
        ENDIF
   CASE n = 5
        IF(data->valor2 < data->valor1 .and. data->valor2 < data->valor3 .and. data->valor2 < data->valor4 )
           nColor := CLR_GREEN
        ENDIF
   CASE n = 6
        IF(data->valor3 < data->valor1 .and. data->valor3 < data->valor2 .and. data->valor2 < data->valor4 )
           nColor := CLR_GREEN
        ENDIF
   CASE n = 7
        IF(data->valor4 < data->valor1 .and. data->valor4 < data->valor3 .and. data->valor4 < data->valor3 )
           nColor := CLR_GREEN
        ENDIF
ENDCASE
RETURN nColor
 

Re: Cambiar Color a una CELDA en Xbrowse por cada registro

PostPosted: Wed Sep 07, 2022 6:53 pm
by José Camilo
Muchas GRACIAS !!!! Leandro y como siempre CESAR!!!!