Visual Basic - Desplegar DBcombo segun escribo

Life is soft - evento anual de software empresarial
 
Vista:

Desplegar DBcombo segun escribo

Publicado por Sergio (1 intervención) el 30/09/2009 10:05:53
Buenos dias


Tengo una aplicacion en la que utiliza bastantes DBcombo. Queria que al posicionar el focus en uno y empezar a escribir, se despliegue automaticamente, como cuando le das a la flechita de la izquierda de este. ¿Alguien puede indicarme como hacerlo?

Pongo una imagen para q se vea q es lo q quiero con mas claridad.

[URL=http://img5.imageshack.us/i/66033079.jpg/][IMG]http://img5.imageshack.us/img5/2486/66033079.th.jpg[/IMG][/URL]


Muchas gracias por su tiempo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Desplegar DBcombo segun escribo

Publicado por juan carlos (518 intervenciones) el 01/10/2009 05:38:08
hola sergio esto lo sague de la pagina del Guille
agrega un combo1
metele datos
escribe esto
==================
en un modulo
==================
#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
==================

en un form
==================

Const CB_FINDSTRINGEXACT = &H158 'Buscar cadena completa en un ComboBox
Const LB_FINDSTRINGEXACT = &H1A2 'Buscar cadena completa en un ListBox
Const CB_FINDSTRING = &H14C 'Buscar cadena desde el principio en un ComboBox
Const LB_FINDSTRING = &H18F

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

Public Function ActualizarLista(sTexto As String, cList As Control) As Long
'Esta función comprobará si el texto indicado existe en la lista
'Si no es así, lo añadirá
'El valor devuelto, será la posición dentro de la lista ó -1 si hay "fallos"
'
'Para buscar en el List/combo usaremos una llamada al API
'(si ya hay una forma de hacerlo, ¿para que re-hacerla?)
'
Const CB_FINDSTRINGEXACT = &H158 'Mensaje para los combos
Const LB_FINDSTRINGEXACT = &H1A2 'Mensaje para las Listas
Dim L As Long

If cList.ListCount = 0 Then
'Seguro que no está, así que añadirla
L = -1
Else
'Si el control es un Combo
If TypeOf cList Is ComboBox Then
L = SendMessage(cList.hWnd, CB_FINDSTRINGEXACT, -1, ByVal sTexto)
'Si el control es un list
ElseIf TypeOf cList Is ListBox Then
L = SendMessage(cList.hWnd, LB_FINDSTRINGEXACT, -1, ByVal sTexto)
Else
'no es un control List o Combo, salir
ActualizarLista = -1
Exit Function
End If
End If

'Si no está, añadirla
If L = -1 Then
cList.AddItem sTexto
L = ActualizarLista(sTexto, cList)
End If
ActualizarLista = L
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Desplegar DBcombo segun escribo

Publicado por juan carlos (518 intervenciones) el 01/10/2009 06:40:16
hola Sergio
necesitas un combo1 y un command1
intenta esto

Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Sub Combo1_KeyPress(KeyAscii As Integer)
Dim Resp As Long
Resp = SendMessageLong(Combo1.hwnd, &H14F, True, 0)
End Sub

Private Sub Form_Load()
Combo1.Clear
Combo1.AddItem "Objeto 1"
Combo1.AddItem "Objeto 2"
Combo1.AddItem "Objeto 3"
Combo1.AddItem "Objeto 4"
Combo1.AddItem "Objeto 5"
Combo1.AddItem "Objeto 6"
Combo1.AddItem "Objeto 7"
Combo1.Text = "Objeto 1"
End Sub

Private Sub Command1_Click()
'ComboBox desplegado
Dim Resp As Long
Resp = SendMessageLong(Combo1.hwnd, &H14F, True, 0)
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar