Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
SliderBox.Enabled = False, Pero Su SpinBox Sigue Recibiendo El Evento De La...
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje SliderBox.Enabled = False, Pero Su SpinBox Sigue Recibiendo El Evento De La Rueda Del Ratón 
 
Hola amigos,

tengo un SliderBox y hago su propiedad Enabled = False. Un SliderBox es un componente formado por un Slider y un SpinBox. Cuando establecemos su propiedad a False, el SpinBox sigue recibiendo aún así el evento de la rueda del ratón, con lo que se incrementa o decrementa el valor de dicho SpinBox y hace que deslice a izquierda o derecha el Slider...   ¿Sabéis por qué y cómo puede hacerse para que esto no ocurra?

Gracias y un saludo
 



 
Alaplancha - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: SliderBox.Enabled = False, Pero Su SpinBox Sigue Recibiendo El Evento De La Rueda Del Ratón 
 
Hola Alaplancha, que de tiempo !!!

Pues respondiendo a tu pregunta, he hecho una prueba en gambas3.9.2, y no se me da ese error el spinbox

¿que version de gambas3, estas usando? ¿puedes subir un pequeño ejemplo donde te esta dando ese problema?
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: SliderBox.Enabled = False, Pero Su SpinBox Sigue Recibiendo El Evento De La Rueda Del Ratón 
 
¡Hola jsbsan!

Sí, hace tiempo que no escribía por aquí...

Tengo la versión de gambas 3.9.2, con Manjaro 3.18.48.4. El ejemplo es de lo más sencillo: un proyecto vacío que tiene un formulario con un único SliderBox que no hace nada (es sólo para ver este comportamiento). Lo he probado con los componentes gb.qt4, gb.qt5 y gb.gui, y en los tres casos pasa igual. Teniendo la propiedad Enabled = False:

- si giro la rueda estando el cursor sobre el Slider el evento no produce ningún efecto.
- si intento mover el deslizador del Slider tampoco hace nada.
- si giro la rueda estando el cursor sobre el SpinBox el evento hace que varíe tanto el SpinBox como el Slider.

La única pista que he encontrado, pero que no entiendo muy bien, es que en la documentación de la propiedad Enabled, es decir, Control.Enabled (gb.qt4), dice: "Todos los eventos lanzados por la clase Control son eventos nativos. Tenga en cuenta que los eventos son lanzados aun si la propiedad enabled es FALSE." No lo entiendo muy bien y no sé si la causa puede estar ahí.

¡Un abrazo y gracias!
 



 
Alaplancha - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: SliderBox.Enabled = False, Pero Su SpinBox Sigue Recibiendo El Evento De La Rueda Del Ratón 
 
Citar:
¿Sabéis por qué y cómo puede hacerse para que esto no ocurra?

No sé cómo hacer que no ocurra... pero ¿qué te impide parar el evento si es enabled=false?

if not Sliderbox1.Enabled then
    stop Event
    return
endif

Más o menos...
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: SliderBox.Enabled = False, Pero Su SpinBox Sigue Recibiendo El Evento De La Rueda Del Ratón 
 
¡Hola shordi!

He probado con tu códígo:

Public Sub SliderBox1_Change()

  If SliderBox1.Enabled = False Then
    Stop Event
    Return
    Print "Hola"
  Endif

End


Con eso consigo, por ejemplo, que no se imprima Hola. Pero también se consigue si suprimo la línea de StopEvent, ya que es el Return es el que impide que siga ejecutándose el código del método...

Esa solución puede valer en algunos casos, pero no en el caso general. Supongamos que en un principio el SliderBox esta activo y el usuario cambia su valor consciente y voluntariamente y lo fija en, pongamos, 5. Más tarde, por código, desactivamos el SliderBox. El usuario lo ve ahora de un color gris clarito y se confía: ese control está desactivado, yupi. Un poco más tarde, y aún con el control "desactivado" por código, el usuario sin quererlo y sin darse cuenta pasa el cursor por encima del SliderBox y gira la rueda. El valor del SliderBox cambia sin el usuario se entere, pongamos que ahora vale 2. No se ejecuta ningún código porque lo hemos parado con ese Return, pero cuando más tarde activemos de nuevo por código el SliderBox, el usuario encontrará que no marca el valor que él había puesto, 5, sino un valor distinto, 2, que sin sin quererlo y sin darse cuenta él cambió moviendo la ruedecita dichosa... y puede que en ese momento exclame: ¡Por todas las Aristeus antennatus del Mediterráneo!  

Gracias y un abrazo
 



 
última edición por Alaplancha el Jueves, 20 Abril 2017, 10:54; editado 1 vez 
Alaplancha - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: SliderBox.Enabled = False, Pero Su SpinBox Sigue Recibiendo El Evento De La Rueda Del Ratón 
 
Ok. El control está mal diseñado, pues.
No problem, diseñamos un sliderBox propio redefiniendo el método mousewheel y todo arreglado.
Crea en tu proyecto una clase nueva que se llame, por ejemplo, miSlider y métele éste código:

Export
Inherits SliderBox

Public Const _Similar As String = "SpinBox,SliderBox"
Public Const _drawWith As String = "SliderBox"

Private obs As Observer

Public Sub _new()

   obs = New Observer(Me.Children[1]) As "Spin"
  
End

Public Sub spin_mousewheel()
    
 If Me.enabled = False Then Stop Event

End
 


Cierra tu proyecto y ábrelo otra vez para que el IDE relea los parámetros y ya está. Tendrás un control más disponible en el IDE que se comporta, ahora sí, correctamente.
 mislider
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: SliderBox.Enabled = False, Pero Su SpinBox Sigue Recibiendo El Evento De La Rueda Del Ratón 
 
Como siempre, si no te gusta eso de que aparezca en el ide como un recuadro blanco con el nombre dentro, pues le diseñas un icono y lo colocas dentro de la carpeta .hidden/control de tu proyecto. Debe ser un .png y se debe llamar como la clase (en este ejemplo mislider) pero todo en minúsculas. (Te adjunto uno, imporvisado en un momentito, que es igual que el sliderbox pero con la barra de progreso en rojo.)
Con eso el aspecto de tu IDE será éste:

 mislidericono

El iconito de marras
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: SliderBox.Enabled = False, Pero Su SpinBox Sigue Recibiendo El Evento De La Rueda Del Ratón 
 
Vaya shordi   esta es la diferencia entre tener un icono personal de un linuxjedi con espada láser verde y tener una simple plancha de las antiguas. ¡¡¡Muchas gracias!!! Funciona perfectamente

Un abrazo
 



 
Alaplancha - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: SliderBox.Enabled = False, Pero Su SpinBox Sigue Recibiendo El Evento De La Rueda Del Ratón 
 
A mandar!    
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario