como alterar a cor de um campo ao receber o foco.pdf

4
27/03/13 Usando Access - Alterando a cor de um campo ao receber o foco www.usandoaccess.com.br/tutoriais/tuto53.asp?id=1#inicio 1/8 Home Vídeos-aulas Tutoriais Dicas Blog Downloads Contato Artigo Public Function fncMontaEventos(frm As Form) Dim ctl As Control '-------------------------------------------------------------------------------------- 'Com a instrução FOR EACH , percorreremos todos os campos do Formulário para gravar a 'função fncPintaCampo() nos eventos "Ao receber foco" e "Ao perder foco" '-------------------------------------------------------------------------------------- For Each ctl In frm.Controls Select Case ctl.ControlType '----------------------------------------------------------------------------- 'Escreve as funções somente nos eventos dos controles tipo caixa de texto '----------------------------------------------------------------------------- Case acTextBox, acComboBox, acListBox '--------------------------------------------------------------------------------- 'Monta e escreve a função fncPintaCampo() nos evento "Ao receber foco" 'da caixa de texto 'Lembrando que estamos dentro do laço FOR. Significa que todas as caixas de texto 'receberão a função '--------------------------------------------------------------------------------- ctl.OnGotFocus = "=fncPintaCampo([" & ctl.Name & "],1)" '-------------------------------------------------------------------------------- 'Monta e escreve a função fncPintaCampo() no evento "Ao perder foco" 'da caixa de texto '------------------------------------------------------------------------------- ctl.OnLostFocus = "=fncPintaCampo([" & ctl.Name & "],0)" End Select Next End Function --------------------------------------------------------------------------- Public Function fncPintaCampo(ctl as Control, Cor As Byte) '-------------------------------------------- 'Altera a cor do campo que possui o foco 'Ao receber o foco, passa para a cor amarela 'Ao perder o foco, passa para a cor branca '-------------------------------------------- ctl.BackColor = Switch(Cor = 0, RGB(255, 255, 255),Cor = 1, RGB(255, 253, 185)) '------------------------------------------------------ 'Ao receber o foco posiciona o cursor no final do texto '------------------------------------------------------ Alterar a cor dos campos quando receberem o foco Não faz muito tempo em que eu fazia uso de uma função para alterar a cor de fundo dos campos dos formulários, com o objetivo de destacá-los, na medida em que recebessem o foco. Para que um campo do formulário recebesse o foco, usava uma função para destacá-lo na cor desejada, no caso, a amarela e acionava novamente a função para restaurar a cor de fundo original, no caso, a cor branca, quando o campo perdesse o foco. O problema era que eu tinha que escrever a função nos eventos Ao receber foco e Ao perder foco de cada um dos campos. Se o formulário tivesse 30 campos era uma verdadeira canseira ter que digitar as funções. Veja na imagem, as funções escritas direto na lista de eventos: Essa digitação consumia um tempo precioso e me sentia super incomodado com esta tarefa repetitiva. Resolvi partir para o enfrentamento e pesquisar uma solução. Assim sendo, aprendi que podemos escrever as funções nos eventos, direto pelo código. Criei as funções em um módulo global para que pudesse aproveitá-las em qualquer formulário que necessitasse. Acompanhe com atenção os comentários, nas funções abaixo: Usando Access

Upload: lucio-mathias

Post on 14-Aug-2015

187 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Como alterar a cor de um campo ao receber o foco.pdf

27/03/13 Usando Access - Alterando a cor de um campo ao receber o foco

www.usandoaccess.com.br/tutoriais/tuto53.asp?id=1#inicio 1/8

Home Vídeos-aulas Tutoriais Dicas Blog Downloads Contato Artigo

Public Function fncMontaEventos(frm As Form)Dim ctl As Control'--------------------------------------------------------------------------------------'Com a instrução FOR EACH , percorreremos todos os campos do Formulário para gravar a'função fncPintaCampo() nos eventos "Ao receber foco" e "Ao perder foco"'--------------------------------------------------------------------------------------For Each ctl In frm.Controls Select Case ctl.ControlType '----------------------------------------------------------------------------- 'Escreve as funções somente nos eventos dos controles tipo caixa de texto '----------------------------------------------------------------------------- Case acTextBox, acComboBox, acListBox '--------------------------------------------------------------------------------- 'Monta e escreve a função fncPintaCampo() nos evento "Ao receber foco" 'da caixa de texto 'Lembrando que estamos dentro do laço FOR. Significa que todas as caixas de texto 'receberão a função '--------------------------------------------------------------------------------- ctl.OnGotFocus = "=fncPintaCampo([" & ctl.Name & "],1)" '-------------------------------------------------------------------------------- 'Monta e escreve a função fncPintaCampo() no evento "Ao perder foco" 'da caixa de texto '------------------------------------------------------------------------------- ctl.OnLostFocus = "=fncPintaCampo([" & ctl.Name & "],0)" End SelectNextEnd Function---------------------------------------------------------------------------

Public Function fncPintaCampo(ctl as Control, Cor As Byte)'--------------------------------------------'Altera a cor do campo que possui o foco'Ao receber o foco, passa para a cor amarela'Ao perder o foco, passa para a cor branca'--------------------------------------------ctl.BackColor = Switch(Cor = 0, RGB(255, 255, 255),Cor = 1, RGB(255, 253, 185))'------------------------------------------------------'Ao receber o foco posiciona o cursor no final do texto'------------------------------------------------------

Alterar a cor dos campos quando receberem o foco

Não faz muito tempo em que eu fazia uso de uma função para alterar a cor de fundo dos campos dosformulários, com o objetivo de destacá-los, na medida em que recebessem o foco. Para que umcampo do formulário recebesse o foco, usava uma função para destacá-lo na cor desejada, no caso,a amarela e acionava novamente a função para restaurar a cor de fundo original, no caso, a corbranca, quando o campo perdesse o foco. O problema era que eu tinha que escrever a função noseventos Ao receber foco e Ao perder foco de cada um dos campos. Se o formulário tivesse 30campos era uma verdadeira canseira ter que digitar as funções.

Veja na imagem, as funções escritas direto na lista de eventos:

Essa digitação consumia um tempo precioso e me sentia super incomodado com esta tarefarepetitiva. Resolvi partir para o enfrentamento e pesquisar uma solução. Assim sendo, aprendi quepodemos escrever as funções nos eventos, direto pelo código.

Criei as funções em um módulo global para que pudesse aproveitá-las em qualquer formulário quenecessitasse. Acompanhe com atenção os comentários, nas funções abaixo:

Usando Access

Page 2: Como alterar a cor de um campo ao receber o foco.pdf

27/03/13 Usando Access - Alterando a cor de um campo ao receber o foco

www.usandoaccess.com.br/tutoriais/tuto53.asp?id=1#inicio 2/8

If Cor = 1 Then ctl.SelStart = Len(ctl.value & "")

End Function

Private Sub Form_Load()Call fncMontaEventos(Me)End Sub

No evento Ao carregar do formulário, basta chamar pela função fncMontaEventos() que o trabalhoárduo de digitar as funções nos eventos será realizado.

Era tudo que eu queria, pois passei a ganhar um tempo enorme pelo fato de não ter que abrir campopor campo para digitar o nome da função.

Observe na imagem abaixo, o formulário exemplo que você receberá:

Como selecionar uma cor no Access 2007/2010 e configurar a função RGB(x,y,z) ?

Selecione a lista de propriedades de um campo qualquer e na propriedade cor do fundo, clique nasreticências [...]. Em seguida, clique no botão Mais Cores. Veja na imagem:

Clique na guia Personalizar > Selecione o tom de cor no quadro > Com o botão deslizante, ajuste aintensidade > Ao chegar na intensidade desejada, anote os valores do RGB. Veja na imagem abaixo:

Conheça a função Switch()

É uma função do Access pouco utilizada, mas muito interessante para o nosso caso. O que ela faz éretornar um valor correspondente, diante de uma opção válida. Para o nosso caso, o argumento Corestá sendo utilizado para definir o valor a ser retornado.

Se Cor = 0 retorna ao valor RBG(255,255,255), que corresponde a cor branca.

Se Cor = 1 retorna ao valor RGB(255,253,185), que corresponde a cor amarela.

Se você quiser incrementar mais uma cor, por exemplo, a azul, a função ficará assim:

No caso da opção Cor = 2, teremos o seguinte resultado, ao executar o código:

A propriedade SelStart

Com esta propriedade podemos determinar a posição do ponteiro no campo. Neste nosso casoqueremos que o ponteiro se posicione sempre no final do texto, assim que campo receber o foco.

A função Len() retorna o comprimento do texto. Por exemplo: len("Avelino") retorna 7.

Page 3: Como alterar a cor de um campo ao receber o foco.pdf

27/03/13 Usando Access - Alterando a cor de um campo ao receber o foco

www.usandoaccess.com.br/tutoriais/tuto53.asp?id=1#inicio 3/8

Switch(Cor = 0,RGB(255, 255, 255),Cor = 1,RGB(255, 253, 185),Cor = 2,RGB(236, 240, 254))

Forms(NomeForm)(NomeControle).BackColor = RGB(236, 240, 254) 'Azul claro

If Cor = 1 Then Forms(NomeForm)(NomeControle).SelStart = 7

PintaCampoFoco.zip

Public Function fncMontaEventos(frm As Form, cor as byte)

Os dez artigos mais visitados

Como montar um sistema com seleção de idiomas MontaRibbons v.4.0 - Assistente completo para criar ribbons no Access Vídeo - Controle personalizado de Acesso de Usuários Vídeo - Segurança máxima, usando o OPEN Vídeo - Programação de relatórios - Parte 1 Navegação em Mapas com três ambientes Vídeo - Criando Ribbons parte 1 - Conhecendo a estrutura Xml Vídeo - Aprenda sobre filtragens Uma ajuda para quem está começando um negócio ou um projeto

O resultado para o código, seria esse abaixo, para o texto "Avelino":

Baixe o arquivo exemplo

Desafios com este arquivo exemplo.

1) Tente implementar a possibilidade de escolher outras cores, além da amarela. Acrescente apossibilidade de se optar pela azul, por exemplo.

Dica: deverá criar um argumento na função fncMontaEventos(). Exemplo:

2) Além da cor do fundo, altere o código para tornar a cor da fonte vermelha quando o camporeceber o foco.

Dica: A propriedade ForeColor , altera a cor da fonte.

3) Acrescente um controle Combobox ao formulário e altere o código para quando este receber ofoco, ficar com o fundo verde.

Um bom treino e sucesso!

Page 4: Como alterar a cor de um campo ao receber o foco.pdf

27/03/13 Usando Access - Alterando a cor de um campo ao receber o foco

www.usandoaccess.com.br/tutoriais/tuto53.asp?id=1#inicio 4/8

joão bola 07/11/2012 09:48:05

ótimo tuto parabens.só uma dúvida, como eu posso fazer o efeito de pintar um controle ao passar o mouse em cima e voltar ao normal quando o mouse sair de cimadele sem ter que usar o evento ao passar o mouse de todos eles para pintar e sem ter que usar o ao passar o mouse do form para voltar ao normalpois isso faz com que tenho que usar um for next no form para pintar todos os controles da cor original?agradeso de antemaoabrassos

Paulo Renato Neves Pinto 07/11/2012 11:49:03

Programei em Basic, Cobol e por último em Clipper por muito tempo, mas no access tenho desenvolv ido sistemas simples no modo visual, encontreias facilidades de melhorar a aparência porém esbarro sempre nos códigos. Você acabou de me enviar uma ótima dica; gostaria de verdade resolvereste meu em desenvolver formulas e outras funções de códigos no assess. Caso tenhas uma apostila, livros para isto se possível for gostaria deadquirir, desde que também não seja muito caro.

MARCIO MELO - RJ 07/11/2012 12:50:45

Melhor coisa no meu e-mail é quando recebo (Usando Access - Newsletter xx) suas aulas..., eu utilizo muito dessa tática de receber foco destacar acor de fundo e ao perder foco deixa a cor igual ao do fundo do form(Detalhe), as vezes deixo essa "árdua missão"para quando estou c paciênciade copiar/colar rsrs. Sua solução como sempre super completa, didática e profissional obrigado mais uma fez por essa colaboração, o capricho dedeixar o curso no final do texto que existir é espetacular, nunca tinha utilizado, sem palavras... adoro automatizar tudo ao máximo que puder...

Sou mais Brasil!!!

Wagner Cattani 07/11/2012 13:09:24

Muito bom mesmo o código, já escrevi códigos para alterar cor do preenchimento por muito tempo, até que um dia descobri algo muitointeressante, muito interessante mesmo:

Abra o formulário no modo design, selecione todos os campos que você deseja mudar a cor de fundo ao ter o foco, vá na parte de formatação detexto e selecione a Cor de Plano de Fundo que deseja que os campos selecionados tenham ao ter o foco (amarelo por exemplo), logo em seguidaainda com os campos selecionados abra novamente a Cor de Plano de Fundo e selecione "Transparente" e PRONTO!!!

Agora basta percorrer os campos para ver o resultado.

:D

Marcelo - Joinville-SC 07/11/2012 13:22:03

Aceitei o Desafio....

Fiz uma agregação ao excelente cód. do Mod do Avelino........

veja abaixo meu complemento......caso alguém se interesse....

Copiar o texto abaixo substituindo do módulo criado pelo Avelino.....

'***********************************************

Option Compare DatabasePublic Function fncMontaEventos(frm As Form)Dim ctl As ControlFor Each ctl In frm.ControlsSelect Case ctl.ControlTypeCase acTextBox , acComboBox, acListBoxctl.OnGotFocus = "=fncPintaCampo([" & ctl.Name & "],1)" 'Cor Amarelactl.OnLostFocus = "=fncPintaCampo([" & ctl.Name & "],0)" 'Cor BrancaEnd SelectNextEnd Function

Public Function fncPintaCampo(ctl as control, Cor As Byte)ctl.BackColor = Switch(Cor = 0, RGB(255, 255, 255), Cor = 1, RGB(255, 255, 137))ctl.ForeColor = Switch(Cor = 0, 2631720, Cor = 1, vbBlue)ctl.FontWeight = Switch(Cor = 0, 0, Cor = 1, 700)ctl.BorderColor = Switch(Cor = 0, 12040119, Cor = 1, vbRed)

If Cor = 1 Then ctl.SelStart = Len(ctl.value & "")End Function

James Resplandes 07/11/2012 15:32:03

Cara, você é mágico!

Johnny Cardoso 07/11/2012 16:04:58

Somar, contar e numerar em relatórios

| Home | Vídeos | Tutoriais | Dicas | Blog | Downloads | Contato | Artigo |

32 comentários