Gerar formulario sob demanda
Enviado: 07 Jun 2021 21:56
A intenção é, gerar um formulário sob demanda, a partir de um array:
estou trabalhando nos detalhes.
Att.
Mauricio Portela
estou trabalhando nos detalhes.
Código: Selecionar todos
#include "box.ch"
/*
A intenção aqui é: a partir de um vetor com os dados para os GETs, gerar a tela sob demanda.
TODO:
1. Implementar limites em linhas e colunas;
2.
2.1. Colocar mais de um grupo (Label + Edit) na mesma linha;
ou
2.2. Alinhar os GETs na coluna de maior valor. **
3. Separar essa funcao (Main) em pequenas funcoes.
*/
FUNCTION Main()
PUBLIC cCorFrame, cCorLabel, cCorEdit, cCorBotao, cCorTitulo, cCorFundo
cCorFrame := "B/W+*"
cCorLabel := "B+/W+*"
cCorEdit := "W+/N+*"
cCorBotao := "W+/R+*,GR+/R"
cCorTitulo := "W+/B"
cCorFundo := "N/BG+*"
SETMODE(25,80)
SET DATE FORMAT TO "dd/mm/yyyy"
SET TIME FORMAT TO "hh:mm:ss"
SET SCORE OFF
CLS
Novo()
SET SCORE ON
@ 23, 00
RETURN Nil
// Funcao Formulario Usuario - (Novo/Editar/Mostrar)
FUNCTION Novo()
LOCAL cTela, cCor
LOCAL cTitulo
LOCAL nId, cNome, cLogin, cSenha, dNascimento, cCPF, cTelefone, cCelular, ;
cEMail, cSituacao, dInicio, dTermino, cObservacao
LOCAL aCampo, aTamanho
LOCAL nLinha, nTopo, nDireita, nPiso, nEsquerda, nColuna
cTela := SAVESCREEN(,,,,)
cCor := SETCOLOR()
// -------------------------------------------------------------------------
cTitulo := "Novo Usuario"
nId := SPACE(10)
cNome := SPACE(50)
nNivel := 1
cLogin := SPACE(50)
cSenha1 := SPACE(20)
cSenha2 := SPACE(20)
dNascimento := CTOD(" / / ")
cCPF := SPACE(11)
cTelefone := SPACE(10)
cCelular := SPACE(11)
cEMail := SPACE(50)
cSituacao := SPACE(1)
dInicio := DATE() // CTOD(" / / ")
dTermino := CTOD(" / / ")
cObservacao := SPACE(50)
// -------------------------------------------------------------------------
aCampo := { { "Identificacao", nId , "9999999999" }, ; // , "autozero"
{ "Nome Completo", cNome , "@!" }, ; // , "uppercase"
{ "Nivel" , nNivel , "9" }, ; // , "numero"
{ "Login" , cLogin , "" }, ; // , "lowercase"
{ "Senha" , cSenha1 , "" }, ; // , "senha"
{ "Confirma" , cSenha2 , "" }, ; // , "senha"
{ "Nascimento" , dNascimento, "@D" }, ; // , "data"
{ "CPF" , cCPF , "@R 999.999.999-99" }, ; // , "cpf"
{ "Telefone" , cTelefone , "@R (99) 9999-9999" }, ; // , "telefone"
{ "Celular" , cCelular , "@R (99) 99999-9999" }, ; // , "celular"
{ "e-mail" , cEMail , "" }, ; // , "email"
{ "Situacao" , cSituacao , "!" }, ; // , "situacao"
{ "Inicio" , dInicio , "@D" }, ; // , "data"
{ "Termino" , dTermino , "@D" }, ; // , "data"
{ "Observacao" , cObservacao, "" } } // , "texto"
// -------------------------------------------------------------------------
aTamanho := MaiorElemeto(aCampo)
CLS
@ 00, 00, MAXROW(), MAXCOL() BOX SPACE(9) COLOR cCorFundo
nLinha := INT((MAXROW() - LEN(aCampo))/2)
nTopo := nLinha
nDireita := aTamanho[1] + aTamanho[2] +1
nPiso := nTopo + LEN(aCampo) +2
nEsquerda := INT((MAXCOL() - nDireita )/2)
nColuna := nEsquerda +1
janela( nTopo, nEsquerda, nPiso, nDireita, cTitulo )
nLinha += 2
FOR x := 1 TO LEN( aCampo )
@ nLinha, nColuna SAY aCampo[x,1] COLOR cCorLabel
@ nLinha, (nColuna + aTamanho[1] +1) GET aCampo[x,2] PICTURE aCampo[x,3] COLOR cCorEdit
nLinha++
NEXT
READ
SETCOLOR(cCor)
RESTSCREEN(,,,, cTela)
RETURN Nil
FUNCTION janela( nTopo, nEsquerda, nPiso, nDireita, cTitulo )
@ nTopo, nEsquerda, nPiso, (nEsquerda + nDireita +1) BOX SPACE(9) COLOR cCorFrame
HB_Shadow(nTopo, nEsquerda, nPiso, (nEsquerda + nDireita +1))
@ nTopo, nEsquerda SAY SPACE(nDireita +2) COLOR cCorTitulo
@ nTopo, nEsquerda +1 SAY cTitulo COLOR cCorTitulo
RETURN Nil
FUNCTION MaiorElemeto( aVetor )
LOCAL nTamLabel := 0
LOCAL nTamEdit := 0
LOCAL m, nTamVetor
LOCAL aTamanho
nTamVetor := LEN(aVetor)
FOR m := 1 TO nTamVetor
IF nTamLabel > LEN(aVetor[m,1])
nTamLabel := nTamLabel
ELSE
nTamLabel := LEN(aVetor[m,1])
ENDIF
IF VALTYPE(aVetor[m,2]) == "N"
nTamEdit := IF( nTamEdit > aVetor[m,2], nTamEdit, aVetor[m,2])
ELSEIF VALTYPE(aVetor[m,2]) == "D"
nTamEdit := IF( nTamEdit > 8, nTamEdit, 8)
ELSE
nTamEdit := IF( nTamEdit > LEN(aVetor[m,2]), nTamEdit, LEN(aVetor[m,2]))
ENDIF
NEXT
aTamanho := { nTamLabel, nTamEdit }
RETURN aTamanho
Mauricio Portela