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.