sincronizar rueda de mouse y scrollbar

15/03/2007 - 01:43 por Ivan | Informe spam
hola a todos,

¿es posible sincronizar la rueda del ratón y una scrollbar de (o añadida a)
un control en un formulario creado en vba excel? en el caso que me ocupa
ahora mismo se trata de un frame que contiene un label (con un texto
bastante extenso) de un tamaño bastante mayor (de alto) que el frame, pero
si con otro control tipo listbox, o,..., fuera mas fácil, no tendría
problema (al menos de antemano) en cambiarlo.

creo recordar haber visto alguna propiedad en algún control que hace
referencia al tema, pero ahora mismo no doy con ella. Quizás fuera en VB

bueno, si podéis echarme una mano una vez mas os lo agradezco

un saludo y hasta pronto
Ivan

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
15/03/2007 - 06:41 | Informe spam
hola, Ivan !

es posible sincronizar la rueda del raton y una scrollbar de (o a#adida a) un control en un formulario creado en vba excel?
en el caso que me ocupa ahora mismo se trata de un frame que contiene un label (con un texto bastante extenso) [...]



[requiere de excel 2000 o superior]
-> http://www.enhanceddatasystems.com/...crolls.htm

saludos,
hector.
Respuesta Responder a este mensaje
#2 Ivan
15/03/2007 - 13:01 | Informe spam
hola, Hector Miguel, muchas gracias de nuevo

le estoy echando un ojo a la pagina, y en cuanto lo pruebe/traduzca te
comento alguna duda que ya me va surgiendo

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#3 Ivan
16/03/2007 - 04:36 | Informe spam
hola de nuevo Hector Miguel,

ya he conseguido adaptar el codigo del enlace (provisionalmente) a su
uso con el frame y parece ir bien, aunque no acabo de captar del todo
como se 'pasa la cantidad de giro' de la rueda, ni el alcance del
posible riesgo que parecen indicar las advertencias del autor.

en cuanto a la 'cantidad' de giro y su equivalencia/proporcion con las
'medidas/desplazamiento' de los controles, supongo que es cuestion de
seguir dandole 'vueltas', o, en su defecto, resignarse a usarlo sin
entenderlo

pero en cuanto al posible riesgo en el uso de los codigos, si te
agradeceria, si tienes tiempo, que me aclararas hasta que punto existe
y en que consiste, si es que no se trata tan solo de un temor
amplificado por mi precario ingles.

por otro lado, y respecto a esto ->

[requiere de excel 2000 o superior]



supongo que el posible error en caso ser inferior viene previsto en
esta parte del procedimiento 'GetFromHandle' ->

strClassName = IIf(Val(Application.Version) > 8, "ThunderDFrame", _
"ThunderXFrame") & vbNullChar

y que en caso de instalar el archivo en una version inferior, esto
evitaria que diera error y se pudiera trabajar (sin rueda) normalmente
¿o puede surgir algun problema en estos casos?

Bueno, en cualquier caso muchas gracias de nuevo, todavia me queda
darle unas cuantas vueltas y adaptarlo a lo que quiero, pero resulta
bastante entretenido/interesante.

al final te pongo el fragmento que he añadio para el frame en el
codigo original por si vieras alguna pega

un saludo y hasta pronto
Ivan

en el procedimiento 'WheelHandlerOriginal' he añadido / modificado
esto->

If TypeOf ctlName Is msForms.ListBox Then





por esto ->

If TypeOf ctlName Is msForms.ListBox Or TypeOf ctlName Is msForms.Frame Then





y dentro de este condicional le he añadido, tras las instrucciones si
el control es un listbox, le he añadido esto->

If TypeOf ctlName Is msForms.ListBox Then ' esta linea es añadida
If .ListCount = 0 Then Exit Sub
lMove = IIf(bUp, -lLines, lLines
lTopIndex = .TopIndex + lMove
If lTopIndex < 0 Then
lTopIndex = 0
ElseIf lTopIndex > .ListCount - (.Height / 10) + 2 Then
lTopIndex = .TopIndex
End If
.TopIndex = lTopIndex
Exit Sub
ElseIf TypeOf ctlName Is msForms.Frame Then ' a partir de aqui
tambien
lMove = IIf(bUp, -lLines, lLines)
lTopIndex = .ScrollTop + lMove
If lTopIndex < 0 Then
lTopIndex = 0
ElseIf lTopIndex > .ScrollHeight - (.Height / 10) + 2 Then
lTopIndex = .ScrollTop
End If
.ScrollTop = lTopIndex
Exit Sub
End If

gracias de nuevo y un saludo
Respuesta Responder a este mensaje
#4 Héctor Miguel
16/03/2007 - 07:07 | Informe spam
hola, Ivan !

[en realidad] hay una 'inconsistencia' en estos 2 fragmentos del codigo utilizado en el ejemplo de la pagina:
a) IIf(Val(Application.Version) > 8, "ThunderDFrame", "ThunderXFrame") & vbNullChar
b) If TypeOf ctlName Is msForms.ListBox Or TypeOf [etc. etc. etc.]

a) la 'clase' para los formularios en excel 9 [2000] es "ThunderXFrame" y para la version 8 [97] es "ThunderDFrame"
[la comprobacion 'intenta' detectarlo a traves del Val(Application.Version) PERO...

b) TypeOf <= NO tiene soporte sino hasta VBA 6 [excel 2000], por lo que fallaria si se utiliza en VBA 5 [excel 97] :-((

por lo del tema de 'posibles riesgos'... [dejame hacer unas pruebas... hace tiempo que no practico con ese ejemplo] :))

saludos,
hector.

__ la consulta original __
... aunque no acabo de captar del todo como se 'pasa la cantidad de giro' de la rueda
ni el alcance del posible riesgo que parecen indicar las advertencias del autor.
... supongo que es cuestion de seguir dandole 'vueltas', o, en su defecto, resignarse a usarlo sin entenderlo
... en cuanto al posible riesgo en el uso de los codigos... que me aclararas hasta que punto existe y en que consiste
si es que no se trata tan solo de un temor amplificado por mi precario ingles.

por otro lado, y respecto a esto ->
[requiere de excel 2000 o superior]
supongo que el posible error en caso ser inferior viene previsto en esta parte del procedimiento 'GetFromHandle' ->
strClassName = IIf(Val(Application.Version) > 8, "ThunderDFrame", _
"ThunderXFrame") & vbNullChar
y que en caso de instalar el archivo en una version inferior, esto evitaria que diera error y se pudiera trabajar (sin rueda) normalmente
o puede surgir algun problema en estos casos? [...]
... en el procedimiento 'WheelHandlerOriginal' he añadido / modificado esto->
If TypeOf ctlName Is msForms.ListBox Then


por esto ->
If TypeOf ctlName Is msForms.ListBox Or TypeOf ctlName Is msForms.Frame Then [...]
Respuesta Responder a este mensaje
#5 Ivan
16/03/2007 - 14:46 | Informe spam
hola Hector, muchas gracias dfe nuevo

voy con un poco de prisa, y ademas lo que voy a comentar lo mismo es una
tonteria ( sobre todo porque supongo que sino ya lo hubieran usado).

¿TypeName tampoco tiene soporte para inferiores al 2000?. lo comento porque,
repasando un archivo que me envio hace poco V.Vinc, he encontrado este
codigo que expongo espero que con su venia ->


'Esta función nos buscará el controlador de ventana de una que coincida
' con su propiedad 'Caption'.
Public Function BuscarControlador(ByVal strCaption As String) As Long
Dim strClassName As String
'Primero determinamos la clase de ventana que se debe buscar,
' lo cual depende de la versión de Excel que se está ejecutando.
'La clase a buscar será "ThunderXFrame" para versiones anteriores a
Office 2000,
' y "ThunderDFrame" para la iguales o posteriores
strClassName = IIf(Application.Version < 9, "ThunderXFrame",
"ThunderDFrame")
'FindWindow nos devolverá el controlador de ventana de la primera que
coincidan ambos argumentos
BuscarControlador = FindWindow(strClassName, strCaption)
End Function

y, posterior mente (creo, no me da tiempo a repasarlo bien ahora) si hace
referncia a los controles con typeName

bueno, lo mismo estoy diciendo una de mis burradas. Ahoras tengo que salir
pitando, pero en cuanto pueda le vuelvo a echar un ojo. Sobre todo es que se
me acaba de ocurrir, pero supongo que eso ya lo habrian visto si fuera asi

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida