ferchobahia   01-12-2022, 18:27
#1
hola gente, soy Fernando de Argentina soy programador de palabra, ya que no estudie oficialmente la carrera; suelo programar cosas que uso en lo cotidiano para mi trabajo en VB bajo windows, mi sueño de toda la vida fue usar linux para el sistema y a mis 50 años fue empezar a entender Linux y como sueño talvez mudar todo lo que uso a Linux y ahí es que comencé en el mundo de Gambas por la cercanía a mi comodidad mental y es asi que pase mis BD access a mysql y ahora estoy reprogramando mis sistemas a gambas, cosa que me sorprendió gratamente la experiencia, me va a  llevar como un año, pero voy tranquilo disfrutando el viaje.

sin mas preámbulos ahora mi problema, es que estoy tratando de usar un ComboBox para seleccionar artículos y para eso lleno el combo desde una BD mysql y lo pongo en readonly=true ; el problema es que la demora de pulsación sucesiva de teclas es extremadamente corta (a diferencia en VB que es demasiado larga) y cuando te demoras mas de 500ms se "borra" de la memoria de buffer (no se realmente como se llama esta característica) y cuando pulsas la segunda tecla lo toma como nueva palabra, no se si me explico, probe usar una rutina de código que usa un texbox que llena un listbox que busca en la BD mientras se escribe que esta publicado en el foro, pero no me da el resultado esperado.

hay alguna manera de contralar este tiempo de pulsación de teclas? a alguien se le ocurre algo que me pueda ayudar, porque hasta donde pude googlear no encontré nada. 

Muchas Gracias y muy buena la información que manejan
Shordi   01-12-2022, 20:06
#2
Bienvenido a la comunidad y es un placer ver que la familia crece... aunque sea de a poquito Big Grin Big Grin

A lo mejor te interesa lo que se habló en este hilo:
https://gambas-es.org/showthread.php?tid=922

Es un control heredado de combobox que hice hace unos meses y que busca en la lista de una manera más "racional" que la que ahora lleva (a mi pobre entender, que como soy el autor qué te voy a contar Cool ) Las diferencias fundamentales son que al poder ir viendo qué estás tecleando puedes corregir errores y demás. El incoveniente lo tienes en el modo readOnly, que prácticamente desaparece porque, qué diablos, hay que teclear. Queda a tu programa el controlar que el resultado tecleado/encontrado sea un elemento válido de la lista.

De todas formas mi memoria de pez me impide recordar todos los detalles en este momento. Si te sirve, perfecto. Si tienes dudas con él, pregunta. Si no hace algo que crees que debería hacer (o lo hace mal) pide, que tengo tiempo y disposición dentro de mi corto entender.


Saludos y, repito, bienvenido.

No podemos regresar
tincho   01-12-2022, 22:31
#3
Hola Fernando, bienvenido al foro, 
(01-12-2022, 18:27)ferchobahia escribió: ... soy Fernando ... a mis 50 años fue empezar ... mudar todo lo que uso a Linux... 
Bien, me hago una idea de por donde vas ya que que posteaste primero sobre gb.report2 y ahora estas con los campos de claves foráneas.
Así que como estas haciendo en gambas (o pasando a gambas) una aplicación con bases de datos relacionales e vas a topar con unos cuantos "inconvenientes" para lograrlo.
Yo estoy ahora, casualmente, tratando de hacer funcionar un control que se llama TextList que esta entre los ejemplos del post que te indico Shordi.
no es un ComboBox, que es lo que estas buscando, peeeeero yo también intente primero usar un combobox y finalmente lo descarte porque no logre hacer funcionar bien el filtro de la lista mientras escribís, shordi con comboseek es el que mejor logro este efecto, pero si usas GTK no termina de funcionar bien.
Así que (creo) la solución, para lograr que al escribir en un TextBox se muestre una lista dinámica, pasa por usar una ventana o formulario flotante que se muestre al momento de hacer click en el control.
Acá podes ver como funciona TextList, mas o menos de forma aceptable, pero le falta pulir todavía y ademas no funciona bien cuando el TextBox esta entre medio de otros.

[Imagen: eomwzBQ.mp4]

1 Saludo.
Shordi   02-12-2022, 12:00
#4
Cita:Así que (creo) la solución, para lograr que al escribir en un TextBox se muestre una lista dinámica, pasa por usar una ventana o formulario flotante que se muestre al momento de hacer click en el control.
Si le echas un vistazo al código de ComboSeek, que es el mismo que combobox con las variaciones que yo añadí, verás que eso es exactamente lo que hace el control y lo que hace combobox, a saber: abre el formulario FComboSeekPopup donde se muestra la lista.

No hay otra solución para ese problema mientras se utilicen los controles estándar de las librerías gtk y qt y los manejadores de ventanas. Supongo que si programas tu propia interfaz sí, pero eso es entrar en otro universo con el que coqueteé en el programa gbAmp... y del que salí no demasiado bien parado.

Saludos

Cita:yo también intente primero usar un combobox y finalmente lo descarte porque no logre hacer funcionar bien el filtro de la lista mientras escribís, shordi con comboseek es el que mejor logro este efecto, pero si usas GTK no termina de funcionar bien.
Efectivamente GTK es un problema... que no hay por qué usar. Cierto que nuestro sistema puede utilizar un entorno de escritorio basado en GTK, pero nuestros programas no tienen por qué hacerlo también si son compilados para QT o utilizamos en la versión QT del IDE... a no ser que las librerías de QT no existan en el sistema, cosa que hasta ahora nunca he visto.

Saludos.
Última modificación: 02-12-2022, 12:03 por Shordi.

No podemos regresar
ferchobahia   03-12-2022, 17:59
#5
(01-12-2022, 20:06)Shordi escribió: Bienvenido a la comunidad y es un placer ver que la familia crece... aunque sea de a poquito Big Grin Big Grin

A lo mejor te interesa lo que se habló en este hilo:
https://gambas-es.org/showthread.php?tid=922

Es un control heredado de combobox que hice hace unos meses y que busca en la lista de una manera más "racional" que la que ahora lleva (a mi pobre entender, que como soy el autor qué te voy a contar Cool ) Las diferencias fundamentales son que al poder ir viendo qué estás tecleando puedes corregir errores y demás. El incoveniente lo tienes en el modo readOnly, que prácticamente desaparece porque, qué diablos, hay que teclear. Queda a tu programa el controlar que el resultado tecleado/encontrado sea un elemento válido de la lista.

Gracias Shordi por tomarte el tiempo de responder y por el codico compartido; le voy a pegar una mirada por ahi es mi solucion, pero no queria complicarme con hacer o modificar cosas hechas para que se ajusten a mi uso y por ahi como Gambas no dispone de muchos usuarios ni de buena ayuda por ahi era alguna propiedad que no encontraba del combobox, pero veo que tengo que meter mano

 
(01-12-2022, 22:31)tincho escribió: Hola Fernando, bienvenido al foro, 
(01-12-2022, 18:27)ferchobahia escribió: ... soy Fernando ... a mis 50 años fue empezar ... mudar todo lo que uso a Linux... 
......no es un ComboBox, que es lo que estas buscando, peeeeero yo también intente primero usar un combobox y finalmente lo descarte porque no logre hacer funcionar bien el filtro de la lista mientras escribís, shordi con comboseek es el que mejor logro este efecto, pero si usas GTK no termina de funcionar bien.
Así que (creo) la solución, para lograr que al escribir en un TextBox se muestre una lista dinámica, pasa por usar una ventana o formulario flotante que se muestre al momento de hacer click en el control.
Acá podes ver como funciona TextList, mas o menos de forma aceptable, pero le falta pulir todavía y ademas no funciona bien cuando el TextBox esta entre medio de otros.

[Imagen: eomwzBQ.mp4]

gracias tincho por tu aporte, es verdad ya me di cuenta que Gambas con GTK no se lleva bien y tambien me di cuenta que QT no se lleva bien con los temas oscuros (hace cosas raras y para muchos controles el evento click se transforma en doble click y ni te digo del doble... o si usas una imagen invierte los colores, te vuelve loco) asi que como regla general programo para QT5 con entorno claro y listo es un poco salomonico pero es lo que hay
Shordi   03-12-2022, 18:38
#6
Cita:o si usas una imagen invierte los colores,
Para evitar eso el truco es cargar la imagen vía código, entonces va fetén.


Saludos

No podemos regresar
ferchobahia   06-12-2022, 01:14
#7
(03-12-2022, 18:38)Shordi escribió:
Cita:o si usas una imagen invierte los colores,
Para evitar eso el truco es cargar la imagen vía código, entonces va fetén.


Saludos

ok yo los cargo asi por codigo pero sigue sin funcionar 
Código:
Image1.Picture = Picture[Camino & Nombre2]
donde Camino es la carpeta y el Nombre2 es el jpg 
no se si hay otra manera

y estuve probando tu control ComboSeek y la verdad que esta muy bueno y lo voy a implementar en mi proyecto con tu permiso, claro. si sos tan amable Shordi cual es la mejor manera de importar el control, yo normalmente copio la carpeta con todas las clases y lo uso así pero no se si hay una mejor manera

gracias por todo
Shordi   06-12-2022, 19:06
#8
(06-12-2022, 01:14)ferchobahia escribió:
(03-12-2022, 18:38)Shordi escribió: Para evitar eso el truco es cargar la imagen vía código, entonces va fetén.


Saludos

ok yo los cargo asi por codigo pero sigue sin funcionar 
Código:
Image1.Picture = Picture[Camino & Nombre2]
donde Camino es la carpeta y el Nombre2 es el jpg 
no se si hay otra manera
Eso no es totalmente correcto. Debes usar el método load de la clase Picture así:

Código:
Si lo que pretendes, en cambio es utilizar una de las imágenes del stock entonces debes usar la sintaxis propuesta por ti, pero con los nombres establecidos. Algo así:
[code]

También puedes acceder a las imágenes del stock con la sintaxis:

[code]

Por último recordar que si la imagen en cuestión la incluyes en la carpeta del proyecto, será compilada dentro del ejecutable y se puede cargar usando path relativos (es decir usando el proyecto como carpeta raíz). Así una imagen llamada logo.png que esté ubicada en la carpeta raíz del proyecto se mostraría con:

[code]

Sin usar ningún path.

Saludos
[hr]
[quote]
y estuve probando tu control ComboSeek y la verdad que esta muy bueno y lo voy a implementar en mi proyecto con tu permiso, claro. si sos tan amable Shordi cual es la mejor manera de importar el control, yo normalmente copio la carpeta con todas las clases y lo uso así pero no se si hay una mejor manera
[/quote]
Gracias :blush: .

La manera "profesional" de implementar controles propios es hacer un componente propio. Es decir creas un proyecto que sea un componente y lo instalas en tu máquina. A partir de ahí, sólo tienes que incluir el componente, que aparecerá en la lista de componentes de gambas en el formulario Proyecto->Propiedades del menú. (Hice [url=https://youtu.be/eCr5EOy6nxM]un video tutorial sobre el tema[/url] hace algún tiempo en mi pequeño y semi-abandonado canal de youtube.)

Las ventajas son obvias para ti en tu máquina: Está disponible para todas las aplicaciones presentes y futuras y sólo tendrás que modificar / añadir controles en un lugar.
La desventaja es que complica un poco la distribución de software por cuanto el fuente no reside en un sólo .deb (o .arm o lo que sea), si no en varios.
La solución óptima, que es la que yo utilizaba en mi ambiente profesional, es montar un repositorio propio que incluya ese/os componente/s y tu programa/s. Requiere disponer de una ubicación en internet (o en el servidor local si sólo funcionas en ambiente LAN) donde montarlo, claro. Creo recordar haber subido información sobre el tema en el foro, aunque no recuerdo en qué hilo.

Otra manera de hacerlo más "de andar por casa" es utilizar enlaces simbólicos que ofrece el S.O.
Así si tu proyecto contenedor reside en  "~/Gambas3/MisUtilidades" y se llama "Controles" y contiene el control "Comboseek", sólo tienes que crear un proyecto nuevo (pongamos "Proyecto1"), abrir una consola y teclear:

[code]#Nos ubicamos en nuestro proyecto
cd ~/Gambas3/Proyecto1/.src
#creamos un enlace simbólico a la carpeta del control que queremos incluir
ln -s ~/Gambas3/MisUtilidades/.src/Comboseek
#Nos ubicamos en el directorio de los iconos de los controles (si no existe lo creamos primero, claro)
cd ~/Gambas3/Proyecto1/.hidden/control
#hacemos un enlace simbólico al icono que identifica el control enlazado (siempre con el mismo nombre que el control en minúsculas y .png)
ln -s ~/Gambas3/MisUtilidades/.hidden/control/comboseek.png

Abres el IDE y podrás ver el control incluido en tu programa con sus archivos marcados como ReadOnly. Así no hay peligro de modificarlos indebidamente (ten en cuenta que pueden ser compartidos de esta manera desde varios proyectos y modificar el código en uno puede afectar a todos los demás).
Este sistema es, quizá, más sencillo para un desarrollador individual pero muy engorroso si hay varios programadores tocando el código al mismo tiempo.

Saludos
Última modificación: 06-12-2022, 19:54 por Shordi.

No podemos regresar
  
Usuarios navegando en este tema: 3 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.