• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

programadorvb6

[Resolvido] Como só apagar um caracter de cada vez

1 mensagem neste tópico

Olá pessoal.

Não estou a conseguir que a tecla BackSpace apague o caracter correcto quando me posiciono atrás do mesmo, para o poder apagar em uma Combobox.

Nota : este codigo que estou a enviar ja contem inserido o Auto Complete.

Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const CB_SHOWDROPDOWN = &H14F
Const CB_GETDROPPEDSTATE = &H157
Event Click() 'MappingInfo=TxtData,TxtData,-1,Click
Event Change() 'MappingInfo=TxtData,TxtData,-1,Change
Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MappingInfo=TxtData,TxtData,-1,MouseMove
Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MappingInfo=TxtData,TxtData,-1,MouseDown
'Default Property Values:
Const m_def_Enabled = 0
'Property Variables:
Dim m_Enabled As Boolean




Function ComboAutoComplete(ByRef cboComplete As ComboBox, ByVal KeyAscii As Integer, Optional ByVal bLimitToList As Boolean = False) As Long
    Dim lRetVal As Long
    Dim sSearch As String
    Const CB_ERR = (-1), CB_FINDSTRING = &H14C
    
    On Error GoTo ErrFailed
    If cboComplete.Style <> vbComboDropdown Then
        Debug.Print "Error in ComboAutoComplete. Combo must be of the style vbComboDropdown..."
        Debug.Assert False
        'Return the KeyAscii
        ComboAutoComplete = KeyAscii
        Exit Function
    End If
    
    If KeyAscii = 8 Then
        'Pressed delete
        If cboComplete.SelStart <= 1 Then
            'Last character, clear combo.
            cboComplete.Text = ""
            ComboAutoComplete = 0
            Exit Function
        End If
        'Delete text
        If cboComplete.SelLength = 0 Then
            'Delete a single character
            sSearch = UCase$(Left$(cboComplete.Text, Len(cboComplete) - 1))
        Else
            'Delete the selected text
            sSearch = Left$(cboComplete.Text, cboComplete.SelStart - 1)
        End If
    ElseIf KeyAscii < 32 Or KeyAscii > 127 Then
        'Invalid keyboard characters
        Exit Function
    Else
        'Append the new text to the combo text
        If cboComplete.SelLength = 0 Then
            'Append a character
            sSearch = UCase$(cboComplete.Text & Chr$(KeyAscii))
        Else
            'Insert a character
            sSearch = Left$(cboComplete.Text, cboComplete.SelStart) & Chr$(KeyAscii)
        End If
    End If
    'Find the closest match
    lRetVal = SendMessage(cboComplete.hWnd, CB_FINDSTRING, -1, ByVal sSearch)
    
    If lRetVal = CB_ERR Then
        'Did not find a matching item in list
        If bLimitToList = True Then
            'Block the KeyAscii
            ComboAutoComplete = 0
        Else
            'Return the KeyAscii
            ComboAutoComplete = KeyAscii
        End If
    Else
        'Found a matching item in list
        cboComplete.ListIndex = lRetVal
        cboComplete.SelStart = Len(sSearch)
        cboComplete.SelLength = Len(cboComplete.Text) - cboComplete.SelStart
        
    End If
    
    Exit Function
    
ErrFailed:
    'Return the keycode
    ComboAutoComplete = KeyAscii
End Function

Private Sub combo1_KeyPress(KeyAscii As Integer)
    Dim salta As Boolean
    KeyAscii = ComboAutoComplete(Combo1, KeyAscii, False)
    If KeyAscii = 13 Then
        If salta = True Then
            
        End If
    End If
    
End Sub

Grato pela vossa atenção.

Até+

programadorVB6

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora