Criando uma Aplicação Forms – Parte II
Continuando a série: Criando uma aplicação Forms, nesse artigo serão abordados procedimentos para incrementar a aplicação produzida no primeiro artigo.
Para iniciar, abra no Forms Builder a aplicação EMPRESA.fmb, criada no artigo anterior. Apesar de ser 100% funcional, ela ainda é deficitária no quesito usabilidade.
Vamos incluir um scroll bar. Esse objeto NÃO É INDEPENDENTE, ou seja, não pode ser criado individualmente pois é um atributo do DATA BLOCK.
Altere os atributos abaixo para os seguintes valores:
Em Scrollbar preencha:
Show Scroll Bar: (Yes)
Sete a scrollbar para exibição;
Scroll Bar Canvas: (CNV_EMPRESAS)
Diz em qual Canvas o scroll bar aparecerá ; Assim que setado, a scrollbar aparecerá de imediato no Canvas.
Observe que abaixo existem propriedades para setar a posição da scroll bar no Canvas e a largura e tamanho. Você também pode fazer isso diretamente no Canvas.
Execute, inclua alguns dados e veja o scroll bar funcionando.
Agora vamos organizar um pouco o Canvas. Para isso utilizaremos um objeto chamado Frame, que se encontra na Toolbar.
Passe-o em volta dos campos e da scroll bar. Se algum objeto ficar atrás do Frame, não se preocupe, pois a partir de agora aprenderemos a utilizar as opções de Layout do Forms.
Clique agora no objeto Frame, depois vá até o menu acima e escolha a opção em Layout>Send to Back. Isso fará com que o Frame fique abaixo de todos os outros objetos.
Perceba que existem inúmeras opções no menu Layout. Seria perda de tempo falar sobre todas elas agora, portanto, a minha dica é que teste todas as opções existentes. Você verá que elas facilitam em muito a criação e manutenção do Canvas.
Voltando ao objeto Frame, clique em F4 para acessar as propriedades do objeto. É possível fazer várias alterações nas características do objeto através delas. O desafio, é fazer com que fique igual ao da imagem acima.
Dica: Para não precisar selecionar todos os objetos para deslocá-los toda vez que altera o Canvas, selecione-os, clique na opção Layout>Group. Isso fará com que todos os objetos fiquem agrupados.
Vamos agora voltar as implementações dos Items, que são os campos onde serão exibidas as informações do bloco, que podem ser lidas diretamente do banco de dados (como visto até agora – base table) ou não. Clique no Item STATUS e clique em F4 para chamar as suas propriedades. Perceba que existe uma propriedade chamada Item Type e que ela está com o valor Text Item. A seguir explicarei melhor que é esta propriedade.
Os Items possuem várias opções de exibição das informações. Esse “campos” podem ser alterados e ter as suas características mudadas, o que afeta a maneira como os dados são manipulados neles.
Os principais tipos são:
Text Item
Campo texto comum. Nele é possível alterar a informação contida.
Display Item
Semelhante ao Text Item. A diferença está na impossibilidade de alterar a informação contida. Ele só a exibe.
List Item
Permite visualizar e manipular a informaçào através de uma lista pré-definida de valores.
Radio Group
Permite visualizar e manipular a informação através de opções pré-definidas no Canvas.
Existem ainda uma série de outras opções como Hierarchical Tree, Push Button, etc … Não vou abordá-los nesse artigo, mas sugiro que façam teste e vejam o que é possível fazer com cada uma.
Por enquanto, saiba que essas são as opções mais utilizadas na construçãoo de uma aplicação Forms.
Voltando a nossa aplicação, vamos alterar a propriedade Item Type do campo STATUS para List Item. Presumindo que este campo só possuirá os valores A-ATIVO, I-INATIVO e B-BLOQUEADO, o List Item é a melhor escolha.
Após a alteração, observe que o campo mudou as suas características visuais no Canvas.
Encontre a propriedade Elements in List e clique em More. Uma nova tela se abrirá para preenchermos os valores da lista. O List Elements é o valor a ser exibido na tela e o List Item Value é o valor que é recebido pelo Item do Bloco BLK_EMPRESA. Preencha-os como na imagem abaixo:
Antes de executar e ver o resultado, procure a propriedade Initial Value na propriedade Data, e determine uma valor inicial para a lista. Ele será utilizado toda a vez que houver uma inclusão de dados no DATA BLOCK, e deverá obrigatoriamente ser um dos definidos na lista. No nosso caso, A,B ou I.
Ao executar, o resultado dever ser como o da tela abaixo:
Dica 1: Um dos erros mais comuns de uma aplicação Forms, é criar uma lista sem todos os valores a serem exibidos pelo DATA BLOCK. Isso faz com que os registros, nos quais o campo não tenha referência na lista, não sejam exibidos. Para complicar, nenhum erro é mostrado pela aplicação (EXCEPTION).
Dica 2: O Forms possui um Bug que persiste desde a versão 4.5, que é a inclusão de itens fantasmas (sem valores) na lista. Se isso ocorrer, vá até em Elements in List, clique no item em branco e pressione CTRL+SHIFT+alt;. Essa combinaçãode teclas exclui esses itens malcriados.
Dica 3: Se o bloco for base table e o Item for referenciado a um campo de tabela que não for NOT NULL (Blocos base table podem ter Items não base table.), o List Item obrigatoriamente terá um item de lista fantasma. Esse não tem como ser excluído com a dica acima
Depois dessa explanação sobre List Item, vamos aprender a formatar os campos Text Item com a propriedade Format Mask. Através dela é possível criar máscaras numéricas e alfanuméricas.
Peguemos o Item CODIGO como exemplo. Ele é numérico de 3 posições e com zeros a esquerda, então o Format Mask terá como valor “000”.
Criemos agora uma formatação um pouco mais complexa, e para isso utilizemos o Item CNPJ que tem um formato interessante para essa explicação, pois possui hifens e pontos. (99.999.999/9999-99)
Para implementarmos essa máscara, será necessário a utilização de “”. O valor do Format Mask será 09”.”999”.”999”/”9999”-“99 , altere-o e execute a sua aplicação.
Apareceram ############# no campo CNPJ ? Isso se deve ao estouro do tamanho, mas como isso ocorreu se o tamanho do CNPJ é 14 ? Simples, não foi levado em conta os pontos e o hifen. A propriedade Maximum Length deve ser acrescida de mais 4 posições para que o campo seja exibido corretamente.
Só para deixar claro, mesmo o DATA BLOCK sendo base table e o Item também, não significa que o tamanho dele tenha que ser o mesmo do campo na tabela. Ele se refere a quantidade de caracteres a serem exibidos na tela. Em campos NUMÉRICOS (number,int,etc…) a máscara é ignorada na hora da gravação da informação no banco de dados, mas em campos caracter (char,varchar,varchar2,etc…) ela será gravada.
Vou dar um exemplo simples para facilitar:
Tabela: Empresa
Campo: CNPJ Number(14)
Data Block: BLK_EMPRESA
Item: CNPJ Maximum Length 18; 14 caracteres válidos (0 e 9) e 4 máscaras (hífen e ponto)
Veja que o número de caracteres válidos bate com o da tabela, portanto, a gravação será efetuada sem maiores problemas no banco de dados. Mas se for incluído mais uma máscara de caractere válido, e totalizar 15, a gravação não será efetuada e uma exception será gerada.
Execute agora a aplicação, e verá que os campos já aparecerão formatados como na imagem abaixo:
Dica: Se você precisar fomatar campos com valores e decimais, utilize a máscara “D” ao invés de “,”. Isso fará com que o Forms assuma o formato decimal do language instalado no banco de dados.
E aqui termina mais um artigo, até o próximo !
Abraço