Você já precisou buscar ou o descobrir o CSS de um objeto em uma tela AdvPL? Saiba como no artigo de hoje.
Recentemente me perguntaram, como descobrir o CSS de um botão numa tela em AdvPL, pois bem jovens, é mais simples do que parece.
O que você precisa fazer, é pegar todos os componentes da tela, percorrer eles, e quando for do tipo botão, você usa o método GetCSS e grava em um diretório essa informação.
Por exemplo, no ponto de entrada AfterLogin, coloquei um atalho para executar a função u_zBuscaCSS, e abaixo é o código dela:
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} User Function zBuscaCSS Função que busca o CSS de um objeto na tela do Protheus @type Function @author Atilio @since 29/05/2021 @version version @example Colocar no AfterLogin, por exemplo: User Function AfterLogin() SetKey(K_SH_F7, { || u_zBuscaCSS() }) //Shift + F7 Return /*/ User Function zBuscaCSS() Local aArea := GetArea() Local nAtual Local cCSS Local cPasta := GetTempPath() Local cArquivo := "zBuscaCSS.txt" //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 //Se tiver algum atributo de ação e tiver o texto Confirmar If ValAtrib("aControles[nAtuPvt]:bAction") != "U" .And. aControles[nAtuPvt]:cCaption == "Confirmar" //Pega o CSS do objeto, grava ele em um arquivo txt, e abre o arquivo para visualizar cCSS := aControles[nAtuPvt]:GetCSS() MemoWrite(cPasta + cArquivo, cCSS) ShellExecute("OPEN", cArquivo, "", cPasta, 1) EndIf Next RestArea(aArea) Return Static Function ValAtrib(cVar) Return Type(cVar)
A partir disso, ao executar esse atalho, será exibido na tela, o txt gerado:
Dessa forma, nós podemos copiar esse trecho e colocar em nossas customizações. Por exemplo, se eu mudar através do método SetCSS, ele irá ter esse estilo gráfico. Abaixo o exemplo de como ficaria o código:
//Percorre todos os objetos da tela For nAtual := 1 To Len(aControles) nAtuPvt := nAtual //Se for do botão Outras Ações, irá definir o CSS If ValAtrib("aControles[nAtuPvt]:bAction") != "U" .And. aControles[nAtuPvt]:cCaption == "Outras Ações" aControles[nAtuPvt]:SetCSS("TButton { font: bold; background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #3DAFCC, stop: 1 #0D9CBF); color: #FFFFFF; border-width: 1px; border-style: solid; border-radius: 3px; border-color: #369CB5; }TButton:focus { padding:0px; outline-width:1px; outline-style:solid; outline-color: #51DAFC; outline-radius:3px; border-color:#369CB5;}TButton:hover { color: #FFFFFF; background-color : qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #3DAFCC, stop: 1 #1188A6); border-width: 1px; border-style: solid; border-radius: 3px; border-color: #369CB5; }TButton:pressed { color: #FFF; background-color : qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #1188A6, stop: 1 #3DAFCC); border-width: 1px; border-style: solid; border-radius: 3px; border-color: #369CB5; }TButton:disabled { color: #FFFFFF; background-color: #4CA0B5; }") EndIf Next
Eu fiz um teste para vocês visualizarem, alterando o estilo do botão Outras Ações, abaixo um print do original:
E abaixo um print da versão modificada com o css:
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Como sempre, artigos incríveis.
Opa, obrigado pelo feedback e elogio grande Súlivan.
Um grande abraço.