FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Cambiar Color a una CELDA en Xbrowse por cada registro
Posts: 212
Joined: Wed Apr 07, 2021 03:56 PM
Cambiar Color a una CELDA en Xbrowse por cada registro
Posted: Tue Sep 06, 2022 11:14 PM

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

Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: Cambiar Color a una CELDA en Xbrowse por cada registro
Posted: Wed Sep 07, 2022 03:25 PM
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 (fw): Select all Collapse
....

    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
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Cambiar Color a una CELDA en Xbrowse por cada registro
Posted: Wed Sep 07, 2022 05:11 PM
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 (fw): Select all Collapse
#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
Posts: 212
Joined: Wed Apr 07, 2021 03:56 PM
Re: Cambiar Color a una CELDA en Xbrowse por cada registro
Posted: Wed Sep 07, 2022 06:53 PM

Muchas GRACIAS !!!! Leandro y como siempre CESAR!!!!

Continue the discussion