Buscar en ListBox

Iniciado por calk9, 27 Septiembre 2011, 03:34 AM

0 Miembros y 2 Visitantes están viendo este tema.

calk9

Buenas a todos, a continuación les dejo mi código el cual agrega a un listbox el color del píxel en donde se encuentra el mouse, al moverse el mismo. Para saber cuando se mueve he instalado un hook mediante SetWindowsHookEx, pero eso no es lo importante. El problema es que utilizo SendMessage, con la Constante LB_FINDSTRINGEXACT la cual busca una Cadena. Pero me estoy volviendo loco ya que hago una condición (sentencia if) la cual dicta que si devuelva False, la función que busca el Color en el listbox, no agregue al color obtenido. Esto para evitar que se me agreguen múltiples veces el mismo color, y después me vuelvo loco identificando cada uno. Pero no me devuelve false, o algún error estoy cometiendo en el código que no puedo identificar, por eso estoy aqui! He aquí el código:

La función que busca el string:

Public Function Encuentra(Frase As String) As Boolean
 
Dim Indice As Long
     
    ' Tipo de búsqueda
    Indice = SendMessage(fMain.List1.hwnd, LB_FINDSTRINGEXACT, -1, Frase)
     
     
    If Indice < 0 Then
        'no se encontró
        Encuentra = False
    Else
        ' se encontró la frase entonces la selecciona
        Encuentra = True
    End If
   
End Function


Aquí donde se utiliza:

Dim hdc As Long

    Call GetCursorPos(Mouse)

'Get Color
hdc = GetDC(0)
pxColor = GetPixel(hdc, Mouse.x, Mouse.y)
ReleaseDC 0, hdc

'Set color
Picture1.BackColor = pxColor


If Encuentra(Hex(pxColor)) = False Then
    List1.AddItem Hex(pxColor)
End If


Por algúna razón me agrega varias veces el mismo color encontrado, lo cual no debería, si es que lo encuentra en la condición planteada.

Gracias desde ya, saludos!

BlackZeroX

#1
.
* Jamas uses los controles X como un amacen de datos... es algo que no se deberia de hacer; separa la parte grafica de la parte interna de tu programa...
* A razon de tu problema te dejo esta clase.

Quizas te sirva mi clase.
http://foro.elhacker.net/programacion_visual_basic/source_cpushsort-t340133.0.html

Dulces Lunas!¡.
The Dark Shadow is my passion.

raul338

Tal vez te funcione llamándolo así

Indice = SendMessage(fMain.List1.hwnd, LB_FINDSTRINGEXACT, -1, ByVal Frase)

Todo depende de la declaración de SendMessage que tengas  :)

calk9

Cita de: BlackZeroX▓▓▒▒░░ en 27 Septiembre 2011, 04:37 AM
.
* Jamas uses los controles X como un amacen de datos... es algo que no se deberia de hacer; separa la parte grafica de la parte interna de tu programa...
* A razon de tu problema te dejo esta clase.

Quizas te sirva mi clase.
http://foro.elhacker.net/programacion_visual_basic/source_cpushsort-t340133.0.html

Dulces Lunas!¡.

No he entendido a que te refieres con el primer asterisco, gracias por la respuesta.

Cita de: raul338 en 27 Septiembre 2011, 14:15 PM
Tal vez te funcione llamándolo así

Indice = SendMessage(fMain.List1.hwnd, LB_FINDSTRINGEXACT, -1, ByVal Frase)

Todo depende de la declaración de SendMessage que tengas  :)

Exactamente eso necesitaba! Gracias!  ;D

Saludos.