Alterando a cor da linha de um grid


Algo interessante que podemos fazer quando criamos um grid em nossa customização, é colorir as linhas, isso as vezes ajuda a identificar melhor um determinado problema como por exemplo, linhas que exibem valores, e quando o valor estiver negativo, colorimos ele de vermelho. No exemplo abaixo, vou exemplificar com um simples código como colorir determinadas linhas.

#include "protheus.ch"

User Function fCorGrid()
	//seu codigo	
		
	DEFINE MSDIALOG oDlg TITLE "Pedidos não atendidos" FROM 0,0 TO 250,500 PIXEL
		oList := TCBrowse():New(015,005,440,220,,,,oDlg,,,,,,,,,,,,.F.,,.T.,,.F.,,,)
		oList:AddColumn(TCColumn():New("Lib" 	, {|| If(aItens[oList:nAt,01],oOk,oNo)},,,,,,.T.,.F.,,,,.F., ) )
		oList:AddColumn(TCColumn():New("Pedido" , {|| aItens[oList:nAt,02]},"@!",,,"CENTER", 040,.F.,.F.,,{|| .F. },,.F., ) )
		oList:AddColumn(TCColumn():New("Item" 	, {|| aItens[oList:nAt,03]},"@!",,,"LEFT", 010,.F.,.F.,,,,.F., ) )
		oList:AddColumn(TCColumn():New("Produto", {|| aItens[oList:nAt,04]},"@!",,,"LEFT", 050,.F.,.F.,,,,.F., ) )
		oList:SetArray(aItens)
		oList:bWhen := { || Len(aItens) > 0 }

		//Para que a linha seja colorida conforme a sua escolha é expressamente necessário informar o atributo lUseDefaultColors como falso
		//Se estiver usando o MsNewGetDados() é necessário colocar assim:>> oList:oBrowse:lUseDefaultColors := .F.
		oList:lUseDefaultColors := .F.                
        
		//a propriedade SetBlkBackColor serve para colorir o fundo do grid
		//criei a função GETDCLR no qual passo a ela a linha posicionada e uma determinada cor.
		oList:SetBlkBackColor({|| GETDCLR(oList:nAt,8421376)})

		//Se estiver usando o MsNewGetDados()
		//oList:oBrowse:SetBlkBackColor({|| GETDCLR(oList:nAt,8421376)})

		oList:Align := CONTROL_ALIGN_ALLCLIENT
	ACTIVATE MSDIALOG oDlg CENTERED
Return

Static Function GETDCLR(nLinha,nCor)
	Local nRet := 16777215
	if Empty(aItens[nLinha,3]) //neste exemplo, se tiver conteudo na 3ª coluna pinte-a da cor informada no parametro
		nRet := nCor
	ElseIf (aItens[nLinha,2]=="010021") //se na coluna 2 tiver o conteudo informado pinte de outra cor
		nRet := 4227327
	Else
		nRet := 16777215
	Endif
Return nRet
Espero que tenha sido útil