Criando um combo através da TComboBox – Maratona AdvPL e TL++ 477

Nesse vídeo demonstraremos a utilização da classe TComboBox, que serve para criar um combo (dropdown com várias opções) em uma tela.

Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zExe477
Classe para criar combobox em uma Dialog
@type Function
@author Atilio
@since 03/04/2023
@see https://tdn.totvs.com/display/tec/TComboBox
@obs 

    **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/

User Function zExe477()
    Local aArea         := FWGetArea()
    Local nCorFundo     := RGB(238, 238, 238)
    Local nJanAltura    := 190
    Local nJanLargur    := 245 
    Local cJanTitulo    := 'Exemplo Combo'
    Local lDimPixels    := .T. 
    Local lCentraliz    := .T. 
    Local nObjLinha     := 0
    Local nObjColun     := 0
    Local nObjLargu     := 0
    Local nObjAltur     := 0
    Private cFontNome   := 'Tahoma'
    Private oFontPadrao := TFont():New(cFontNome, , -12)
    Private oDialogPvt 
    Private bBlocoIni   := {|| /*fSuaFuncao()*/ } //Aqui voce pode acionar funcoes customizadas que irao ser acionadas ao abrir a dialog 
    //objeto0 
    Private oSayObj0 
    Private cSayObj0    := 'Região:'  
    //objeto1 
    Private oCmbObj1 
    Private cCmbObj1    := 'XX'  
    Private aCmbObj1    := {'XX=Nenhuma Região', 'NT=Norte', 'ND=Nordeste', 'CO=Centro Oeste', 'SD=Sudeste', 'SU=Sul'}  
    //objeto2 
    Private oSayObj2 
    Private cSayObj2    := 'Estado:'  
    //objeto3 
    Private oCmbObj3 
    Private cCmbObj3    := ''  
    Private aCmbObj3    := {}  
    //objeto4 
    Private oBtnObj4 
    Private cBtnObj4    := 'Confirmar'  
    Private bBtnObj4    := {|| MsgInfo('Região [' + cCmbObj1 + '] e Estado [' + cCmbObj3 + ']', 'Combos escolhidos')}  
    
    //Cria a dialog
    oDialogPvt := TDialog():New(0, 0, nJanAltura, nJanLargur, cJanTitulo, , , , , , nCorFundo, , , lDimPixels)
    
        //objeto0 - usando a classe TSay
        nObjLinha := 8
        nObjColun := 7
        nObjLargu := 28
        nObjAltur := 6
        oSayObj0  := TSay():New(nObjLinha, nObjColun, {|| cSayObj0}, oDialogPvt, /*cPicture*/, oFontPadrao, , , , lDimPixels, /*nClrText*/, /*nClrBack*/, nObjLargu, nObjAltur, , , , , , /*lHTML*/)

        //objeto1 - usando a classe TComboBox
        nObjLinha := 17
        nObjColun := 18
        nObjLargu := 100
        nObjAltur := 12
        oCmbObj1  := TComboBox():New(nObjLinha, nObjColun, {|u| Iif(PCount() > 0 , cCmbObj1 := u, cCmbObj1)}, aCmbObj1, nObjLargu, nObjAltur, oDialogPvt, , {|| fAtuCmb()}, /*bValid*/, /*nClrText*/, /*nClrBack*/, lDimPixels, oFontPadrao)

        //objeto2 - usando a classe TSay
        nObjLinha := 35
        nObjColun := 7
        nObjLargu := 28
        nObjAltur := 6
        oSayObj2  := TSay():New(nObjLinha, nObjColun, {|| cSayObj2}, oDialogPvt, /*cPicture*/, oFontPadrao, , , , lDimPixels, /*nClrText*/, /*nClrBack*/, nObjLargu, nObjAltur, , , , , , /*lHTML*/)

        //objeto3 - usando a classe TComboBox
        nObjLinha := 44
        nObjColun := 18
        nObjLargu := 100
        nObjAltur := 12
        oCmbObj3  := TComboBox():New(nObjLinha, nObjColun, {|u| Iif(PCount() > 0 , cCmbObj3 := u, cCmbObj3)}, aCmbObj3, nObjLargu, nObjAltur, oDialogPvt, , /*bChange*/, /*bValid*/, /*nClrText*/, /*nClrBack*/, lDimPixels, oFontPadrao)

        //objeto4 - usando a classe TButton
        nObjLinha := 72
        nObjColun := 70
        nObjLargu := 50
        nObjAltur := 15
        oBtnObj4  := TButton():New(nObjLinha, nObjColun, cBtnObj4, oDialogPvt, bBtnObj4, nObjLargu, nObjAltur, , oFontPadrao, , lDimPixels)

    
    //Ativa e exibe a janela
    oDialogPvt:Activate(, , , lCentraliz, , , bBlocoIni)
    
    FWRestArea(aArea)
Return

Static Function fAtuCmb()
    Local aEstados := {}

    //Se for a região Norte
    If cCmbObj1 == "NT"
        aAdd(aEstados, "RR=Roraima")
        aAdd(aEstados, "AP=Amapá")
        aAdd(aEstados, "AM=Amazonas")
        aAdd(aEstados, "PA=Pará")
        aAdd(aEstados, "AC=Acre")
        aAdd(aEstados, "RO=Rondônia")
        aAdd(aEstados, "TO=Tocantins")

    //Senão se for a região Nordeste
    ElseIf cCmbObj1 == "ND"
        aAdd(aEstados, "MA=Maranhão")
        aAdd(aEstados, "PI=Piauí")
        aAdd(aEstados, "CE=Ceará")
        aAdd(aEstados, "RN=Rio Grande do Norte")
        aAdd(aEstados, "PB=Paraíba")
        aAdd(aEstados, "PE=Pernambuco")
        aAdd(aEstados, "AL=Alagoas")
        aAdd(aEstados, "SE=Sergipe")
        aAdd(aEstados, "BA=Bahia")


    //Senão se for a região Centro Oeste
    ElseIf cCmbObj1 == "CO"
        aAdd(aEstados, "MT=Mato Grosso")
        aAdd(aEstados, "DF=Distrito Federal")
        aAdd(aEstados, "GO=Goiás")
        aAdd(aEstados, "MS=Mato Grosso do Sul")

    //Senão se for a região Sudeste
    ElseIf cCmbObj1 == "SD"
        aAdd(aEstados, "MG=Minas Gerais")
        aAdd(aEstados, "ES=Espírito Santo")
        aAdd(aEstados, "RJ=Rio de Janeiro")
        aAdd(aEstados, "SP=São Paulo")

    //Senão se for a região Sul
    ElseIf cCmbObj1 == "SU"
        aAdd(aEstados, "PR=Paraná")
        aAdd(aEstados, "SC=Santa Catarina")
        aAdd(aEstados, "RS=Rio Grande do Sul")
    
    //Nenhuma região
    Else
        aAdd(aEstados, "")
    EndIf

    //Define no segundo combo o array com os estados
    oCmbObj3:SetItems(aEstados)
    oCmbObj3:Refresh()
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.

Deixe uma resposta

Terminal de Informação