• Lunes 18 de Noviembre de 2024, 03:27

Autor Tema:  Busqueda En Listview Con Api  (Leído 1292 veces)

aprendiz_333

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Busqueda En Listview Con Api
« en: Jueves 6 de Diciembre de 2007, 07:05 »
0
Buenas... consegui este codigo de la web el cual busca datos solo en la Primera Columna de un listview, pero necesito que busque los datos UNICAMENTE de la tercera columna, ¿que podria modificar para obtener este resultado? .. muchas gracias por alguna sugerencia.

Option Explicit
'UDT necesarias para usar con SendMessage
Private Type POINTAPI
    x As Long
    y As Long
End Type
Private Type LVFINDINFO
    flags As Long
    psz As String
    lParam As Long
    pt As POINTAPI
    vkDirection As Long
End Type
'Función Api SendMessage
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
 
'Constantes para SendMessage
Private Const LVM_FIRST = &H1000
Private Const LVM_FINDITEM = (LVM_FIRST + 13)
Private Const LVFI_PARAM = &H1
Private Const LVFI_STRING = &H2
Private Const LVFI_PARTIAL = &H8
Private Const LVFI_WRAP = &H20
Private Const LVFI_NEARESTXY = &H40
 
'Variable de retorno y para la estructura
Dim lRet As Long, LFI As LVFINDINFO

'Procedimiento que busca: Se le envía el control ListView y el texto a buscar
Private Sub Buscar_ListView(ListView As ListView, Cadena As String)
        'Cadena parcial
        LFI.flags = LVFI_PARTIAL Or LVFI_WRAP
    If Cadena = "" Then
       Exit Sub
    End If
 
    'Se le asigna a esta variable la cadena que luego se le envía a SendMessage
    LFI.psz = Cadena
       
    'Le enviamos el mensaje LVM_FINDITEM, la estructura y rel ListView
    lRet = SendMessage(ListView1.hwnd, LVM_FINDITEM, -1, LFI)
       
    If lRet >= 0 Then
        'Seleccionamos el item del Listview
        ListView1.SelectedItem = ListView1.ListItems(lRet + 1)
        'Propiedad opcional
        ListView1.HideSelection = False
        'Si el item se encuentra fuera del área visible desplazamos la lista _
        para poder visualizarlo con el método EnsureVisible
        ListView1.SelectedItem.EnsureVisible
    End If
End Sub

Function Buscar(Lv As ListView, _
Cadena As String, _
nCol As Integer) As Long
Dim i As Long
Dim oItem As ListItem
With Lv
    For i = 1 To Lv.ListItems.Count
        Set oItem = Lv.ListItems(i)
        If InStr(StrConv(oItem.SubItems(nCol), vbLowerCase), StrConv(Cadena, vbLowerCase)) Then
            Buscar = oItem.Index
            Exit For
        End If
    Next
End With
End Function

Private Sub txtbuscar_Change()
      Call Buscar_ListView(ListView1, txtbuscar)
End Sub