Harpo   18-03-2024, 21:28
#1
Saludos,

Me ha surgido un problema con el control ComboBox estándar.
Por un lado uso dos monitores, configurados para extender las pantallas, el principal y a la izquierda el secundario.

El control ComboBox usa un Form interno para mostrar los datos, y antes de mostrarlo calcula las coordenadas en pantalla. Para este cálculo utiliza la clase Screens, la cual es un array con las pantallas que hay en el sistema. Selecciona la pantalla en la cual se encuentra el control y utiliza sus propiedades para obtener la posición del Form interno del control.

La última linea de cálculo de coordenadas es esta:
Código:
If X < hScreen.AvailableX Then X = hScreen.AvailableX

El caso es que al tener dos pantallas, la principal (Screen0) y la secundaria (Screen1), en modo extendido a la izquierda, si el formulario que contiene el ComboBox está en la principal, no funciona. He escrito un pequeño programa para ver qué propiedades tienen las pantallas y este es el resultado:
[Imagen: lXQ9Erh.png]
Como se ve la propiedad AvailableX de Screen0 es 1600. Eso hace que el formulario del ComboBox no se muestre o se muestre fuera de sitio.
Uso GTK3 y lo más curioso de todo es que he probado QT5, los valores que salen son idénticos, pero si muestra bien el formulario interno del ComboBox.

Si alguien trabaja también con dos pantallas y le interesa, subo el programa y probamos.
Un saludo, Harpo.
Shordi   18-03-2024, 22:02
#2
Súbelo, que tengo por algún lado algún combobox personalizado (uno que busca en la lista según escribes, no recuerdo ahora mismo el nombre) y me interesa el tema.
Aún así yo solo utilizo Qt en mis programas. GTK solo me ha dado siempre un montón de warnings y problemas

Saludos

No podemos regresar
tincho   18-03-2024, 22:34
#3
Yo uso GTK solo para molestar a Shordi Big Grin
Pero como Gambas es QT adaptado a GTK,  este último siempre siempre esta rezagado en cuanto a su implementación en gambas.
Bien, hace tiempo uso un método que le pasas el objeto y lo centra en la pantalla en donde esta el formulario padre, pero funciona para formularios.
Tal vez lo puedas adaptar al combobox.
Código:
Static Public Sub Fix(o As Object, Optional p As Integer = 100, Optional s As Integer = -1)

  Dim x As Integer
  Dim f As Float

  x = Screen(s)

  If p > 100 Then
    f = 1.0
  Else
    If p < 1 Then
      f = 1.0
    Else
      f = p / 100
    Endif
  Endif

  o.W = Screens[x].AvailableWidth * f
  o.H = Screens[x].AvailableHeight * f
  o.x = Screens[x].AvailableX + Screens[x].AvailableWidth / 2 - o.W / 2
  o.y = Screens[x].AvailableY + Screens[x].AvailableHeight / 2 - o.H / 2

End

1 Saludo.
Shell   19-03-2024, 00:12
#4
(18-03-2024, 22:34)tincho escribió: Yo uso GTK solo para molestar a Shordi

Big Grin Big Grin

Nunca me he visto usando dos monitores. Cosas de espacio.

A propósito, se habla de un componente QT6...para Gambas. Rolleyes

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   19-03-2024, 10:36
#5
Cita:Yo uso GTK solo para molestar a Shordi Big Grin
Así, cuando subo algún código, alguien tiene que hacer piloto de pruebas y gritar indignado !No funciona!... y yo responder con una sonrisita:  ¡Prueba con QT!
Big Grin Big Grin Big Grin

Saludos

No podemos regresar
Harpo   19-03-2024, 11:21
#6
Gracias Tincho, un código interesante. Aunque en este caso tampoco funcionaría, al usar AvailableX para posicionar el objeto en pantalla en X. El valor de esa propiedad en la pantalla principal es 1600.

Shordi, subo el programa para que pueda probar, al pulsar el botón "Reload" carga las propiedades de la pantalla en la que se encuentra el formulario.

Ya me dirá que tal, un saludo.
Harpo.
Archivos adjuntos
.gz
Screens-0.0.1.tar.gz (Tamaño: 8.08 KB Descargas: 1)
Shordi   19-03-2024, 13:10
#7
Lo he probado cambiando la resolución de mi segundo monitor a 1600 y manteniendo la del primero a 1600 y a mí me funciona bien.

Moraleja: usa QT siempre. Tongue

No podemos regresar
Harpo   19-03-2024, 14:10
#8
¿Ha probado con GTK3?.
A mi con QT también me funciona.
  
Usuarios navegando en este tema: 1 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.