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...