Você está na página 1de 4

27/03/13

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

Usando Access
Home Vdeos-aulas Tutoriais Dicas Blog Downloads Contato Artigo

Alterar a cor dos campos quando receberem o foco


No faz muito tempo em que eu fazia uso de uma funo para alterar a cor de fundo dos campos dos formulrios, com o objetivo de destac-los, na medida em que recebessem o foco. Para que um campo do formulrio recebesse o foco, usava uma funo para destac-lo na cor desejada, no caso, a amarela e acionava novamente a funo 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 funo nos eventos Ao receber foco e Ao perder foco de cada um dos campos. Se o formulrio tivesse 30 campos era uma verdadeira canseira ter que digitar as funes. Veja na imagem, as funes escritas direto na lista de eventos:

Essa digitao consumia um tempo precioso e me sentia super incomodado com esta tarefa repetitiva. Resolvi partir para o enfrentamento e pesquisar uma soluo. Assim sendo, aprendi que podemos escrever as funes nos eventos, direto pelo cdigo. Criei as funes em um mdulo global para que pudesse aproveit-las em qualquer formulrio que necessitasse. Acompanhe com ateno os comentrios, nas funes abaixo:
P u b l i cF u n c t i o nf n c M o n t a E v e n t o s ( f r mA sF o r m ) D i mc t lA sC o n t r o l ' ' C o mai n s t r u oF O RE A C H,p e r c o r r e r e m o st o d o so sc a m p o sd oF o r m u l r i op a r ag r a v a ra ' f u n of n c P i n t a C a m p o ( )n o se v e n t o s" A or e c e b e rf o c o "e" A op e r d e rf o c o " ' F o rE a c hc t lI nf r m . C o n t r o l s S e l e c tC a s ec t l . C o n t r o l T y p e ' ' E s c r e v ea sf u n e ss o m e n t en o se v e n t o sd o sc o n t r o l e st i p oc a i x ad et e x t o ' C a s ea c T e x t B o x ,a c C o m b o B o x ,a c L i s t B o x ' ' M o n t aee s c r e v eaf u n of n c P i n t a C a m p o ( )n o se v e n t o" A or e c e b e rf o c o " ' d ac a i x ad et e x t o ' L e m b r a n d oq u ee s t a m o sd e n t r od ol a oF O R .S i g n i f i c aq u et o d a sa sc a i x a sd et e x t o ' r e c e b e r oaf u n o ' c t l . O n G o t F o c u s=" = f n c P i n t a C a m p o ( [ "&c t l . N a m e&" ] , 1 ) " ' ' M o n t aee s c r e v eaf u n of n c P i n t a C a m p o ( )n oe v e n t o" A op e r d e rf o c o " ' d ac a i x ad et e x t o ' c t l . O n L o s t F o c u s=" = f n c P i n t a C a m p o ( [ "&c t l . N a m e&" ] , 0 ) " E n dS e l e c t N e x t E n dF u n c t i o n P u b l i cF u n c t i o nf n c P i n t a C a m p o ( c t la sC o n t r o l ,C o rA sB y t e ) ' ' A l t e r aac o rd oc a m p oq u ep o s s u iof o c o ' A or e c e b e rof o c o ,p a s s ap a r aac o ra m a r e l a ' A op e r d e rof o c o ,p a s s ap a r aac o rb r a n c a ' c t l . B a c k C o l o r=S w i t c h ( C o r=0 ,R G B ( 2 5 5 ,2 5 5 ,2 5 5 ) , C o r=1 ,R G B ( 2 5 5 ,2 5 3 ,1 8 5 ) ) ' ' A or e c e b e rof o c op o s i c i o n aoc u r s o rn of i n a ld ot e x t o ' -

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

1/8

27/03/13

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

I fC o r=1T h e nc t l . S e l S t a r t=L e n ( c t l . v a l u e&" " ) E n dF u n c t i o n

No evento Ao carregar do formulrio, basta chamar pela funo fncMontaEventos() que o trabalho rduo de digitar as funes nos eventos ser realizado.
P r i v a t eS u bF o r m _ L o a d ( ) C a l lf n c M o n t a E v e n t o s ( M e ) E n dS u b

Era tudo que eu queria, pois passei a ganhar um tempo enorme pelo fato de no ter que abrir campo por campo para digitar o nome da funo. Observe na imagem abaixo, o formulrio exemplo que voc receber:

Como selecionar uma cor no Access 2007/2010 e configurar a funo RGB(x,y,z) ? Selecione a lista de propriedades de um campo qualquer e na propriedade cor do fundo, clique nas reticncias [...]. Em seguida, clique no boto Mais Cores. Veja na imagem:

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

Conhea a funo Switch() uma funo do Access pouco utilizada, mas muito interessante para o nosso caso. O que ela faz retornar um valor correspondente, diante de uma opo vlida. 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 funo ficar assim: No caso da opo Cor = 2, teremos o seguinte resultado, ao executar o cdigo: A propriedade SelStart Com esta propriedade podemos determinar a posio 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 funo Len() retorna o comprimento do texto. Por exemplo: len("Avelino") retorna 7.

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

2/8

27/03/13

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

S w i t c h ( C o r=0 , R G B ( 2 5 5 ,2 5 5 ,2 5 5 ) , C o r=1 , R G B ( 2 5 5 ,2 5 3 ,1 8 5 ) , C o r=2 , R G B ( 2 3 6 ,2 4 0 ,2 5 4 ) )

F o r m s ( N o m e F o r m ) ( N o m e C o n t r o l e ) . B a c k C o l o r=R G B ( 2 3 6 ,2 4 0 ,2 5 4 )' A z u lc l a r o

O resultado para o cdigo, seria esse abaixo, para o texto "Avelino":


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

Baixe o arquivo exemplo


P i n t a C a m p o F o c o . z i p

Desafios com este arquivo exemplo. 1) Tente implementar a possibilidade de escolher outras cores, alm da amarela. possibilidade de se optar pela azul, por exemplo. Dica: dever criar um argumento na funo fncMontaEventos(). Exemplo:
P u b l i cF u n c t i o nf n c M o n t a E v e n t o s ( f r mA sF o r m ,c o ra sb y t e )

Acrescente a

2) Alm da cor do fundo, altere o cdigo 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 formulrio e altere o cdigo para quando este receber o foco, ficar com o fundo verde. Um bom treino e sucesso!

O sd e za r t i g o sm a i sv i s i t a d o s C o m om o n t a ru ms i s t e m ac o ms e l e od ei d i o m a s M o n t a R i b b o n sv . 4 . 0-A s s i s t e n t ec o m p l e t op a r ac r i a rr i b b o n sn oA c c e s s V d e o-C o n t r o l ep e r s o n a l i z a d od eA c e s s od eU s u r i o s V d e o-S e g u r a n am x i m a ,u s a n d ooO P E N V d e o-P r o g r a m a od er e l a t r i o s-P a r t e1 N a v e g a oe mM a p a sc o mt r sa m b i e n t e s V d e o-C r i a n d oR i b b o n sp a r t e1 -C o n h e c e n d oae s t r u t u r aX m l V d e o-A p r e n d as o b r ef i l t r a g e n s U m aa j u d ap a r aq u e me s t c o m e a n d ou mn e g c i oo uu mp r o j e t o

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

3/8

27/03/13
S o m a r ,c o n t a ren u m e r a re mr e l a t r i o s

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

|H o m e|V d e o s|T u t o r i a i s|D i c a s|B l o g|D o w n l o a d s|C o n t a t o|A r t i g o|

32 comentrios
joo bola

07/11/2012 09:48:05

timo tuto parabens. s uma dv ida, como eu posso fazer o efeito de pintar um controle ao passar o mouse em cima e v oltar ao normal quando o mouse sair de cima dele sem ter que usar o ev ento ao passar o mouse de todos eles para pintar e sem ter que usar o ao passar o mouse do form para v oltar 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 Nev es Pinto

07/11/2012 11:49:03

Programei em Basic, Cobol e por ltimo em Clipper por muito tempo, mas no access tenho desenv olv ido sistemas simples no modo v isual, encontrei as facilidades de melhorar a aparncia porm esbarro sempre nos cdigos. Voc acabou de me env iar uma tima dica; gostaria de v erdade resolv er este meu em desenv olv er formulas e outras funes de cdigos no assess. Caso tenhas uma apostila, liv ros para isto se possv el for gostaria de adquirir, desde que tambm no seja muito caro.

MA RCIO MELO - RJ

07/11/2012 12:50:45

Melhor coisa no meu e-mail quando recebo (Usando A ccess - Newsletter xx) suas aulas..., eu utilizo muito dessa ttica de receber foco destacar a cor de fundo e ao perder foco deixa a cor igual ao do fundo do form(Detalhe), as v ezes deixo essa "rdua misso"para quando estou c pacincia de copiar/colar rsrs. Sua soluo como sempre super completa, didtica e profissional obrigado mais uma fez por essa colaborao, o capricho de deixar o curso no final do texto que existir espetacular, nunca tinha utilizado, sem palav ras... adoro automatizar tudo ao mximo que puder... Sou mais Brasil!!!

Wagner Cattani

07/11/2012 13:09:24

Muito bom mesmo o cdigo, j escrev i cdigos para alterar cor do preenchimento por muito tempo, at que um dia descobri algo muito interessante, muito interessante mesmo: A bra o formulrio no modo design, selecione todos os campos que v oc deseja mudar a cor de fundo ao ter o foco, v na parte de formatao 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 nov amente a Cor de Plano de Fundo e selecione "Transparente" e PRONTO!!! A gora basta percorrer os campos para v er o resultado. :D

Marcelo - Joinv ille-SC A ceitei o Desafio....

07/11/2012 13:22:03

Fiz uma agregao ao excelente cd. do Mod do A v elino........ v eja abaixo meu complemento......caso algum se interesse.... Copiar o texto abaixo substituindo do mdulo criado pelo A v elino..... '*********************************************** Option Compare Database Public Function fncMontaEv entos(frm A s Form) Dim ctl A s Control For Each ctl In frm.Controls Select Case ctl.ControlTy pe Case acTextBox , acComboBox, acListBox ctl.OnGotFocus = "=fncPintaCampo([" & ctl.Name & "],1)" 'Cor A marela ctl.OnLostFocus = "=fncPintaCampo([" & ctl.Name & "],0)" 'Cor Branca End Select Next End Function Public Function fncPintaCampo(ctl as control, Cor A s By te) ctl.Back Color = Switch(Cor = 0, RGB(255, 255, 255), Cor = 1, RGB(255, 255, 137)) ctl.ForeColor = Switch(Cor = 0, 2631720, Cor = 1, v bBlue) ctl.FontWeight = Switch(Cor = 0, 0, Cor = 1, 700) ctl.BorderColor = Switch(Cor = 0, 12040119, Cor = 1, v bRed) If Cor = 1 Then ctl.SelStart = Len(ctl.v alue & "") End Function

James Resplandes

07/11/2012 15:32:03

Cara, v oc mgico!

Johnny Cardoso

07/11/2012 16:04:58

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

4/8

Você também pode gostar