COMBO BOX - AUTO COMPLETAR
tenho um prg feito em VB6
Nas combo utilizo o recurso de auto completar, e também o enter para pular de campo, só que na hora que vou executar o sql para armazenar o que esta na combo, preciso do itemdata para pegar o index que é a chave primária. Quando o cara ve o que ta escrito ele pressiona o enter, mais não consigo pegar o index disso que op auto completar achou.
alguém pode me ajudar, estou a muito tempo tentando
Nas combo utilizo o recurso de auto completar, e também o enter para pular de campo, só que na hora que vou executar o sql para armazenar o que esta na combo, preciso do itemdata para pegar o index que é a chave primária. Quando o cara ve o que ta escrito ele pressiona o enter, mais não consigo pegar o index disso que op auto completar achou.
alguém pode me ajudar, estou a muito tempo tentando
cara,
suponho que essa função tenha um FOR/NEXT,DO/WHILE... nao teria como pegar o index por aÃ?
se nao passa pelo index, cria uma variavel e vai somando...nao testei , é apenas lógica.
vlw
suponho que essa função tenha um FOR/NEXT,DO/WHILE... nao teria como pegar o index por aÃ?
se nao passa pelo index, cria uma variavel e vai somando...nao testei , é apenas lógica.
vlw
olha a função
Private Sub cmbempresarec_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 cmbempresarec.SelLength = 0 Then
FindString = cmbempresarec.Text & Chr$(KeyAscii)
Else
FindString = Left$(cmbempresarec.Text, cmbempresarec.SelStart) & Chr$(KeyAscii)
End If
cb = SendMessage(cmbempresarec.hWnd, CB_FINDSTRING, -1, ByVal FindString)
If cb <> CB_ERR Then
cmbempresarec.ListIndex = cb [ô] na lógica seria aqui mais não vem
cmbempresarec.SelStart = Len(FindString)
cmbempresarec.SelLength = Len(cmbempresarec.Text) - cmbempresarec.SelStart
End If
KeyAscii = 0
End Sub
Private Sub cmbempresarec_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 cmbempresarec.SelLength = 0 Then
FindString = cmbempresarec.Text & Chr$(KeyAscii)
Else
FindString = Left$(cmbempresarec.Text, cmbempresarec.SelStart) & Chr$(KeyAscii)
End If
cb = SendMessage(cmbempresarec.hWnd, CB_FINDSTRING, -1, ByVal FindString)
If cb <> CB_ERR Then
cmbempresarec.ListIndex = cb [ô] na lógica seria aqui mais não vem
cmbempresarec.SelStart = Len(FindString)
cmbempresarec.SelLength = Len(cmbempresarec.Text) - cmbempresarec.SelStart
End If
KeyAscii = 0
End Sub
SendMessage me parece API..... ainda nao to mto intimo com API, mas a galera mais experiente ai vai ajudar já já.. abrass
ai vai o que esta no módulo geral
#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
#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
galera tudo meu depende desse post, pois tudo que faço esta nesse tipo de rotina
Preciso encontrar uma solução urgente
Preciso encontrar uma solução urgente
utilize esse complemento
Esqueci de ensinar:
Sem mistérios
adiciona ele...igual uma combo comum....e após ser inserido os valores....com a função .additem é só ir digitando que ele vai completando abc
Sem mistérios
adiciona ele...igual uma combo comum....e após ser inserido os valores....com a função .additem é só ir digitando que ele vai completando abc
Olha, eu faço assim ( sem necessitar uso de API )
no Form ( mude a propridade KeyPreview=True do Form )
NO MODULO, vc coloca essa SUb
no Form ( mude a propridade KeyPreview=True do Form )
Dim ApagaTexto as Boolean
Private Sub cboRota_Change()
AutoComplete cboRota, ApagaTexto
End Sub
Private Sub cboRota_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyBack Then ApagaTexto = True
End Sub
NO MODULO, vc coloca essa SUb
Public Sub AutoComplete(nCombo As ComboBox, ByRef nApagaTexto As Boolean)
Dim i As Integer
Dim QtdLetras As Byte
Dim Search As String
Dim Searchlen As String
Dim ExpAntiga As String
If nApagaTexto = True Then GoSub Final
Search$ = UCase$(nCombo.Text)
Searchlen = Len(Search$)
If Searchlen Then
For i = 0 To nCombo.ListCount - 1
If UCase$(Left$(nCombo.List(i), Searchlen)) = Search$ Then
ExpAntiga = nCombo.Text
DoEvents
QtdLetras = Len(nCombo.Text)
nCombo.Text = nCombo.List(i)
nCombo.SelStart = QtdLetras
nCombo.SelLength = Len(nCombo.Text) - QtdLetras
Exit For
End If
Next
End If
Final:
nApagaTexto = False
End Sub
isso ai pessoal, caso resolvido
Tópico encerrado , respostas não são mais permitidas