Obtendo
busca automática em uma combobox usando API ( SendMessage)
Que tal obter o mesmo efeito da ajuda do Windows: uma busca automática a medida que o texto procurado esta sendo digitado. Vamos mostrar como é fácil obter este resultando para um controle Combobox.
1- Inicie um novo projeto no VB e insira um módulo no seu projeto. Neste módulo inclua o seguinte código. (não esqueça de salvar o módulo)::
Seção General Declarations:
#If Win32 Then
Declare Function SendMessage Lib "User32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
#Else
Declare Function SendMessage Lib "User" _
(ByVal hWnd As Integer, ByVal wMsg As Integer, _
ByVal wParam As Integer, lParam As Any) As Long
#End If
|
No formulário do seu projeto inclua um controle combobox (Sorted = True), e um controle commandButton como na figura abaixo. (as labels apenas explicam o projeto)
![]() |
| projeto para para busca automática em uma Combobox |
No evento Load do formulário , vamos preencher a combo com alguns nomes aleatórios.
Private Sub Form_Load() Combo1.AddItem "Ana Lima" Combo1.AddItem "Araujo Duarte" Combo1.AddItem "Bruno Ribeiro" Combo1.AddItem "Carlos Santos" Combo1.AddItem "Carlito Maia" Combo1.AddItem "Jussara Barbosa" Combo1.AddItem "Jeremias Bueno" Combo1.AddItem "Anadir Ribeiro Lima" Combo1.AddItem "Arnaldo Soares Duarte" Combo1.AddItem "Breno Eduardo Ribeiro" Combo1.AddItem "Cinira Lima Santos" Combo1.AddItem "Paulo Joghin" Combo1.AddItem "Tarcisio Tavares" Combo1.AddItem "Jessica Naara" Combo1.ListIndex = 0 End Sub |
A seguir no evento Keypress da combobox insira o seguinte código:
Private Sub Combo1_KeyPress(KeyAscii As Integer)
Dim CB As Long
Dim FindString As String
Const CB_ERR = (-1)
Const CB_FINDSTRING = &H14C
If KeyAscii < 32 Or KeyAscii > 127 Then Exit Sub
If Combo1.SelLength = 0 Then
FindString = Combo1.Text & Chr$(KeyAscii)
Else
FindString = Left$(Combo1.Text, Combo1.SelStart) & Chr$(KeyAscii)
End If
CB = SendMessage(Combo1.hWnd, CB_FINDSTRING, -1, ByVal FindString)
If CB <> CB_ERR Then
Combo1.ListIndex = CB
Combo1.SelStart = Len(FindString)
Combo1.SelLength = Len(Combo1.Text) - Combo1.SelStart
End If
KeyAscii = 0
End Sub
|
O evento click do botão de comando insira o código;
Private Sub Command1_Click() Unload Me End End Sub |
Ao executar o projeto e digitar os caracteres referentes ao nome que desejamos encontrar é feita uma busca automática na qual é exibida o nome que contém os caracteres digitados. Algo como;
![]() |
| O projeto em tempo de execução |
O que uma API não faz . Até a próxima dica...