Como fazer um texto com sombra em uma Dialog em AdvPL

No artigo de hoje, vamos demonstrar em como criar textos com sombras usando a classe TSay em uma dialog.

Algumas vezes, precisamos criar algum visual para demonstrar um TSay numa tela, e certa vez me perguntaram como eu tinha feito a thumb do nosso curso de lógica em AdvPL, e foi com uma dialog nativa, abaixo segue o print:

Exemplo de sombra em uma Dialog

A lógica para montar é basicamente essa:

  • É necessário ter 2 cores, uma mais clara e uma mais escura (nesse exemplo chamamos de nCorLetr01 e nCorLetr02)
  • Para cada label com sombra, será necessário criar dobrado, então se você for ter o texto “Daniel” terá que criar Daniel duas vezes
  • Ai para criar os labels, você cria o mais claro primeiro, e depois o mais escuro por cima, com a coluna e linha menores do que o mais claro

Abaixo o código fonte desenvolvido:

//Bibliotecas
#Include 'TOTVS.ch'
 
/*/{Protheus.doc} User Function zAdvPL
Funcao com tela customizada usando a classe TDialog que foi gerado pelo PDialogMaker
@type  Function
@author Atilio
@since 08/10/2022 
@see https://atiliosistemas.com/portfolio/pdialogmaker/
@obs Obrigado por usar um aplicativo da Atilio Sistemas
/*/
 
User Function zAdvPL()
    Local aArea         := FWGetArea()
    Local nCorFundo     := RGB(238, 238, 238)
    Local nJanAltura    := 400
    Local nJanLargur    := 580 
    Local cJanTitulo    := 'Cursos do Terminal de Informacao'
    Local lDimPixels    := .T. 
    Local lCentraliz    := .T. 
    Local nObjLinha     := 0
    Local nObjColun     := 0
    Local nObjLargu     := 0
    Local nObjAltur     := 0
    Local nCorLetr01   := RGB(149, 179, 215)
    Local nCorLetr02   := RGB(031, 073, 125)
    Private cFontNome   := 'Tahoma'
    Private oFontMaior := TFont():New(cFontNome, , -158, , .T.)
    Private oFontMenor := TFont():New(cFontNome, , -035, , .T.)
    Private oDialogPvt 
    Private bBlocoIni   := {|| /*fSuaFuncao()*/ } //Aqui voce pode acionar funcoes customizadas que irao ser acionadas ao abrir a dialog 
    //objetos 
    Private oSaySubTi1 
    Private cSaySubTi1    := 'Logica em' 
    Private oSaySubTi2 
    Private cSaySubTi2    := 'Logica em' 
    Private oSayTitul1 
    Private cSayTitul1    := 'AdvPL' 
    Private oSayTitul2 
    Private cSayTitul2    := 'AdvPL' 
     
    //Cria a dialog
    oDialogPvt := TDialog():New(0, 0, nJanAltura, nJanLargur, cJanTitulo, , , , , , nCorFundo, , , lDimPixels)
     
        //Sub Título com azul mais claro atrás
        nObjLinha := 47
        nObjColun := 16
        nObjLargu := 250
        nObjAltur := 30
        oSaySubTi1  := TSay():New(nObjLinha, nObjColun, {|| cSaySubTi1}, oDialogPvt, /*cPicture*/, oFontMenor, , , , lDimPixels, nCorLetr01, /*nClrBack*/, nObjLargu, nObjAltur, , , , , , /*lHTML*/)
 
        //Sub Título com azul mais escuro na frente
        nObjLinha := 44
        nObjColun := 13
        nObjLargu := 250
        nObjAltur := 30
        oSaySubTi2  := TSay():New(nObjLinha, nObjColun, {|| cSaySubTi2}, oDialogPvt, /*cPicture*/, oFontMenor, , , , lDimPixels, nCorLetr02, /*nClrBack*/, nObjLargu, nObjAltur, , , , , , /*lHTML*/)
 
        //Título com azul mais claro atrás
        nObjLinha := 64
        nObjColun := 23
        nObjLargu := 250
        nObjAltur := 160
        oSayTitul1  := TSay():New(nObjLinha, nObjColun, {|| cSayTitul1}, oDialogPvt, /*cPicture*/, oFontMaior, , , , lDimPixels, nCorLetr01, /*nClrBack*/, nObjLargu, nObjAltur, , , , , , /*lHTML*/)
 
        //Título com azul mais escuro na frente
        nObjLinha := 54
        nObjColun := 13
        nObjLargu := 250
        nObjAltur := 160
        oSayTitul2  := TSay():New(nObjLinha, nObjColun, {|| cSayTitul2}, oDialogPvt, /*cPicture*/, oFontMaior, , , , lDimPixels, nCorLetr02, /*nClrBack*/, nObjLargu, nObjAltur, , , , , , /*lHTML*/)
 
     
    //Ativa e exibe a janela
    oDialogPvt:Activate(, , , lCentraliz, , , bBlocoIni)
     
    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

2 Responses

  1. Giulliano disse:

    Rapaz, o analista com um lado artístico é outro nível.

Deixe uma resposta para Dan (Daniel Atilio)Cancelar resposta

Terminal de Informação