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.