COMBO COMPLETA AUTOMATICAMENTE

HELIO.COSTA 15/08/2010 21:23:30
#350327
Boa noite a todos!

Tenho um combo com vários nomes. Gostaria que no hora de digitar a letra A, começa a listar os nomes que começam com a letra a, depois digitar o M lista os nomes com AM, depois a letra E, lista todos que começam com AME..., e ssim por diante. Quando aparecer o nome procurado click em enter , seleciona o texto e pula para o próximo campo.
Grato
MARCELO.TREZE 16/08/2010 09:23:11
#350348
[ô]Em um módulo:

Declare Function SendMessage Lib [Ô]User32[Ô] Alias [Ô]SendMessageA[Ô] (ByVal hWnd As Long, ByVal wMsg As Long, ByVal WParam As Long, lParam As Any) As Long

Global Const CB_ERR = -1
Global Const CB_FINDSTRING = &H14C

[ô]No form

Private Sub Combo1_KeyPress(KeyAscii As Integer)
Dim Buffer As String
Dim Ret As Long
Buffer = Left(Combo1.Text, Combo1.SelStart) & Chr(KeyAscii)
Ret = SendMessage((Combo1.hWnd), CB_FINDSTRING, -1, ByVal Buffer)
If Ret <> CB_ERR Then
Combo1.Text = Combo1.List(Ret)
Combo1.SelStart = Len(Buffer)
Combo1.SelLength = Len(Combo1.Text)
End If
KeyAscii = 0
End Sub
PARREIRA 16/08/2010 09:32:26
#350349
Resposta escolhida
Public Sub AutoProcura(cbo As ComboBox, KeyAscii As Integer)
Dim sBuffer As String
Dim lRetVal As Long

sBuffer = Left(cbo.Text, cbo.SelStart) & _
Chr(KeyAscii)

lRetVal = SendMessage((cbo.hwnd), CB_FINDSTRING, -1, ByVal sBuffer)

If lRetVal <> CB_ERR Then
cbo.ListIndex = lRetVal
cbo.Text = cbo.List(lRetVal)
cbo.SelStart = Len(sBuffer)
cbo.SelLength = Len(cbo.Text)
KeyAscii = 0
End If
End Sub


Chame se assim:
No evendo key press do combo.
Ex.
Private Sub CBO_Cliente_KeyPress(KeyAscii As Integer)
AutoProcura Cbo_Cliente, KeyAscii
End Sub

Espero ter ajudado.
Tópico encerrado , respostas não são mais permitidas