No vídeo de hoje, iremos responder a dúvida em uma forma de realçar a empresa e filial (deixando o cabeçalho colorido).
Hoje, a dúvida foi feita por dois internautas, os grandes Caique San e Willião, onde no cenário em que eles usam o ERP, existem muitas filiais e às vezes deve se ter muita atenção para não fazer lançamentos errados.
Com isso em mente, foi criado os pontos de entrada ChkExec e MBRWBTN, e junto deles uma lógica para descobrir a variável da barra superior do Protheus, colocar em uma variável Static, e atualizar conforme o código da filial.
E abaixo o código fonte desenvolvido para exemplificar:
//Bibliotecas
#Include 'TOTVS.CH'
Static cCorEmp02 := "0B9BBF"
Static cCorEmp01 := "F39C12"
//Foi criado como static, para ficar só nesse prw, mas ser possível alterar a variável padrão
Static oLabelChk := Nil
/*/{Protheus.doc} User Function ChkExec
Ponto de entrada acionado ao abrir alguma rotina do Protheus
@type Function
@author Atilio
@since 18/08/2021
/*/
User Function ChkExec()
Local aArea := GetArea()
Local lRet := .T.
fTrataFil()
RestArea(aArea)
Return lRet
/*/{Protheus.doc} User Function MBRWBTN
Ponto de entrada acionado ao clicar em algum botão de um browse MVC ou comum
@type Function
@author Atilio
@since 18/08/2021
/*/
User Function MBRWBTN()
Local aArea := GetArea()
Local aDados := {}
aDados := fAltText(oLabelChk)
oLabelChk:SetText(aDados[1])
oLabelChk:SetCSS(aDados[2])
RestArea(aArea)
Return
Static Function fTrataFil()
Local aArea := GetArea()
Local nAtual
Local cCSS
Local aDados := {}
//Busca a tela e os objetos dentro dela
Private nAtuPvt
Private oPai := GetWndDefault()
Private aControles := oPai:aControls
//Percorre todos os objetos da tela
For nAtual := 1 To Len(aControles)
nAtuPvt := nAtual
cCSS := aControles[nAtual]:GetCSS()
//Se for um botão e for o de data (função GETSDIINFO)
//Foi feito no botão de data, pois nos controles depois ele é sobreposto para o de filial conforme oMsgItemX
If ValAtrib("aControles[nAtuPvt]:bLClicked") != "U" .And.;
ValAtrib("aControles[nAtuPvt]:cCaption") != "U" .And.;
ValAtrib("aControles[nAtuPvt]:cTitle") != "U" .And.;
aControles[nAtuPvt]:cCaption == aControles[nAtuPvt]:cTitle .And.;
cToD(aControles[nAtuPvt]:cCaption) == dDataBase
aControles[nAtuPvt]:SetCSS(u_zCSSFil())
ElseIf "TSAY" $ Upper(cCSS)
aDados := fAltText(aControles[nAtuPvt])
aControles[nAtuPvt]:SetText(aDados[1])
aControles[nAtuPvt]:SetCSS(aDados[2])
oLabelChk := aControles[nAtuPvt]
EndIf
Next
RestArea(aArea)
Return
Static Function ValAtrib(cVar)
Return Type(cVar)
Static Function fAltText(oObjeto)
Local aDados := {"", ""}
Local cTexto := ""
Local cCss := ""
Local cFil01 := " | PIRATININGA"
Local cFil02 := " | BAURU"
//Retira a cidade do texto
cTexto := oObjeto:cCaption
If cFil02 $ cTexto
cTexto := StrTran(cTexto, cFil02, "")
ElseIf cFil01 $ cTexto
cTexto := StrTran(cTexto, cFil01, "")
EndIf
//Referencia: https://stackoverflow.com/questions/66277783/gradient-color-for-text-of-qlabel-qt-c
//Se for do Piratininga será amarelo
If SubStr(cFilAnt, 1, 2) == "01"
cCSS := "TSay { margin: 2px; color: #" + cCorEmp01 + "; font: 20px Arial; background: qlineargradient( x1:0 y1:0.75, x2:0 y2:1, stop:0 yellow, stop:1 grey); }"
cTexto += cFil01
//Senão, será azul
Else
cCSS := "TSay { margin: 2px; color: #" + cCorEmp02 + "; font: 20px Arial; background: qlineargradient( x1:0 y1:0.75, x2:0 y2:1, stop:0 cyan, stop:1 grey); }"
cTexto += cFil02
EndIf
aDados[1] := cTexto
aDados[2] := cCSS
Return aDados
/*/{Protheus.doc} User Function zCSSFil
Função para alterar a cor de texto do botão de filial no topo da tela do Protheus
@type Function
@author Atilio
@since 16/06/2021
@version version
/*/
User Function zCSSFil()
Local aArea := GetArea()
Local cCSS := ''
//Monta o estilo do CSS
cCSS := 'TButton { '
cCSS += ' font-weight: bold;'
//cCSS += ' font-size: 12pt;'
cCSS += ' color: #DC3545;' //Vermelho
//cCSS += ' color: #17A2B8;' //Azul
//cCSS += ' color: #4C4C4C;' //Cinza padrão
cCSS += ' border-left: 1px solid #DEE0DD;'
cCSS += ' border-right: none;'
cCSS += ' border-top: none;'
cCSS += ' border-bottom: none;'
cCSS += ' background: transparent;'
cCSS += ' margin-top: 5px;'
cCSS += ' margin-bottom: 5px;'
cCSS += '}'
RestArea(aArea)
Return cCSS
Bom pessoal, por hoje é só.
Abraços e até a próxima.