No vídeo de hoje vamos demonstrar em como criar um TComboBox e esse filtrar um segundo TComboBox.
Hoje, a dúvida foi feita pelo grande Adalberto, onde ele perguntou em como poderia criar um TComboBox e esse filtrar um segundo TComboBox.
Com isso em mente, fiz um vídeo explicando como criar dois TComboBox e através do primeiro atualizar o segundo.
E abaixo o código fonte desenvolvido para exemplificar:
//Bibliotecas #Include 'TOTVS.ch' /*/{Protheus.doc} User Function zVid0032 Funcao com tela customizada usando a classe TDialog que foi gerado pelo PDialogMaker @type Function @author Atilio @since 28/04/2022 @see https://atiliosistemas.com/portfolio/pdialogmaker/ @obs Obrigado por usar um aplicativo da Atilio Sistemas /*/ User Function zVid0032() Local aArea := FWGetArea() Local nCorFundo := RGB(204, 255, 204) 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.
Boa tarde Daniel tudo bem,
Imagina que eu precisamos preencher nosso combobox com dados de uma tabela externa. Como seria o procedimento, estou perguntando porque, fiz um fonte para isso ele le os dados adiciona no combobox mas na hora de apresentar na tela o combo aparece vazio.
Bom dia Wanderson, tudo bem?
1. Na sua função fAtuCmb, você irá montar sua query
2. Ai no While dos dados da sua query, você da um aAdd no array
3. Ai no seu SetItems você aponta para esse array
Abraços.