bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Alterando a cor de um campo ao receber o foco

Alterar a cor dos campos quando receberem o foco

Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito, através do Paypal. 

Veja como comprar e saiba mais sobre o material oferecido,  clicando aqui.

Open v3

 

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:

Usando Access - sintaxe forms na consulta

 

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:

Faça o login aqui para ter acesso ao código.

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.

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

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á:

Usando Access - Campo cor de fundo amarelo

 

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:

Usando Access - Cor do fundo

 

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:

Usando Access - Palheta de cores RGB

 

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:

Faça o login aqui para ter acesso ao código.

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

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

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. 

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:

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

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!


 

 


63 comentários

Alexnilto Sousa   30/08/2024 07:13:27

Prezado Avelino.
Pode me orientar por favor? O módulo funciona perfeitamente em alguns formulários. Porém copiei um formulário de um outro projeito e quando implementei no projeto onde está o módulo ele deu erro e pediu para depurar apresentando o seguinte erro: If cor = 1 Then ctl.SelStart = Len(ctl.Value & ""), ficando em amarelo a partir de ctl.SelStart. Como resolver isso? Desde já fico muito grato.

Leandro Barbosa   24/01/2023 08:56:28

Quem se esforçar na aplicação poderá ampliar e muito seu horizonte de programação com esse tutorial.
Já apliquei umas quatro variações desta função, abaixo uma que construí para ordenar dados de um formulário ao clicar no rótulo do campo:

Public Function fncAscDesc(frm As Form) 'Função para ordenar crescente ou decrescente
Dim ctl As Control
For Each ctl In frm.Controls
Select Case ctl.ControlType
Case acLabel, acTextBox
ctl.OnClick = "=AscDesc([" & ctl.Name & "])"
End Select
Next
End Function

Public Function AscDesc(rtl As Label)
Dim strCampo As String
If Left(rtl.Name, 3) = "rtl" And rtl.Tag = 0 Then
strCampo = Right(rtl.Name, Len(rtl.Name) - 3) & " ASC"
DoCmd.SetOrderBy strCampo
rtl.Tag = 1
Else
If Left(rtl.Name, 3) = "rtl" And rtl.Tag = 1 Then
strCampo = Right(rtl.Name, Len(rtl.Name) - 3) & " DESC"
DoCmd.SetOrderBy strCampo
rtl.Tag = 0
End If
End If
End Function

Muito obrigado Avelino!

Carlos Gomes   15/01/2023 07:21:37

Gostaria de saber como fazer isso no EXCEL (pintar o campo que estiver selecionado, depois voltar ao normal ou mudar para outro campo) - Meu whats (67) 9.9235-6633

Carlos   15/01/2023 07:20:49

Gostaria de saber como fazer isso no EXCEL (pintar o campo que estiver selecionado, depois voltar ao normal ou mudar para outro campo)

Carlos   16/09/2022 14:00:28

Muito bom. Mas tenho um problema agora. O evento ao receber o foco nos campos dos formulários não funciona.

Rodnei Calcagnotto   08/09/2022 14:57:30

Eu não tenho mais dúvidas! Avelino Sampaio precisa ser canonizado!
Obrigado, mestre!

RipadorBR   28/06/2022 18:39:03

Boaaaaa, já implementei, ótimo tutorial. Abraço.

Avelino Sampaio   28/06/2022 12:07:59

RipadorBR,

veja este meu artigo que ensina como elaborar um formulário padrão:

http://www.usandoaccess.com.br/tutoriais/padronizando-formularios-e-relatorios-no-microsoft-access.asp?id=1#inicio

Bom estudo!

RipadorBR   27/06/2022 15:26:20

Boa Tarde Avelino,

Ainda não consegui fazer este módulo pintar o fundo dos Cabeçalhos e Rodapés dos formulários. Como seria o mais prático a fazer para não ter que fazer a operação em cada formulário?

Grato.

Hephraim BF   24/04/2022 10:28:00

Obrigado Avelino pela ajuda.

Funcionou de acordo com sua proposta, no entanto, como faço a chamada em vários forms então fica trabalhoso passar o valor da variável vIntFormNome individualmente. Pois na adaptação que te passei esse valor era passado de acordo com o argumento da função fncMontaEventos.

Avelino Sampaio   23/04/2022 07:03:17

Hephraim

testei com a seguinte linha e funcionou para mim.

Forms("subFormTeste")!Rótulo4.Caption = ctl.StatusBarText

Eu estou entendendo que o seu rótulo "rotStatus" esteja no formulário principal e não no subformulário. Vc então tem que indicar o formulário principal na variável vintFormName

vIntFormNome = "NomeDoFormulárioPrincipal"

Sucesso!

Hephraim BF   22/04/2022 09:18:50

Dim vIntFormNome As String

Public Function fncMontaEventos(frm As Form)

Dim ctl As control
vIntFormNome = frm.Name
For Each ctl In frm.Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox
If ctl.OnGotFocus = vbNullString Then
ctl.OnGotFocus = "=fncPintaCampo([" & ctl.Name & "],1)"
End If
If ctl.OnLostFocus = vbNullString Then ctl.OnLostFocus = "=fncPintaCampo([" & ctl.Name & "],0)"
End Select
Next

End Function

Public Function fncPintaCampo(ctl As control, Cor As Byte)

On Error Resume Next
ctl.BackColor = Switch(Cor = 0, RGB(255, 255, 255), Cor = 1, RGB(255, 253, 185))
Forms(vIntFormNome)!rotStatus.Caption = ctl.StatusBarText

End Function

Avelino Sampaio   22/04/2022 06:28:16

Hephraim,

mostre a função usada para a barra de status.

No aguardo

Hephraim BF   21/04/2022 14:38:45

A função funciona perfeitamente e incrementei uma parte que por não usar a barra de status do access utilizo uma barra própria que o texto é exibido por essa função. No entanto, quando se trata de um subformulário o campo é pintado, porém, o texto não é exibido no status.

Alexandre Alves    08/01/2022 08:24:09

Bom dia
Uso uma função para pintar um campo, mas quando fecho o formulário e abro novamente ele não está pintado, o que devo fazer? Grato.

Marcus Vinicius Salles   19/12/2021 12:06:05

Realmente realçar os campos em foco ajuda a leitura pelos usuários, parabéns, a solução é bastante simples e elegante. Gostaria de contribuir co a sugestão abaixo:
If Cor = 1 Then varCorAnterior = ctl.BackColor
ctl.BackColor = Switch(Cor = 0, varCorAnterior, Cor = 1, RGB(255, 253, 185))

Deste modo, ao receber o foco, a Cor original do Controle é salva e restaurada no evento LostFocus. No meu caso é interessante pois, para os campos obrigatórios no Form, eu pinto o fundo identificando-os para o Usuário.
mvsbh2005@hotmail.com

Henrique Leal   21/11/2021 09:19:40

Bom dia!

Show de bola Avelino!
Deu certo, Obrigado!

Avelino, sou iniciante no Access e me confundo todo com em como escrever essas funções, principalmente no que diz respeito á "Len", "Dir", etc. ou onde usar "aspas" ou "virgulas" como no exemplo: "=fncPintaCampo([" & ctl.Name & "],1)", é sempre dificil para o iniciante saber quando concatenar igual o exemplo, onde colocar o igual e etc.

Não sei se você tem algum artigo sobre isso, o pesquisador de objetos tira muitas duvidas mas esses paramêtros um iniciante como eu pena para aprender. Com certeza ajudaria muitos iniciantes.

Um grande abraço!


Avelino Sampaio   14/11/2021 04:44:50

Henrique,

Altere o código para desviar da combo especifica. Exemplo:

Case acTextBox, acComboBox, acListBox

if ctl.name <> "NomeDaSuaCombobox" then ctl.OnGotFocus = "=fncPintaCampo([" & ctl.Name & "],1)"

E lá no evento "Ao receber foco" da sua combobox, acrescente a função fncPintaCampo()

Private Sub NomeComboBox_GotFocus()
call fncPintaCampo(me!NomeDaComboBox,1)
Seu código aqui
End Sub

Sucesso!

Henrique Leal   13/11/2021 11:59:18

Bom dia mestre Avelino.

Perfeito esse código!
Como faço para deixar um combobox de fora do código? Pois tenho um combo de pesquisa que contem uma instrução Sql ao receber foco e após atualizar, e quando testei o código pinta eventos essas instruções são ignoradas, o que prejudica o funcionamento da pesquisa.

Muito Obrigado. Abraços

Welson Zeferino de Oliveira Junior   09/11/2021 14:41:24

Realmente e sem nenhuma dúvida todo o trabalho que o Avelino divulga em seu site é de uma riqueza sem igual.

Quem gostaria de participar do curso de vba com esse gigante? Lança aí Avelino, estamos aguardando!

Johnny Cardoso   09/11/2021 09:16:20

O que era bom, ficou melhor ainda. Se agregar as implementações do Marcelo - Joinville-SC, fecha o pacote.

roni lupe   09/11/2021 08:16:13

As atualizações no arquivo exemplo são realmente significativas, quem já baixou o primeiro exemplo, recomendo que baixem também este novo arquivo.

Obrigado Avelino!

MARCIO MELO - RJ   08/11/2021 22:31:10

Eu primeiro adquiri o MontaRibbos v2.0 e já estou na v4.0, depois adquiri as Coletâneas bem no início, tenho que confirmar que realmente obtive muitos resultados positivos que podem ser comprovados na ajuda online de um dos programa q fiz utilizando o Maestro como pontapé inicial junto com o monta Ribbons, segue o link http://sic.iniciantejoomla.com/ observem no vídeo de introdução que tem muitas da funções das coletâneas, só tenho a agradecer... Moro no RJ e ainda não conheço pessoalmente o mestre Avelino, será uma honra...

Sou mais Brasil!

roni lupe   08/11/2021 10:03:36

Concordo com o Johnny, eu adquiri a coletânea do site Usando Access e já aprendi muito com os conteúdos riquíssimos da coletânea e ainda não estudei nem 30% dos conteúdos. Apesar de serem sempre muito baratos os pacotes do site, eu estou me programando para adquirir a video-aula de técnicas de invasão para aprimorar técnicas de defesa. A programação esta por conta de atingir 90% do desenvolvimento de um sistema que acredito que terá grande potencial de comercialização, sendo assim, precisarei conhecer as técnicas de defesas que o Avelino conhece. Enfim, acretido que ainda esse mês irei comprar essa video-aula, pois, tenho certeza que será mais um ótimo investimento profissional.

Recomendo a todos!

Johnny Cardoso   08/11/2021 09:00:04

A todos os amantes e estudiosos do Access. Apenas quero registrar o quão rentável se tornou o investimento que fiz ao adquirir os produtos do Avelino. USANDOACCESS se tornou minha referência, proporcionando um trabalho com harmonia e eficiência sem igual. Recomendo pois, além de todo o conteúdo excelente, ainda podemos contar com as soluções postadas e por e.mail do Avelino. Esse é o "CARA". Abração Avelino...SUCESSO, sempre !

Avelino Sampaio   08/11/2021 05:30:23

Robson Rampinelli,

fiz de propósito, como parte do desafio proposto no artigo. Veja a seguinte linha:

Case acTextBox ', acComboBox, acListBox

Observe que coloquei um apóstrofe ('), desabilitando os tipos de controle Combobox (acComboBox) e ListBox (acListaBox). Basta tirar o apóstrole que esses tipos de controles serão afetados.

Case acTextBox, acComboBox, acListBox

Sucesso!

Marcelo David   08/11/2021 01:13:09

Muito bom artigo! Como sempre está de parabéns!

Robson Rampinelli   07/11/2021 22:40:15

Avelino, boa noite!

É sempre bom saber que tem pessoas como vc, que compartilha teus conhecimentos com os demais.

Atribui o teu código no meu sistema e funcionou nos campos normais, porem em alguns formulários tenho caixas de combinação (combobox), nesse caso, não funcionou..

Mesmo assim, muito obrigado pela contribuição.

Abraço!

Avelino Sampaio   07/11/2021 18:06:35

Paulo Renato Neves Pinto ,

entre em contato pelo email abaixo pois tenho uma material bem legal para lhe oferecer.

avelino(arroba)usandoaccess(ponto)com(ponto)br

No aguardo

Avelino Sampaio   07/11/2021 18:04:29

Marcelo - Joinville-SC,

Obrigado pela sua super contribuição.

Sucesso!

Avelino Sampaio   07/11/2021 18:00:21

Wagner Cattani,

testei seu procedimento no Access 2007 e funciionou direitinho.

Fico muito agradecido por vc ter trazido esta excelente dica aqui para o artigo.

Sucesso!

Avelino Sampaio   07/11/2021 17:57:25

Roni Lupe,

altere a propriedade SelStart para zero.

...
...
'------------------------------------------------------
'Ao receber o foco posiciona o cursor no final do texto
'------------------------------------------------------
If Cor = 1 Then Forms(NomeForm)(NomeControle).SelStart =0

Sucesso!

roni lupe   07/11/2021 17:47:15

Olá Avelino!

Já passei horas, durente dias, pesquisando na internet por um código com essa função. Enfim, encontrei.

Só tenho uma duvida. Como faço para que o ponteiro se posicione no início do texto?

Obrigado!

Avelino Sampaio   07/11/2021 17:21:20

João Bola,

Veja as alterações para o seu caso:

Public Function fncMontaEventos(frm As Form)
Dim ctl As Control
For Each ctl In frm.Controls
Select Case ctl.ControlType
Case acTextBox , acComboBox, acListBox
If ctl.OnMouseMove = vbNullString Then ctl.OnMouseMove = "=fncPintaCampo('" & frm.Name & "','" & ctl.Name & "',1)" 'Cor Amarela
End Select
Next

If frm.Detalhe.OnMouseMove = vbNullString Then frm.Detalhe.OnMouseMove = "=fncPintaCampo('" & frm.Name & "','limpa',0)" 'Cor Branca

End Function


Public Function fncPintaCampo(NomeForm As String, NomeControle As String, Cor As Byte)
Static campoatual As String
If NomeControle = "limpa" Then
NomeControle = campoatual
Else
campoatual = NomeControle
End If

Forms(NomeForm)(NomeControle).BackColor = Switch(Cor = 0, RGB(255, 255, 255), Cor = 1, RGB(255, 253, 185))

End Function

Sucesso!

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

Wagner Cattani, sua técnica não funcionou?

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

Cara, você é mágico!

Marcelo - Joinville-SC   07/11/2021 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

Wagner Cattani   07/11/2021 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

MARCIO MELO - RJ   07/11/2021 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 a 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... adoro automatizar tudo ao máximo que puder...

Sou mais Brasil!!!

Paulo Renato Neves Pinto   07/11/2021 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.

joão bola   07/11/2021 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 Sergio de Freitas Junior   22/10/2021 16:29:55

Galera, preciso de uma ajuda, tenho vários campos que quando perdem o foco executam uma ação, mas quando adiciono esse procedimento meus campos não executam mais as tarefas que criei, como faço para manter as minhas tarefas e também mudar de cor quando receber e perder foco?

Obrigado

kadhu   05/10/2021 23:20:58

boa noite ,consegui implementar o cod no meu aplicativo ,porém gostaria de trocar o amarelo ,por outra cor ,como eu faria ?obrigado

Ednei Soares   03/10/2021 13:27:13

Avelino, boa tarde.

É possível colorir os campos de um subformulário em modo "Folha de Dados"?? Alterei o subFormTeste do PintaCampoFoco para o modo Folha de Dados mas a função não coloriu os campos.

Grato,

Damasceno   15/08/2021 15:58:55

Prezado Prof. Avelino.
Funcionou muito bem obrigado pela dica.

Marcelo Costa   30/07/2021 09:32:08

Obrigado professor. Vou tentar colocar em prática e posto aqui o resultado. Grande abraço.

Avelino Sampaio   30/07/2021 08:20:44

Marcelo,

use a formatação condicional. Copie e cole no seu navegador o endereço abaixo, do meu artigo:

http://www.usandoaccess.com.br/dicas/dica5_1.asp

Bom estudo!

Marcelo Costa   28/07/2021 14:56:36

Boa tarde! Tento resolver algo parecido: Tenho que confeccionar crachás com uma "barra" de cor diferente para funcionários de acordo com o setor de trabalho. Já tenho o modelo do crachá, porém gostaria de saber como fazer para o BD inserir a cor desejada partindo de um comando (como selecionar, por exemplo). Sugestão???
Desde já obrigado.

Zilton Alencar   11/06/2021 10:13:18

Avelino, como aplicar estas funções a uma caixa de listagem? Meu caso é o seguinte: em uma lista de Clientes, aquele que estiver desabilitado para compras aparece na listagem, mas com uma cor diferente.

VlW!

Avelino Sampaio   20/04/2021 18:12:01

Silva,

observe os comentários do senhor João Bola, que tem a solução para o uso do mouse.

Sucesso!

Silva   20/04/2021 15:46:42

Olá, funciona muito bem o exemplo mas se fosse para alterar a fonte de um botão de comando ao mover o mouse?

Leandro Barbosa   27/03/2021 10:54:29

Avelino, você está fazendo um bom trabalho. Tenho conseguido, Graças a Deus, adaptar suas funções para minhas necessidades. Dessa vez consegui alterar o nome da fonte de um determinado rótulo dos meus formulários. Veja como ficou:

Public Function Rtl(frm As Form)
'Função adapatada por Leandro Barbosa
'Tendo como base a função demonstrada nesse link e criada pelo Sr. Avelino Sampaio
'http://www.usandoaccess.com.br/tutoriais/tuto53.asp?id=1#inicio
'No evento ao carregar dos formulários digite: Call Rtl(Me)
Dim ctl As Control
For Each ctl In frm.Controls
If ctl.ControlType = acLabel And ctl.Name = "Rótulo34" Then
ctl.FontName = "=CaptionRtl(" & ctl.Name & ")"
End If
Next
End Function

Public Function CaptionRtl(ctl As Control)
ctl.FontName = "Verdana"
End Function

Avelino Sampaio   20/02/2021 06:47:19

Wellington,

se eu não me engano, no exemplo que ofereci, tem uma solução para formulário Contínuo que utiliza o evento AO PINTAR.

Sucesso!

Wellington Silva   19/02/2021 15:00:29

Desculpa, esse foi o código:

Public Function fncPintaCampo(ctl As control, cor As Byte)
'--------------------------------------------
'Altera a cor do campo que possui o foco
'Ao recebr o foco, passa para a cor Amarela
'Ao perder o foco, passa para a cor branco
'--------------------------------------------
ctl.BorderColor = Switch(cor = 0, RGB(127, 127, 127), cor = 1, RGB(100, 142, 213))
'------------------------------------------------------
'Ao receber o foco posiciona o cursor no final do texto
'------------------------------------------------------
If cor = 1 Then ctl.SelStart = Len(ctl.Value & "")
End Function

Lembrando que no formulário contínuo fica toda a coluna "pintada"

Novamente obrigado!

Wellington

Wellington Silva   19/02/2021 14:56:45

Grande Avelino.

Em primeiro lugar, gostaria de parabenizar pelo excelente trabalho que faz.

Tenho um dúvida, eu utilizei seu código e fiz uma adaptação, para que selecionasse somente a borda do campo secionado, até aí funcionou perfeitamente, porém tenho um problema.

Em um relatório formulário continuo, quando seleciono o campo, fica toda a coluna selecionada, tente não utilizar esse método e ocorre o mesmo erro (inserindo Me.txtFiltro.BorderColor = RGB(100, 142, 213) - eventos receber e perder foco) .

Outra coisa que notei é que quando utilizo esse código em um sub-formulário quando vlico no formulário principal o campo continua com a cor.

Minha adaptação:

Public Function fncPintaCampo(ctl As Control, cor As Byte)
'--------------------------------------------
'Altera a cor do campo que possui o foco
'Ao recebr o foco, passa para a cor Amarela
'Ao perder o foco, passa para a cor branco
'--------------------------------------------
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
'------------------------------------------------------
If cor = 1 Then ctl.SelStart = Len(ctl.Value & "")
End Function

Novamente agradeço pelo apoio.

Obrigado.

Wellington Silva

Filipe Bacelar   15/01/2021 12:19:27

Avelino muito interessante sua função uma vez que a mesma percorre todos os objetos do form e de mais fácil parametrização.

Bem em venho feito isso através da formatação condicional pois a mesma também de dispõe de uma parâmetro ao receber foco.

Abraços

Leandro Barbosa   10/01/2021 09:24:33

Bom dia Avelino, obrigado pela anteção;
Consegui resolver com sua ajuda e da microsoft (http://support.microsoft.com/kb/210098/pt),
eu tinha definido o nome da função como "Evento", era esse erro, mudei para NaoVazio e funcionou como se deve, porém, sem o Dirty.
Muito obrigado Avelino

Avelino Sampaio   05/01/2021 10:45:23

leandro,

insira a chamada função no evento "ao carregar" do formulário:

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

Sugiro que acrescente a proprieadade DIRTY(Modificado/Sujo) no código. Exemplo:

Public Function Evento(frm As Form)
Dim ctl As Control
For Each ctl In frm.Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox
ctl.OnExit = "=AoSair([" & ctl.Name & "],'[" & frm.Name & "]')"
End Select
Next
End Function

Public Function AoSair(ctl As Control, frm As String)
If IsNull(ctl) And Forms(frm).Dirty Then
MsgBox "Nulo em: " & ctl.Name
DoCmd.CancelEvent
End If
End Function

Sucesso!

João Ricardo Chiodi   05/01/2021 01:05:34

Avelino, bom dia!

Parabéns e um feliz ano novo a todos.
No meu caso necessito que o campo esteja selecionado no momento em que ele recebe o foco (cursor), pois tenho algumas combos que estão marcadas inicialmente com a indicação "selecione" para o usuário.

Leandro Barbosa   04/01/2021 12:00:47

Avelino, consegui fazer analisar campos vazios:

Public Function Evento(frm As Form)
Dim ctl As Control
For Each ctl In frm.Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox
ctl.OnExit = "=AoSair(" & ctl.Name & ")"
End Select
Next
End Function

Public Function AoSair(ctl As Control)
If IsNull(ctl) Then
MsgBox "Nulo em: " & ctl.Name
DoCmd.CancelEvent
End If
End Function

Mas não consigo fazer chamar a função, uso access 2000.

Leandro Barbosa   04/01/2021 11:36:59

Avelino, excelente!
Avelino, como automatizar para o caso de campos que não podem ficar nulos ou com valor igual a zero?
Obrigado

Reginaldo Nunes   02/01/2021 10:38:44

If cor = 1 Then ctl.SelfStart = Len(ctl.Value & "")

Bom dia!

Avelino Tentei adaptar o su exemplo no meu formulario mais esta dando erro na descrição acima ela fica em cor amarela porque por favor me ajude pois sou iniciante no asunto.

pedro   09/08/2020 17:24:51

Gostei muito do artigo. Como faria isso num subformulario tipo folha de dados?


Envie seu comentário: