Tela de parâmetros usando Array com vários botões
Exemplo 1- Montando um ParamBox com vários botões e inúmeras opções:
#include 'protheus.ch' #include 'parmtype.ch' //Função parambox com todos os tipos e botões extras. user function zParBox() local aPergs := {} local aRet := {} local aButtons := {} local aCombo := {"","SP","RJ","MG","ES","Paçoca","Doce de Abobora"} local cArquivo := "" // Array com botões extras do parambox - Botões Tipo 1= OK e 2= Cancelar já vem nos botões padrões AAdd(aButtons, {03, {|| u_zAtuParBox() }, 'Esse é o botão 03 - Excluir' }) // botão Excluir AAdd(aButtons, {04, {|| u_zAtuParBox() }, 'Esse é o botão 04 - Incluir' }) // botão Incluir AAdd(aButtons, {05, {|| u_zAtuParBox() }, 'Esse é o botão 05 - Parametros'}) // botão Parametros AAdd(aButtons, {06, {|| u_zAtuParBox() }, 'Esse é o botão 06 - Imprimir' }) // botão Imprimir //Só cabem 4 botões extras na janela padrão da parabox, se colocar mais, fica estourado na janela /* AAdd(aButtons, {03, {|| Alert('Botão 03 - Excluir' )}, 'Esse é o botão 03 - Excluir' }) // botão Excluir AAdd(aButtons, {04, {|| Alert('Botão 04 - Incluir' )}, 'Esse é o botão 04 - Incluir' }) // botão Incluir AAdd(aButtons, {05, {|| Alert('Botão 05 - Parametros')}, 'Esse é o botão 05 - Parametros'}) // botão Parametros AAdd(aButtons, {06, {|| Alert('Botão 06 - Imprimir' )}, 'Esse é o botão 06 - Imprimir' }) // botão Imprimir AAdd(aButtons, {07, {|| Alert('Botão 07 - Susp.Impr.' )}, 'Esse é o botão 07 - Susp.Impr.' }) // botão Susp.Impr. AAdd(aButtons, {08, {|| Alert('Botão 08 - Cancelar Impressão')}, 'Esse é o botão 08 - Cancelar Impressão'}) // botão Cancela Impressão AAdd(aButtons, {09, {|| Alert('Botão 09 - Ordem' )}, 'Esse é o botão 09 - Ordem' }) // botão Ordem AAdd(aButtons, {10, {|| Alert('Botão 10 - Prioridade' )}, 'Esse é o botão 10 - Prioridade' }) // botão Prioridade AAdd(aButtons, {11, {|| Alert('Botão 11 - Editar' )}, 'Esse é o botão 11 - Editar' }) // botão Editar AAdd(aButtons, {12, {|| Alert('Botão 12 - Ouvir' )}, 'Esse é o botão 12 - Ouvir' }) // botão Ouvir AAdd(aButtons, {13, {|| Alert('Botão 13 - Salvar' )}, 'Esse é o botão 13 - Salvar' }) // botão Salvar AAdd(aButtons, {14, {|| Alert('Botão 14 - Abrir' )}, 'Esse é o botão 14 - Abrir' }) // botão Abrir AAdd(aButtons, {15, {|| Alert('Botão 15 - Visualizar' )}, 'Esse é o botão 15 - Visualizar' }) // botão Visualizar AAdd(aButtons, {16, {|| Alert('Botão 16 - Cond.Neg.' )}, 'Esse é o botão 16 - Cond.Neg.' }) // botão Cond.Neg. AAdd(aButtons, {17, {|| Alert('Botão 17 - Filtrar' )}, 'Esse é o botão 17 - Filtrar' }) // botão Filtrar AAdd(aButtons, {18, {|| Alert('Botão 18 - Financ.' )}, 'Esse é o botão 18 - Financ.' }) // botão Financ. AAdd(aButtons, {19, {|| Alert('Botão 19 - Avançar' )}, 'Esse é o botão 19 - Avançar' }) // botão Avançar (em pt-br) AAdd(aButtons, {20, {|| Alert('Botão 20 - Voltar' )}, 'Esse é o botão 20 - Voltar' }) // botão Voltar (em pt-br) AAdd(aButtons, {21, {|| Alert('Botão 21 - Forward' )}, 'Esse é o botão 21 - Forward' }) // botão Forward (Avançar) AAdd(aButtons, {22, {|| Alert('Botão 22 - Backward' )}, 'Esse é o botão 22 - Backward' }) // botão Backward (Voltar) */ //Perguntas que serão apresentadas //Tipo 9 - Apresenta um texto fixo, que será transportado para o aRet no momento da execução. aAdd( aPergs ,{9,"Tipo 9 - Apenas texto demonstrativo.",200, 40,.T.}) //Tipo 2 - Apresenta um seletor que será alimentado com o array aCombo. aAdd( aPergs ,{9,"Abaixo escolha uma opção",200, 40,.T.}) aAdd( aPergs ,{2,"Tipo 2 - Escolha:",01,aCombo,50,"",.T.}) //Tipo 1 - Cria um MSGet para digitação livre aAdd( aPergs ,{9,"Tipo 1 - Digite Livre",200, 40,.T.}) aAdd( aPergs ,{1,"Digite Algo: " , Upper(Space(100)) ,"","","","",110,.T.}) //Tipo 4 - Cria Opções de CheckBox com Texto SAY antes da opção - Pode se passar .T. ou .F. para trazer o check já marcado/desmarcado na primeira execução aAdd( aPergs ,{9,"Tipo 4 - Say + CheckBox com Texto",200, 40,.T.}) aAdd( aPergs ,{4,"Cod-1" ,.T.,"Cod-1 - Com Check Marcado" ,90,"",.F.}) aAdd( aPergs ,{4,"Cod2-" ,.F.,"Cod-2 - Com Check Desmarcado" ,90,"",.F.}) //Tipo 5 - Cria Opções de CheckBox. aAdd( aPergs ,{9,"Tipo 5 - CheckBox com Texto",200, 40,.T.}) aAdd( aPergs ,{5,"001 - Alimentação" ,.F.,90,"",.F.}) aAdd( aPergs ,{5,"002 - Associações Diversas" ,.F.,90,"",.F.}) aAdd( aPergs ,{5,"003 - Companhias de Petróleo/Óleo",.F.,100,"",.F.}) //Tipo 6 - Cria um botão tipo File para buscar arquivos e retorna o caminho apontado. aAdd( aPergs ,{9,"Tipo 6 - Busca de Arquivo via FILE",200, 40,.T.}) aAdd( aPergs ,{6,"Aponte o arquivo:",Space(100),"","","",70,.F.,"Todos os arquivos (*.*) |*.*"}) aAdd( aPergs ,{9,"Os textos livres retornam como parametros preenchidos no aRet[n] com seu conteúdo padrão",200, 40,.T.}) /* //Chamada padrão ParamBox( < aParametros > , < cTitle > , < aRet > , < bOk >, < aButtons > ,< lCentered >, < nPosX >,< nPosY > , < oDlgWizard >, < cLoad > ,< lCanSave >,< lUserSave > ) Onde: // 1 - < aParametros > - Vetor com as configurações // 2 - < cTitle > - Título da janela // 3 - < aRet > - Vetor passador por referencia que contém o retorno dos parâmetros // 4 - < bOk > - Code block para validar o botão Ok // 5 - < aButtons > - Vetor com mais botões além dos botões de Ok e Cancel // 6 - < lCentered > - Centralizar a janela // 7 - < nPosX > - Se não centralizar janela coordenada X para início // 8 - < nPosY > - Se não centralizar janela coordenada Y para início // 9 - < oDlgWizard > - Utiliza o objeto da janela ativa //10 - < cLoad > - Nome do perfil se caso for carregar //11 - < lCanSave > - Salvar os dados informados nos parâmetros por perfil //12 - < lUserSave > - Configuração por usuário Obs: As respostas carregadas no aRet, array de retorno do parambox também assumem os parametros MV_PAR automaticamente. Logo: aRet[1] == MV_PAR01, aRet[5] == MV_PAR05 e nessa segue nessa lógica. */ //Chamada com bloco de bOK If ParamBox(aPergs ,"ZPARBOX",aRet,{|| bOKaRet(aRet)},aButtons,,,,,,,) If ! Empty(aRet[14]) cArquivo := alltrim( aRet[14]) MsgInfo("Arquivo apontado:" + left(alltrim(cArquivo),20),"ZPARBOX") Return EndIf Else MsgAlert("Processo Cancelado pelo usuário","ZPARBOX") return EndIf return //------------------------ Static Function bOKaRet(aRet) local w local lRet := .T. For w := 1 To Len(aRet) If Empty(aRet[14]) MsgInfo("Nenhum arquivo foi apontado na busca","bOKaRet") lRet := .F. Exit EndIf Next w Return lRet //------------------------- user function zAtuParBox() Local oTFont := TFont():New("Arial",,40,,.F.,,,,.T.,.F.) Private oPatch, cGetPatch := "https://terminaldeinformacao.com/knowledgebase/parambox/" Private oDlg, oPanel1 DEFINE FONT oBold NAME "Arial" SIZE 0, -12 BOLD DEFINE MSDIALOG oDlg TITLE "Teste PARBOX" STYLE DS_MODALFRAME FROM 000, 000 TO 460, 800 COLORS 0, 16777215 PIXEL oPanel1 := TPanel():New(01,01,"Rotina em Manutenção!!! TI vai arrumar!!!!",oPanel1,oTFont,.T.,,CLR_RED,/*CLR_BLUE*/,600,230,.T.,.T.) oPanel1 := TWebEngine():New(oPanel1, 01, 01, 600, 230, cGetPatch, ) oDlg:lEscClose := .F. Activate MSDialog oDlg Centered On Init EnchoiceBar(oDlg, {||OK()}, { ||oDlg:End()},,,,,.F.,.F., .F., .T.,.F.,) return //------------------------------------------------- Static Function OK() oDlg:End() Return
Observações:
- Caso tenha dúvidas ou problemas com os exemplos, entre em contato;
- Se tiver sugestões de rotinas, pode entrar em contato;
- Função e documentação enviada por Diego Sousa;