MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Mudar Cor da Borda - Foco - Erro Sub-formulário

    Compartilhe

    julia-melo
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 72
    Registrado : 02/01/2013

    [Resolvido]Mudar Cor da Borda - Foco - Erro Sub-formulário

    Mensagem  julia-melo em Qua 19 Fev 2014, 20:56

    Pessoal, tenho uma dúvida/problema.

    Eu tenho alguns formulários que ao colocar foco a boda muda de cor, destacando o campo, até aí tudo bem, funciona perfeitamente.

    Testei três métodos, dois deles do mestre Avelino Sampaio:

    Porém dois erros ocorre quando seleciono o foco no em um sub-formulário (Formulário contínuo).

    Primeiro erro:

    • Quando seleciono um campo (Combo e Caixa de Texto) é realçada a coluna inteira, ou seja, por ser ele mesmo só que em linhas diferentes o critério de seleção utiliza o campo como critério e não o foco na linha.

    Segundo erro:

    • Quando clico no formulário principal o foco continua no sub-formulário, mantendo assim o foco no campo.

    Método 1:

    Em um módulo:
    Código:
    Public Const CorAm = 13434879 'Fundo amarelo
    Public Const CorBr = 15856098 'fundo verde
    Public Const CorAz = 16764057 'Fundo azul
    Public Const CorBranco = 16777215 'fundo branco

    Public Function fcor(NomeDoCampo As control, códigoCor As String)
    On Error Resume Next
    If códigoCor = "Am" Then
        NomeDoCampo.BackColor = CorAm
    ElseIf códigoCor = "Br" Then
        NomeDoCampo.BackColor = CorBr
    ElseIf códigoCor = "Az" Then
        NomeDoCampo.BorderColor = CorAz
    ElseIf códigoCor = "Bra" Then
        NomeDoCampo.BackColor = CorBranco
    Else
        MsgBox "CódigoCor = Am - Amarelo  // CódigoCor = Br - verde // CódigoCor = Az - Azul", vbInformation, "Sistema de Vendas"
        NomeDoCampo.BorderColor = Br
    End If
    End Function

    Public Function nomeBar()
    Dim cb As Variant
    For Each cb In CommandBars
        Debug.Print cb.Name
    Next cb
    End Function

    No campo (formulário):
    Código:
    Call fcor(Me!TxtFornecedor, "Az")

    Método 2:

    Em um módulo:
    Código:
    Option Compare Database

    Public Function fncMontaEventos(frm As Form)
    Dim ctl As control
    '-------------------------------------------------------------------------------------------------------
    'Esta função deve ser chamada no evento "ao carregar" do formulário.  Exemplo: call fncMontaEventos(me)
    '-------------------------------------------------------------------------------------------------------
    '------------------------------------------------------------------------------
    'Percorre todos os controles do Formulário informado no argumento frm da função
    '------------------------------------------------------------------------------
    For Each ctl In frm.Controls
        Select Case ctl.ControlType
            '-----------------------------------------------------------------------------
            'Escrever as funções somente nos eventos dos controles tipo caixa de texto
            '-----------------------------------------------------------------------------
            Case acTextBox, acComboBox, acListBox 'caixa texto, combobox e listbox
                '----------------------------------------------------------------------------------------------------
                'Monta e escreve função fncPintacampo nos evento "ao receber foco" da caixa de teexto
                'Lembrando que estamos dentro do faço FOR. Significa que todas as caixas de texto receberão a função
                '----------------------------------------------------------------------------------------------------
                If ctl.OnGotFocus = vbNullString Then ctl.OnGotFocus = "=fncPintaCampo([" & ctl.Name & "],1)"  'Cor Amarela
                '--------------------------------------------------------------------------------------
                'Monta e escreve a função fncPintacampo() no evento "ao Perder Foco" da caixa de Texto
                '--------------------------------------------------------------------------------------
                If ctl.OnLostFocus = vbNullString Then ctl.OnLostFocus = "=fncPintaCampo([" & ctl.Name & "],0)" 'Cor Branca
            Case acCommandButton 'botões
        End Select
    Next
    End Function

    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
    '------------------------------------------------------
    End Function

    Public Function fncPintaBotao(ctl As control, cor As Integer)
    ctl.ForeColor = cor
    ctl.FontBold = IIf(cor = 0, False, True)
    End Function

    No evento ao carregar do formulário:
    Código:
    Call fncMontaEventos(Me)

    Método 3:

    No campo (formulário):

    No evento, ao receber foco:
    Código:
    Me.NomeCliente.BorderColor = RGB(100, 142, 213)
    No evento, ao perder foco:
    Código:
    Me.NomeCliente.BorderColor = RGB(127, 127, 127)

    Tentei de todas as formas além de pesquisar e nada, a coluna continua selecionada.

    Sendo assim, abri o tópico.

    Novamente obrigada.
    Julia

    Marco Messa
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 283
    Registrado : 28/06/2010

    Re: [Resolvido]Mudar Cor da Borda - Foco - Erro Sub-formulário

    Mensagem  Marco Messa em Qui 20 Fev 2014, 14:27

    Primeiro erro:

    Quando seleciono um campo (Combo e Caixa de Texto) é realçada a coluna inteira, ou seja, por ser ele mesmo só que em linhas diferentes o critério de seleção utiliza o campo como critério e não o foco na linha.

    Realmente é complicado, porque o nome do botão é o mesmo, porém em linhas diferentes.
    Pra corrigir isso talvez você consiga com um meio técnico alternativo (vulgo gambiarra  Very Happy ) onde ao dar o foco no campo, você pegaria o id dessa linha e passaria pra função que muda a cor, fazendo destacar apenas o campo com esse id.


    Segundo erro:

    Quando clico no formulário principal o foco continua no sub-formulário, mantendo assim o foco no campo.

    Você já tentou colocar algo no evento Ao perder o foco do sub-formulário para retirar a formatação do campo?


    .................................................................................
    Tea with me that I book your face [Você precisa estar registrado e conectado para ver esta imagem.]

    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3350
    Registrado : 04/04/2010

    Re: [Resolvido]Mudar Cor da Borda - Foco - Erro Sub-formulário

    Mensagem  Avelino Sampaio em Qui 20 Fev 2014, 14:45

    Olá!

    No exemplo deste meu tutorial eu ofereço uma solução para formulário continuo utilizando o evento "Ao pintar"

    [Você precisa estar registrado e conectado para ver este link.]

    Bom estudo!


    .................................................................................
    ============ Quer aprender Access em alta velocidade ? ============

    || [Você precisa estar registrado e conectado para ver esta imagem.] Acesse o site UsandoAccess.com.br e veja um ótimo kit de ensino que tenho para você.

    ===========================================================

    julia-melo
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 72
    Registrado : 02/01/2013

    Thanks!

    Mensagem  julia-melo em Sab 22 Fev 2014, 12:51

    Olá Marco/Avelino.

    Ambos me ajudaram muito, eu optei pela sugestão do modelo do Avelino que muda a cor do fundo (BackColor).

    De qualquer forma agradeço a atenção e o apoio de vocês.

    Bjo!
    Julia

    julia-melo
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 72
    Registrado : 02/01/2013

    Resolvido

    Mensagem  julia-melo em Sab 22 Fev 2014, 13:25

    Resolvido!

      Data/hora atual: Sex 09 Dez 2016, 07:41