MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

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
    avatar
    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
    avatar
    Marco Messa
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 282
    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.]
    avatar
    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3390
    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!
    avatar
    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
    avatar
    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 22 Set 2017, 07:21