COMBO BOX - AUTO COMPLETAR

SMANUT 11/03/2010 15:26:24
#336655
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
ONBASS 11/03/2010 15:32:47
#336656
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
SMANUT 11/03/2010 15:34:58
#336657
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
ONBASS 11/03/2010 15:46:11
#336659
SendMessage me parece API..... ainda nao to mto intimo com API, mas a galera mais experiente ai vai ajudar já já.. abrass
SMANUT 11/03/2010 15:48:11
#336660
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
SMANUT 11/03/2010 16:33:55
#336666
galera tudo meu depende desse post, pois tudo que faço esta nesse tipo de rotina
Preciso encontrar uma solução urgente
RENNERFERNANDES 11/03/2010 20:05:02
#336676
utilize esse complemento
RENNERFERNANDES 11/03/2010 20:07:08
#336677
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
CLEVERTON 11/03/2010 21:23:34
#336679
Resposta escolhida
Olha, eu faço assim ( sem necessitar uso de API )

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
SMANUT 12/03/2010 07:49:57
#336704
isso ai pessoal, caso resolvido
Tópico encerrado , respostas não são mais permitidas