Comunidad Gambas-es
TextFlight - otro intento mas de listar mientras se escribe. - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: Controles/Librerías/Componentes (https://gambas-es.org/forum-7.html)
+--- Tema: TextFlight - otro intento mas de listar mientras se escribe. (/thread-1120.html)



TextFlight - otro intento mas de listar mientras se escribe. - tincho - 02-12-2022

Hola amigos.

Ya que el tema de la lista que se actualiza con los cambios de un TextBox o de un ComboBox esta sobre la mesa, les paso un intento de crear un control tenga el comportamiento de los TextBox de las paginas web de búsqueda de aeropuertos, de ahí que le puse como nombre TextFlight. No esperen que funcione porque no lo hace, es solamente una idea usando una Ventana en vez de un formulario, pero no se sitúa donde debería.
Así que aquí lo tienen por si se quieren divertir un rato.
Gracias nuevamente Shordi por tu video de controles


RE: TextFlight - otro intento mas de listar mientras se escribe. - Shordi - 02-12-2022

Bueno, como viajo menos que la Cibeles no sé muy bien cómo son las web de las búsquedas de Aeropuertos, pero viendo tu código y entendiendo (creo) lo que quieres hacer, te pongo aquí la versión que he hecho en un ratito. Le he respetado eso de poner tres columnas, una tamaño 0 y las otras dos duplicadas que pones en tu ejemplo... aunque no entiendo muy bien el porqué pero como ya estaba hecho... Big Grin Big Grin Big Grin. Lo suyo sería pasarle un array de arrays a la propiedad list y construir el gridview en base a eso, con las columnas ilimitadas y las filas ilimitadas, pero como ejemplito vale.

Saludos

Tal como está hecho, la lista se construye al hacer click sobre el textbox. Eso, en caso de listas muy largas puede ser una carga para el programa. Se puede, de hecho así lo hice en principio, hacer que la lista se llene la primera vez que hace click y se mantenga oculta en las siguientes clicks que se hagan, pero el tema es que ese formulario que creas y ocultas genera referencias circulares a la hora de cerrar el formulario principal... o simplemente no se cierra dejando el programa colgado en memoria sin finalizar. Eso obliga a estar poniendo Quit al cerrar todos los programas donde se use el control y eso es un peñazo. Supongo que un campo donde eliges una opción normalmente no suele ser pulsado veinte veces, sino una y ahí el tiempo consumido es el mismo que si lo creas sólo una vez.

Saludos

Por cierto, para los que no tengan experiencia con esto de los controles de usuario, si al cargar el proyecto por primera vez te dice que no puede abrir el formulario porque faltan controles, es porque el propio control, en este caso tFlight, no está aún compilado. Si esto te ocurre sólo tienes que compilarlo todo y si persiste en decir que no lo encuentra, cerrar el proyecto y volver a abrirlo.

Saludos.


RE: TextFlight - otro intento mas de listar mientras se escribe. - tincho - 06-12-2022

Hola Shordi, gracias por el código, lo acabo de descargar y le echare un vistazo ahora mismo.
Las web de búsquedas de vuelos suelen tener un TextBox (no se si es este control exactamente ya que al ser otros lenguajes de programación...) que se comporta de la siguiente manera:
[Imagen: 5BLNg9x.mp4]
Al parecer el efecto se logra intercediendo un pequeño formulario al presionar una tecla y pasandole el texto escrito.

(02-12-2022, 13:55)Shordi escribió: Bueno, como viajo menos que la Cibeles

jeje, si te refieres a la fuente, esta mas fija que una montaña, pero si te refieres a la diosa en este caso creo que esra muy viajera ya que iba montada en su carro tirada por leones. Big Grin

(02-12-2022, 13:55)Shordi escribió: Lo suyo sería pasarle un array de arrays a la propiedad list y construir el gridview en base a eso, con las columnas ilimitadas y las filas ilimitadas, pero como ejemplito vale.

Puede ser, yo planeo usarlo para pesarle una lista de tres o mas campos, donde una es la clave, otro el nombre (valor único) y otro una descripción, pero me parece bien dejar abierto a pesarle mas campos, incluso campos calculados con subtotales de vistas.
También creo que seria interesante agregarle una lista de los campos que se concatenaran para usarlos en la búsqueda. Por ejemplo nombre & apellido1 & apellido2 lo que permitiría presentar una lista de todas las coincidencias tanto con nombre como con los dos apellidos por ejemplo.

(02-12-2022, 13:55)Shordi escribió: Tal como está hecho, la lista se construye al hacer click sobre el textbox. Eso, en caso de listas muy largas puede ser una carga para el programa. Se puede, de hecho así lo hice en principio, hacer que la lista se llene la primera vez que hace click y se mantenga oculta en las siguientes clicks que se hagan, pero el tema es que ese formulario que creas y ocultas genera referencias circulares a la hora de cerrar el formulario principal... o simplemente no se cierra dejando el programa colgado en memoria sin finalizar. Eso obliga a estar poniendo Quit al cerrar todos los programas donde se use el control y eso es un peñazo. Supongo que un campo donde eliges una opción normalmente no suele ser pulsado veinte veces, sino una y ahí el tiempo consumido es el mismo que si lo creas sólo una vez.

Coincido con lo de crear la lista antes de los eventos clic del control, incluso puede existir una variable o propiedad de restricción que acote la lista de opciones a las que ya se hayan puesto en la tabla principal y no a todas las existentes o para el caso que interese que el usuario solo opte por elementos sin poder crear uno nuevo etc.
Respecto a Crear / Ocultar el formulario auxiliar, No tengo claro como resolver este tema, es la principal razón por la que puse este post, para discutir la mejor forma de hacerlo.
Correcto con lo de elegir una opción, que no suele hacerse muchas veces (20 esta claro que no) pero de todos modos me parece bien cargar la lista antes, al crear el control y al agregar un elemento nuevo.


RE: TextFlight - otro intento mas de listar mientras se escribe. - tercoide - 06-12-2022

Cual es la diferencia entre este control y el ComboSeek?


RE: TextFlight - otro intento mas de listar mientras se escribe. - tincho - 06-12-2022

(06-12-2022, 13:12)tercoide escribió: Cual es la diferencia entre este control y el ComboSeek?

No se todas las diferencias que pueden tener entre si pero algunas pueden ser:
  1. El control de la pagina web y filtra la lista mientras se escribe y comboseek intenta seleccionar una coincidencia pero sin filtrar la lista.
  2. El web no permite agregar un nuevo registro y comboseek si lo permite.
  3. El menu popup web aparece en la misma posicion que el textbox y en comboseek no lo hace



RE: TextFlight - otro intento mas de listar mientras se escribe. - Shordi - 06-12-2022

(06-12-2022, 13:12)tercoide escribió: Cual es la diferencia entre este control y el ComboSeek?

Ahora mismo, tal como está el pobre, poca, poca... pero tal como va enfocado este control está "destinado" más mostrar más información (más columnas) que comboseek, que está enfocado en localizar un elemento concreto mientras tecleas... aunque no costaría mucho establecer el mecanismo de búsqueda del comboseek sobre el tflight de manera que, ubicados en una columna, vaya filtrando según tecleemos... o lo que sea.

Pero en esencia hacen lo mismo: Buscar en una lista que aparece sobre el textbox al hacer click y pulsar una tecla.

Saludos


RE: TextFlight - otro intento mas de listar mientras se escribe. - tincho - 07-12-2022

Shordi, le eche un vistazo al código que pasaste, va bien encarado.
Voy a intentar fusionar todo mañana con un formulario que estuve haciendo hoy que presenta el comportamiento siguiente:
[Imagen: AFuzbHc.mp4]

Había olvidado la instrucción: Public Const _DrawWith As String = "TextBox", gracias por recordarmelo.

Lo que hice hoy, luego de probar hasta el infinito y mas allá con GTK para reposicionar un formulario Modal, no hubo caso, tuve que usar QT pero que en mi escritorio no se ve tan bien cono GTK. Angry