Você está na página 1de 4

27/03/13

Usando Access - Alterando a cor de um campo ao receber o foco

Usando Access

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:

na imagem, as funções escritas direto na lista de eventos: Essa digitação consumia um tempo precioso

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:

PublicFunctionfncMontaEventos(frmAsForm)

DimctlAsControl

'--------------------------------------------------------------------------------------

'ComainstruçãoFOREACH,percorreremostodososcamposdoFormulárioparagravara

'funçãofncPintaCampo()noseventos"Aoreceberfoco"e"Aoperderfoco"

'--------------------------------------------------------------------------------------

ForEachctlInfrm.Controls

SelectCasectl.ControlType

'-----------------------------------------------------------------------------

'Escreveasfunçõessomentenoseventosdoscontrolestipocaixadetexto

'-----------------------------------------------------------------------------

CaseacTextBox,acComboBox,acListBox

'---------------------------------------------------------------------------------

'MontaeescreveafunçãofncPintaCampo()nosevento"Aoreceberfoco"

'dacaixadetexto

'LembrandoqueestamosdentrodolaçoFOR.Significaquetodasascaixasdetexto

'receberãoafunção

'---------------------------------------------------------------------------------

ctl.OnGotFocus="=fncPintaCampo(["&ctl.Name&"],1)"

'--------------------------------------------------------------------------------

'MontaeescreveafunçãofncPintaCampo()noevento"Aoperderfoco"

'dacaixadetexto

'-------------------------------------------------------------------------------

ctl.OnLostFocus="=fncPintaCampo(["&ctl.Name&"],0)"

EndSelect

Next

EndFunction

---------------------------------------------------------------------------

PublicFunctionfncPintaCampo(ctlasControl,CorAsByte)

'--------------------------------------------

'Alteraacordocampoquepossuiofoco

'Aoreceberofoco,passaparaacoramarela

'Aoperderofoco,passaparaacorbranca

'--------------------------------------------

ctl.BackColor=Switch(Cor=0,RGB(255,255,255),Cor=1,RGB(255,253,185))

'------------------------------------------------------

'Aoreceberofocoposicionaocursornofinaldotexto

'------------------------------------------------------

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

27/03/13

Usando Access - Alterando a cor de um campo ao receber o foco

IfCor=1Thenctl.SelStart=Len(ctl.value&"")

EndFunction

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.

PrivateSubForm_Load()

CallfncMontaEventos(Me)

EndSub

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

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

na imagem abaixo, o formulário exemplo que você receberá: Como selecionar uma cor no Access 2007/2010

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 nas

reticências [

].

Em seguida, clique no botão Mais Cores.

Veja na imagem:

Em seguida, clique no botão Mais Cores . Veja na imagem: Clique na guia Personalizar >

Clique na guia Personalizar > Selecione o tom de cor no quadro > Com o botão deslizante, ajuste a intensidade > 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 Cor está 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 caso queremos 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.

do texto. Por exemplo: len("Avelino") retorna 7. www.usandoaccess.com.br/tutoriais/tuto53.asp?id=1#inicio
do texto. Por exemplo: len("Avelino") retorna 7. www.usandoaccess.com.br/tutoriais/tuto53.asp?id=1#inicio

27/03/13

Usando Access - Alterando a cor de um campo ao receber o foco

Access - Alterando a cor de um campo ao receber o foco Switch(Cor=0,RGB(255,255,255),Cor=1,RGB(255,253,185),

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)'Azulclaro

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

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

Baixe o arquivo exemplo

Desafios com este arquivo exemplo.

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

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

PublicFunctionfncMontaEventos(frmAsForm,corasbyte)

2) Além da cor do fundo, altere o código para tornar a cor da fonte vermelha quando o campo receber 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 o foco, ficar com o fundo verde.

Um bom treino e sucesso!

27/03/13

Usando Access - Alterando a cor de um campo ao receber o foco

| Dicas | Blog | Downloads | Contato | Artigo | 32 comentários joão bola 07/11/2012

32 comentários

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 cima dele 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 normal pois isso faz com que tenho que usar um for next no form para pintar todos os controles da cor original? agradeso de antemao abrassos

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 desenvolvido sistemas simples no modo visual, encontrei as facilidades de melhorar a aparência porém esbarro sempre nos códigos. Você acabou de me enviar uma ótima dica; gostaria de verdade resolver este 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 de adquirir, desde que também não seja muito caro.

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

, cor 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ência

de copiar/colar rsrs. Sua solução como sempre super completa, didática e profissional obrigado mais uma fez por essa colaboração, o capricho de

deixar o curso no final do texto que existir é espetacular, nunca tinha utilizado, sem palavras

Melhor coisa no meu e-mail é quando recebo (Usando Access - Newsletter xx) suas aulas

eu utilizo muito dessa tática de receber foco destacar a

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 muito interessante, 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 de texto e selecione a Cor de Plano de Fundo que deseja que os campos selecionados tenham ao ter o foco (amarelo por exemplo), logo em seguida ainda 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 Database Public Function fncMontaEventos(frm As Form) Dim ctl As Control For Each ctl In frm.Controls Select Case ctl.ControlType Case acTextBox , acComboBox, acListBox ctl.OnGotFocus = "=fncPintaCampo([" & ctl.Name & "],1)" 'Cor Amarela ctl.OnLostFocus = "=fncPintaCampo([" & ctl.Name & "],0)" 'Cor Branca End Select Next End 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