![]() |
Buscar elemento en listbox
Buenas,
Estoy intentando encontrar la manera que según el contenido de un edit.txt se posicione el cursor en un listbox. He hecho lo siguiente:
Pero este código posiciona el cursor siempre que la coincidencia sea exacta, y a mi me gustaría que se posicionara cuando coincida el inicio del elemento del listbox, es dir, si en el edit.txt escribo 'ab' se posicione al primer elemento que empieze por ab. Estoy leyendo que no es posible. Si no es posible, hay algún componente que lo permita? Gracias |
En donde dice que no es posible?
Lo podes implementar "a mano", o podes buscar por "ComboBox incremental search". En Delphi 7 creo que no esta implementado, pero en realidad el que lo implementa es el control ComboBox de Windows que la VCL envuelve, con enviar un mensaje usando la API de Windows lo podes lograr La otra forma es implementarlo uno mismo Debes recorrer los strings contenidos en tu combo, comparar cada uno con la cadena de texto que esta ingresada en el combo en ese momento, y si hay coincidencia parcial, poner ese elemento como seleccionado y cortar el bucle
Creo que este es un inicio Edito: Perdon, lei mal, hablas de TListBox, pero creo que el concepto es el mismo |
Gracias AgustinOrtu. Creo que defiere un poco entre el ComboBox y el ListBox. SeltStart y SelLength no están implementadas en ListBox.
Había pensado en la implementación manual, y voy a hacerlo ahora, pero me da la sensación que debe ser lento, pues además de buscar si por el contenido del edit empieza algún elemento del listbox (ordenado), tienes que comprobar cuando se haya pasado, para no hacer todo el bucle |
Con esto te debería valer:
Te selecciona el primero que coincida o no te selecciona ninguno si no hay elemento coincidente. Si cambias AnsiStrLIComp (case-insensitive) por AnsiStrLComp (case-sensitive) conseguirás que distinga o no por may/min. |
Muchas gracias, funciona perfecto, aunque para optimizarlo, ya que la lista contiene muchos ítems, está bien controlar que cuando se ha pasado de largo salga del bucle
|
Para optimizar había pensado con este if:
Pero no funciona, pues Ló es más grande que Lu, con esto quiero decir que, si por ejemplo busco Lucena no lo encuentra, dado que antes encuentra López y al ser mayor, sale del bucle |
Cita:
:cool: |
| La franja horaria es GMT +2. Ahora son las 18:44:09. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi