In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Scroll de un browse
Scroll de un browse
Hola,
Tengo un Browse y quiero capturar el evento OnLButtonUp de la barra de scroll vertical de dicho browse y no sé cómo hacerlo. Supongo que será algo así como oBrowse:oVScrollBar:OnLButtonup := "xxx"
Por cierto, en TScrollBar no me funciona dicho evento, os mando un ejemplo donde se ve que el OnLButtonDown sí funciona, pero no el ButtonUp
Un saludico,
Fredy
--
Attached files scroll.zip (2.1 KB)Â
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Scroll de un browse
Fredy,
Me temo que no está implementado ningún evento de ese tipo en el Browse ya
que lo utiliza para si mismo.Si utilizas un DBBrowse siempre puedes capturar
el evento en el DataSet. En caso contrario, dimelo, y veré lo que se puede
hacer.
Xailer no tiene dos objetos TScrollbar por cada control. Si te fijas en un
TImage veras que todos los eventos de scroll son del propio control y no de
ningún TScrollbar. Si fuera necesario se podrían poner esos mismos eventos
en TBrowse pero preferiría no hacerlo ya que de por si tiene un montón de
eventos y añadirle todos los de scroll lateral y vertical puede que resulte
demasiado.
En cuanto al bug de que no se dispara el lButtonUp lo voy a mirar y te
cuento.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Fredy" <fredy@aglsl.com> escribió en el mensaje
news:[email=a20b86f31fb78c90c5b77a67420@news.xailer.com...]a20b86f31fb78c90c5b77a67420@news.xailer.com...[/email]
Hola,
Tengo un Browse y quiero capturar el evento OnLButtonUp de la barra de
scroll vertical de dicho browse y no sé cómo hacerlo. Supongo que será algo
así como oBrowse:oVScrollBar:OnLButtonup := "xxx"
Por cierto, en TScrollBar no me funciona dicho evento, os mando un ejemplo
donde se ve que el OnLButtonDown sí funciona, pero no el ButtonUp
Un saludico,
Fredy
Me temo que no está implementado ningún evento de ese tipo en el Browse ya
que lo utiliza para si mismo.Si utilizas un DBBrowse siempre puedes capturar
el evento en el DataSet. En caso contrario, dimelo, y veré lo que se puede
hacer.
Xailer no tiene dos objetos TScrollbar por cada control. Si te fijas en un
TImage veras que todos los eventos de scroll son del propio control y no de
ningún TScrollbar. Si fuera necesario se podrían poner esos mismos eventos
en TBrowse pero preferiría no hacerlo ya que de por si tiene un montón de
eventos y añadirle todos los de scroll lateral y vertical puede que resulte
demasiado.
En cuanto al bug de que no se dispara el lButtonUp lo voy a mirar y te
cuento.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Fredy" <fredy@aglsl.com> escribió en el mensaje
news:[email=a20b86f31fb78c90c5b77a67420@news.xailer.com...]a20b86f31fb78c90c5b77a67420@news.xailer.com...[/email]
Hola,
Tengo un Browse y quiero capturar el evento OnLButtonUp de la barra de
scroll vertical de dicho browse y no sé cómo hacerlo. Supongo que será algo
así como oBrowse:oVScrollBar:OnLButtonup := "xxx"
Por cierto, en TScrollBar no me funciona dicho evento, os mando un ejemplo
donde se ve que el OnLButtonDown sí funciona, pero no el ButtonUp
Un saludico,
Fredy
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Scroll de un browse
Hola,
> Fredy,
>
> Me temo que no está implementado ningún evento de ese tipo en el
> Browse ya que lo utiliza para si mismo.Si utilizas un DBBrowse siempre
> puedes capturar el evento en el DataSet. En caso contrario, dimelo, y
> veré lo que se puede hacer.
Te cuento lo que necesito, a ver si tienes una idea mejor o te convenzo para
cambiarlo
- El usuario recorre el browse y cada vez que cambia de registro tengo que
lanzar un determinado proceso que tarda varios segundos en ejecutarse.
El problema es que si utilizo el onchange del browse y al usuario se le queda
"pegado" el dedico en el ratón haciendo un scroll, me lanza el proceso cada
vez que cambia de registro. Si controlo el buttonup, puedo decirle que me
calcule los datos no cuando cambio de registro, sino cuando suelto el botón
del ratón, esto es, es como si ejecuto el onchange pero no para cada registro,
sino sólo para el último.
Con el teclado sí que lo puedo controlar mediante onkeyup y aunque uno se
quede con el dedo pegado bajando 5000 registros solo me hace el cálculo con
el último registro en el que he soltado el teclado en lugar de hacerlo 5000
veces (a 3 segundo de cálculo por registro, ahorro al usuario 4 horas y media
;)), pero con el ratón, me falta el acceso al evento OnLButtonUp del scroll.
>Si fuera necesario se podrían poner esos mismos eventos en TBrowse pero
preferiría no hacerlo ya que de por si tiene un montón de
>eventos y añadirle todos los de scroll lateral y vertical puede que resulte
demasiado.
Realmente lo que necesito es saber cuando el usuario deja de desplazarse
dentro del scroll, con el lbuttonup tengo de sobra.
Un saludico,
Fredy
> Fredy,
>
> Me temo que no está implementado ningún evento de ese tipo en el
> Browse ya que lo utiliza para si mismo.Si utilizas un DBBrowse siempre
> puedes capturar el evento en el DataSet. En caso contrario, dimelo, y
> veré lo que se puede hacer.
Te cuento lo que necesito, a ver si tienes una idea mejor o te convenzo para
cambiarlo

- El usuario recorre el browse y cada vez que cambia de registro tengo que
lanzar un determinado proceso que tarda varios segundos en ejecutarse.
El problema es que si utilizo el onchange del browse y al usuario se le queda
"pegado" el dedico en el ratón haciendo un scroll, me lanza el proceso cada
vez que cambia de registro. Si controlo el buttonup, puedo decirle que me
calcule los datos no cuando cambio de registro, sino cuando suelto el botón
del ratón, esto es, es como si ejecuto el onchange pero no para cada registro,
sino sólo para el último.
Con el teclado sí que lo puedo controlar mediante onkeyup y aunque uno se
quede con el dedo pegado bajando 5000 registros solo me hace el cálculo con
el último registro en el que he soltado el teclado en lugar de hacerlo 5000
veces (a 3 segundo de cálculo por registro, ahorro al usuario 4 horas y media
;)), pero con el ratón, me falta el acceso al evento OnLButtonUp del scroll.
>Si fuera necesario se podrían poner esos mismos eventos en TBrowse pero
preferiría no hacerlo ya que de por si tiene un montón de
>eventos y añadirle todos los de scroll lateral y vertical puede que resulte
demasiado.
Realmente lo que necesito es saber cuando el usuario deja de desplazarse
dentro del scroll, con el lbuttonup tengo de sobra.
Un saludico,
Fredy
Scroll de un browse
Fredy,
El mismo problema tengo yo en un Browse que al vento OnChange le mando
refrescar 3 browses mas y tarda unons segundillos en refrescar... pero no he
sabido como hacerlo para saltar ese inconveniente.
Si puedes hacerme unos pinzelazos de como lo tienes y como puedo arreglar
como mínimo con el teclado... pues siempre hay quien se queda "pegado" a la
flechita arriba/abajo para queder colgarte el programa... y luego hecharte
en cara que se queda el programa amormao!!!
Te lo agradezco de antemano.
Un Saludo,
Xevi.
"Fredy" <fredy@aglsl.com> escribió en el mensaje
news:[email=a20b86f320028c90c70ceed99f6@news.xailer.com...]a20b86f320028c90c70ceed99f6@news.xailer.com...[/email]
> Hola,
>
>> Fredy,
>>
>> Me temo que no está implementado ningún evento de ese tipo en el
>> Browse ya que lo utiliza para si mismo.Si utilizas un DBBrowse siempre
>> puedes capturar el evento en el DataSet. En caso contrario, dimelo, y
>> veré lo que se puede hacer.
>
>
> Te cuento lo que necesito, a ver si tienes una idea mejor o te convenzo
> para cambiarlo
>
> - El usuario recorre el browse y cada vez que cambia de registro tengo que
> lanzar un determinado proceso que tarda varios segundos en ejecutarse.
>
> El problema es que si utilizo el onchange del browse y al usuario se le
> queda "pegado" el dedico en el ratón haciendo un scroll, me lanza el
> proceso cada vez que cambia de registro. Si controlo el buttonup, puedo
> decirle que me calcule los datos no cuando cambio de registro, sino cuando
> suelto el botón del ratón, esto es, es como si ejecuto el onchange pero
> no para cada registro, sino sólo para el último.
>
> Con el teclado sí que lo puedo controlar mediante onkeyup y aunque uno se
> quede con el dedo pegado bajando 5000 registros solo me hace el cálculo
> con el último registro en el que he soltado el teclado en lugar de hacerlo
> 5000 veces (a 3 segundo de cálculo por registro, ahorro al usuario 4 horas
> y media
), pero con el ratón, me falta el acceso al evento OnLButtonUp
> del scroll.
>
>>Si fuera necesario se podrían poner esos mismos eventos en TBrowse pero
> preferiría no hacerlo ya que de por si tiene un montón de
>>eventos y añadirle todos los de scroll lateral y vertical puede que
>>resulte
> demasiado.
>
> Realmente lo que necesito es saber cuando el usuario deja de desplazarse
> dentro del scroll, con el lbuttonup tengo de sobra.
>
> Un saludico,
> Fredy
>
>
>
El mismo problema tengo yo en un Browse que al vento OnChange le mando
refrescar 3 browses mas y tarda unons segundillos en refrescar... pero no he
sabido como hacerlo para saltar ese inconveniente.
Si puedes hacerme unos pinzelazos de como lo tienes y como puedo arreglar
como mínimo con el teclado... pues siempre hay quien se queda "pegado" a la
flechita arriba/abajo para queder colgarte el programa... y luego hecharte
en cara que se queda el programa amormao!!!
Te lo agradezco de antemano.
Un Saludo,
Xevi.
"Fredy" <fredy@aglsl.com> escribió en el mensaje
news:[email=a20b86f320028c90c70ceed99f6@news.xailer.com...]a20b86f320028c90c70ceed99f6@news.xailer.com...[/email]
> Hola,
>
>> Fredy,
>>
>> Me temo que no está implementado ningún evento de ese tipo en el
>> Browse ya que lo utiliza para si mismo.Si utilizas un DBBrowse siempre
>> puedes capturar el evento en el DataSet. En caso contrario, dimelo, y
>> veré lo que se puede hacer.
>
>
> Te cuento lo que necesito, a ver si tienes una idea mejor o te convenzo
> para cambiarlo

>
> - El usuario recorre el browse y cada vez que cambia de registro tengo que
> lanzar un determinado proceso que tarda varios segundos en ejecutarse.
>
> El problema es que si utilizo el onchange del browse y al usuario se le
> queda "pegado" el dedico en el ratón haciendo un scroll, me lanza el
> proceso cada vez que cambia de registro. Si controlo el buttonup, puedo
> decirle que me calcule los datos no cuando cambio de registro, sino cuando
> suelto el botón del ratón, esto es, es como si ejecuto el onchange pero
> no para cada registro, sino sólo para el último.
>
> Con el teclado sí que lo puedo controlar mediante onkeyup y aunque uno se
> quede con el dedo pegado bajando 5000 registros solo me hace el cálculo
> con el último registro en el que he soltado el teclado en lugar de hacerlo
> 5000 veces (a 3 segundo de cálculo por registro, ahorro al usuario 4 horas
> y media

> del scroll.
>
>>Si fuera necesario se podrían poner esos mismos eventos en TBrowse pero
> preferiría no hacerlo ya que de por si tiene un montón de
>>eventos y añadirle todos los de scroll lateral y vertical puede que
>>resulte
> demasiado.
>
> Realmente lo que necesito es saber cuando el usuario deja de desplazarse
> dentro del scroll, con el lbuttonup tengo de sobra.
>
> Un saludico,
> Fredy
>
>
>
Scroll de un browse
Hola Xevi,
Tan sólo tienes que utilizar los eventos OnkeyUp y OnlButtonUp en lugar de
OnChange. Si quieres afinar más, puedes controlar en el OnKeyUp que la tecla
pulsada sea flecha arriba/abajo y lanzar el proceso sólo cuando se trata
de esas flechas.
Los eventos On...Up se ejecutan cuando el usuario "suelta" la tecla o el
botón del ratón.
Un saludico,
Fredy
Tan sólo tienes que utilizar los eventos OnkeyUp y OnlButtonUp en lugar de
OnChange. Si quieres afinar más, puedes controlar en el OnKeyUp que la tecla
pulsada sea flecha arriba/abajo y lanzar el proceso sólo cuando se trata
de esas flechas.
Los eventos On...Up se ejecutan cuando el usuario "suelta" la tecla o el
botón del ratón.
Un saludico,
Fredy
Scroll de un browse
Hola,
Otra cosa que me pasa:
Las teclas flechas de cursor no me disparan el onkeydown, pero en cambio sí que disparan el onkeyup
En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las teclas salvo las del cursor, avance y retroceso de página, inicio y final
¿alguna razón para ello?
Un saludico
Fredy
--
Attached files scroll2.zip (1.7 KB)Â
Otra cosa que me pasa:
Las teclas flechas de cursor no me disparan el onkeydown, pero en cambio sí que disparan el onkeyup
En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las teclas salvo las del cursor, avance y retroceso de página, inicio y final
¿alguna razón para ello?
Un saludico
Fredy
--
Attached files scroll2.zip (1.7 KB)Â
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Scroll de un browse
Fredy,
Arreglado. Adjunto el módulo corregido.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Fredy" <fredy@aglsl.com> escribió en el mensaje
news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
Hola,
Otra cosa que me pasa:
Las teclas flechas de cursor no me disparan el onkeydown, pero en cambio sí
que disparan el onkeyup
En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
teclas salvo las del cursor, avance y retroceso de página, inicio y final
¿alguna razón para ello?
Un saludico
Fredy
Attached files Browse.rar (18.2 KB)Â
Arreglado. Adjunto el módulo corregido.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Fredy" <fredy@aglsl.com> escribió en el mensaje
news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
Hola,
Otra cosa que me pasa:
Las teclas flechas de cursor no me disparan el onkeydown, pero en cambio sí
que disparan el onkeyup
En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
teclas salvo las del cursor, avance y retroceso de página, inicio y final
¿alguna razón para ello?
Un saludico
Fredy
Attached files Browse.rar (18.2 KB)Â
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Scroll de un browse
Fredy,
Hemos estado investigando el problema y me temo que otra vez más es un
comportamiento erroneo del control nativo de Windows. Puedes comprobar lo
que te digo simplemente haciendo que retorne 0 el método
ScrollBar1LButtonDown(). En dicho caso el comportamiento del control es
errático pues le decimos al control que no procese la pulsación de ratón,
pero en dicho caso podrás comprobar que si se dispara correctamente el
lButtonUp.
En fin, vamos a intentar encontrar un 'workaround' y te comento.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Fredy" <fredy@aglsl.com> escribió en el mensaje
news:[email=a20b86f320028c90c70ceed99f6@news.xailer.com...]a20b86f320028c90c70ceed99f6@news.xailer.com...[/email]
> Hola,
>
>> Fredy,
>>
>> Me temo que no está implementado ningún evento de ese tipo en el
>> Browse ya que lo utiliza para si mismo.Si utilizas un DBBrowse siempre
>> puedes capturar el evento en el DataSet. En caso contrario, dimelo, y
>> veré lo que se puede hacer.
>
>
> Te cuento lo que necesito, a ver si tienes una idea mejor o te convenzo
> para cambiarlo
>
> - El usuario recorre el browse y cada vez que cambia de registro tengo que
> lanzar un determinado proceso que tarda varios segundos en ejecutarse.
>
> El problema es que si utilizo el onchange del browse y al usuario se le
> queda "pegado" el dedico en el ratón haciendo un scroll, me lanza el
> proceso cada vez que cambia de registro. Si controlo el buttonup, puedo
> decirle que me calcule los datos no cuando cambio de registro, sino cuando
> suelto el botón del ratón, esto es, es como si ejecuto el onchange pero
> no para cada registro, sino sólo para el último.
>
> Con el teclado sí que lo puedo controlar mediante onkeyup y aunque uno se
> quede con el dedo pegado bajando 5000 registros solo me hace el cálculo
> con el último registro en el que he soltado el teclado en lugar de hacerlo
> 5000 veces (a 3 segundo de cálculo por registro, ahorro al usuario 4 horas
> y media
), pero con el ratón, me falta el acceso al evento OnLButtonUp
> del scroll.
>
>>Si fuera necesario se podrían poner esos mismos eventos en TBrowse pero
> preferiría no hacerlo ya que de por si tiene un montón de
>>eventos y añadirle todos los de scroll lateral y vertical puede que
>>resulte
> demasiado.
>
> Realmente lo que necesito es saber cuando el usuario deja de desplazarse
> dentro del scroll, con el lbuttonup tengo de sobra.
>
> Un saludico,
> Fredy
>
>
>
Hemos estado investigando el problema y me temo que otra vez más es un
comportamiento erroneo del control nativo de Windows. Puedes comprobar lo
que te digo simplemente haciendo que retorne 0 el método
ScrollBar1LButtonDown(). En dicho caso el comportamiento del control es
errático pues le decimos al control que no procese la pulsación de ratón,
pero en dicho caso podrás comprobar que si se dispara correctamente el
lButtonUp.
En fin, vamos a intentar encontrar un 'workaround' y te comento.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Fredy" <fredy@aglsl.com> escribió en el mensaje
news:[email=a20b86f320028c90c70ceed99f6@news.xailer.com...]a20b86f320028c90c70ceed99f6@news.xailer.com...[/email]
> Hola,
>
>> Fredy,
>>
>> Me temo que no está implementado ningún evento de ese tipo en el
>> Browse ya que lo utiliza para si mismo.Si utilizas un DBBrowse siempre
>> puedes capturar el evento en el DataSet. En caso contrario, dimelo, y
>> veré lo que se puede hacer.
>
>
> Te cuento lo que necesito, a ver si tienes una idea mejor o te convenzo
> para cambiarlo

>
> - El usuario recorre el browse y cada vez que cambia de registro tengo que
> lanzar un determinado proceso que tarda varios segundos en ejecutarse.
>
> El problema es que si utilizo el onchange del browse y al usuario se le
> queda "pegado" el dedico en el ratón haciendo un scroll, me lanza el
> proceso cada vez que cambia de registro. Si controlo el buttonup, puedo
> decirle que me calcule los datos no cuando cambio de registro, sino cuando
> suelto el botón del ratón, esto es, es como si ejecuto el onchange pero
> no para cada registro, sino sólo para el último.
>
> Con el teclado sí que lo puedo controlar mediante onkeyup y aunque uno se
> quede con el dedo pegado bajando 5000 registros solo me hace el cálculo
> con el último registro en el que he soltado el teclado en lugar de hacerlo
> 5000 veces (a 3 segundo de cálculo por registro, ahorro al usuario 4 horas
> y media

> del scroll.
>
>>Si fuera necesario se podrían poner esos mismos eventos en TBrowse pero
> preferiría no hacerlo ya que de por si tiene un montón de
>>eventos y añadirle todos los de scroll lateral y vertical puede que
>>resulte
> demasiado.
>
> Realmente lo que necesito es saber cuando el usuario deja de desplazarse
> dentro del scroll, con el lbuttonup tengo de sobra.
>
> Un saludico,
> Fredy
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Scroll de un browse
Ignacio,
Aprovechando la incorporación de la detección de las teclas en OnKeyDown, por lo que hasta donde nosotros podemos llegar...
Me funciona correctamente agregando una data a mi Form y activando o no el OnChange del Browse detectando cuando pulso y cuando suelto... pero desearía que formara parte de MI CLASE TBROWSE derivada... y pido vuestra ayuda y/o colaboración...
No se como se llama el evento OnChange, pues de lo que se trataría es de no lanzar OnChange hasta que suelte la tecla.
CLASS TBrowse FROM xBrowse
PUBLISHED:
Data lChange INIT .F.
METHOD WMKeyDown( nKey, nFlags, hWnd )
METHOD WMKeyUp( nKey, nFlags, hWnd )
METHOD WMChange( oSender, lBookMarkChanged )
ENDCLASS
*
**
METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .T.
RETURN 0
*
**
METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .F.
RETURN 0
*
**
METHOD WMChange( oSender, lBookMarkChanged ) CLASS TBrowse
If !::lChange
Super:WMChange( oSender, lBookMarkChanged )
EndIf
RETURN 0
Espero que se entienda mi intención.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje news:45b5daf8$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fredy,
>
> Arreglado. Adjunto el módulo corregido.
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fredy" <fredy@aglsl.com> escribió en el mensaje
> news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
> Hola,
>
> Otra cosa que me pasa:
>
> Las teclas flechas de cursor no me disparan el onkeydown, pero en cambio sí
> que disparan el onkeyup
>
>
> En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
> teclas salvo las del cursor, avance y retroceso de página, inicio y final
>
> ¿alguna razón para ello?
>
> Un saludico
> Fredy
>
>
>
--
Aprovechando la incorporación de la detección de las teclas en OnKeyDown, por lo que hasta donde nosotros podemos llegar...
Me funciona correctamente agregando una data a mi Form y activando o no el OnChange del Browse detectando cuando pulso y cuando suelto... pero desearía que formara parte de MI CLASE TBROWSE derivada... y pido vuestra ayuda y/o colaboración...
No se como se llama el evento OnChange, pues de lo que se trataría es de no lanzar OnChange hasta que suelte la tecla.
CLASS TBrowse FROM xBrowse
PUBLISHED:
Data lChange INIT .F.
METHOD WMKeyDown( nKey, nFlags, hWnd )
METHOD WMKeyUp( nKey, nFlags, hWnd )
METHOD WMChange( oSender, lBookMarkChanged )
ENDCLASS
*
**
METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .T.
RETURN 0
*
**
METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .F.
RETURN 0
*
**
METHOD WMChange( oSender, lBookMarkChanged ) CLASS TBrowse
If !::lChange
Super:WMChange( oSender, lBookMarkChanged )
EndIf
RETURN 0
Espero que se entienda mi intención.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje news:45b5daf8$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fredy,
>
> Arreglado. Adjunto el módulo corregido.
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fredy" <fredy@aglsl.com> escribió en el mensaje
> news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
> Hola,
>
> Otra cosa que me pasa:
>
> Las teclas flechas de cursor no me disparan el onkeydown, pero en cambio sí
> que disparan el onkeyup
>
>
> En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
> teclas salvo las del cursor, avance y retroceso de página, inicio y final
>
> ¿alguna razón para ello?
>
> Un saludico
> Fredy
>
>
>
--
Scroll de un browse
Venga... una ayudita !!!
Sólo me falta el método OnChange... los eventos OnKeyDown y OnKeyUp
funcionan perfectamente!!!
CLASS TBrowse FROM xBrowse
PUBLISHED:
PROPERTY lChange INIT .T.
METHOD WMKeyDown( nKey, nFlags, hWnd )
METHOD WMKeyUp( nKey, nFlags, hWnd )
METHOD WMChange( lBookMarkChanged, hWnd ) //No se como derivar este
evento
ENDCLASS
*
**
METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .F.
RETURN Super:WMKeyDown( nKey, nFlags, hWnd )
*
**
METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .T.
RETURN Super:WMKeyUp( nKey, nFlags, hWnd )
*
**
METHOD WMChange( lBookMarkChanged, hWnd ) CLASS TBrowse
MSGINFO( "Change" ) //Aqui NUNCA llega!!!
RETURN Super:WMChange( lBookMarkChanged, hWnd )
Un Saludo,
Xevi.
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:45b65fca$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
Ignacio,
Aprovechando la incorporación de la detección de las teclas en OnKeyDown,
por lo que hasta donde nosotros podemos llegar...
Me funciona correctamente agregando una data a mi Form y activando o no el
OnChange del Browse detectando cuando pulso y cuando suelto... pero desearía
que formara parte de MI CLASE TBROWSE derivada... y pido vuestra ayuda y/o
colaboración...
No se como se llama el evento OnChange, pues de lo que se trataría es de no
lanzar OnChange hasta que suelte la tecla.
CLASS TBrowse FROM xBrowse
PUBLISHED:
Data lChange INIT .F.
METHOD WMKeyDown( nKey, nFlags, hWnd )
METHOD WMKeyUp( nKey, nFlags, hWnd )
METHOD WMChange( oSender, lBookMarkChanged )
ENDCLASS
*
**
METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .T.
RETURN 0
*
**
METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .F.
RETURN 0
*
**
METHOD WMChange( oSender, lBookMarkChanged ) CLASS TBrowse
If !::lChange
Super:WMChange( oSender, lBookMarkChanged )
EndIf
RETURN 0
Espero que se entienda mi intención.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45b5daf8$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fredy,
>
> Arreglado. Adjunto el módulo corregido.
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fredy" <fredy@aglsl.com> escribió en el mensaje
> news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
> Hola,
>
> Otra cosa que me pasa:
>
> Las teclas flechas de cursor no me disparan el onkeydown, pero en cambio
> sí
> que disparan el onkeyup
>
>
> En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
> teclas salvo las del cursor, avance y retroceso de página, inicio y final
>
> ¿alguna razón para ello?
>
> Un saludico
> Fredy
>
>
>
Sólo me falta el método OnChange... los eventos OnKeyDown y OnKeyUp
funcionan perfectamente!!!
CLASS TBrowse FROM xBrowse
PUBLISHED:
PROPERTY lChange INIT .T.
METHOD WMKeyDown( nKey, nFlags, hWnd )
METHOD WMKeyUp( nKey, nFlags, hWnd )
METHOD WMChange( lBookMarkChanged, hWnd ) //No se como derivar este
evento
ENDCLASS
*
**
METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .F.
RETURN Super:WMKeyDown( nKey, nFlags, hWnd )
*
**
METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .T.
RETURN Super:WMKeyUp( nKey, nFlags, hWnd )
*
**
METHOD WMChange( lBookMarkChanged, hWnd ) CLASS TBrowse
MSGINFO( "Change" ) //Aqui NUNCA llega!!!
RETURN Super:WMChange( lBookMarkChanged, hWnd )
Un Saludo,
Xevi.
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:45b65fca$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
Ignacio,
Aprovechando la incorporación de la detección de las teclas en OnKeyDown,
por lo que hasta donde nosotros podemos llegar...
Me funciona correctamente agregando una data a mi Form y activando o no el
OnChange del Browse detectando cuando pulso y cuando suelto... pero desearía
que formara parte de MI CLASE TBROWSE derivada... y pido vuestra ayuda y/o
colaboración...
No se como se llama el evento OnChange, pues de lo que se trataría es de no
lanzar OnChange hasta que suelte la tecla.
CLASS TBrowse FROM xBrowse
PUBLISHED:
Data lChange INIT .F.
METHOD WMKeyDown( nKey, nFlags, hWnd )
METHOD WMKeyUp( nKey, nFlags, hWnd )
METHOD WMChange( oSender, lBookMarkChanged )
ENDCLASS
*
**
METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .T.
RETURN 0
*
**
METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .F.
RETURN 0
*
**
METHOD WMChange( oSender, lBookMarkChanged ) CLASS TBrowse
If !::lChange
Super:WMChange( oSender, lBookMarkChanged )
EndIf
RETURN 0
Espero que se entienda mi intención.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45b5daf8$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fredy,
>
> Arreglado. Adjunto el módulo corregido.
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fredy" <fredy@aglsl.com> escribió en el mensaje
> news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
> Hola,
>
> Otra cosa que me pasa:
>
> Las teclas flechas de cursor no me disparan el onkeydown, pero en cambio
> sí
> que disparan el onkeyup
>
>
> En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
> teclas salvo las del cursor, avance y retroceso de página, inicio y final
>
> ¿alguna razón para ello?
>
> Un saludico
> Fredy
>
>
>
Scroll de un browse
Para quien pueda interesar...
Así tengo funcionando la Clase... SOLO A FALTA de añadir la derivación del
evento OnChange...
CLASS TBrowse FROM xBrowse
PUBLISHED:
PROPERTY lChange INIT .T.
METHOD WMKeyDown( nKey, nFlags, hWnd )
METHOD WMKeyUp( nKey, nFlags, hWnd )
ENDCLASS
*
**
METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := !(nKey == VK_UP .or. nKey == VK_DOWN .or. nKey == VK_PRIOR
..or. nKey == VK_NEXT)
RETURN Super:WMKeyDown( nKey, nFlags, hWnd )
*
**
METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
If !::lChange()
::lChange := .T.
::OnChange()
EndIf
RETURN Super:WMKeyUp( nKey, nFlags, hWnd )
Y... a falta del evento WMChange...
en cada Browse que quiero "refrescar" sólo al soltar la tecla de cambio de
registro...
en el evento OnChange()
If !::oMiBrowse:lChange
Return Nil
EndIf
....
Por esta parte tendría YA totalmente arreglado el problema de "refresco
contíuo" en OnChange de Browse y múltiples "refrescos" por interacción.
Como Fredy...
Ahora a ver si puede hacerse algo para el cambio de registros PERO por la
barra Scroll.
Por lo que he notado... no sólo és al pulsar el botón de la barra Scroll,
sinó también si pulsamos dentro de la barra, por lo que como dice Fredy, con
sólo disponer de la captura del OnButtonDown y OnButtonUp de la barra scroll
del Browse... habría mas que suficiente, aplicando la misma téctica.
Un Saludo,
Xevi.
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:45b671fb$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Venga... una ayudita !!!
> Sólo me falta el método OnChange... los eventos OnKeyDown y OnKeyUp
> funcionan perfectamente!!!
>
>
> CLASS TBrowse FROM xBrowse
> PUBLISHED:
> PROPERTY lChange INIT .T.
> METHOD WMKeyDown( nKey, nFlags, hWnd )
> METHOD WMKeyUp( nKey, nFlags, hWnd )
> METHOD WMChange( lBookMarkChanged, hWnd ) //No se como derivar este
> evento
> ENDCLASS
> *
> **
> METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
> ::lChange := .F.
> RETURN Super:WMKeyDown( nKey, nFlags, hWnd )
> *
> **
> METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
> ::lChange := .T.
> RETURN Super:WMKeyUp( nKey, nFlags, hWnd )
> *
> **
> METHOD WMChange( lBookMarkChanged, hWnd ) CLASS TBrowse
> MSGINFO( "Change" ) //Aqui NUNCA llega!!!
> RETURN Super:WMChange( lBookMarkChanged, hWnd )
>
>
> Un Saludo,
> Xevi.
>
>
> "Xevi" <xevicomas@gmail.com> escribió en el mensaje
> news:45b65fca$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Ignacio,
>
> Aprovechando la incorporación de la detección de las teclas en OnKeyDown,
> por lo que hasta donde nosotros podemos llegar...
>
> Me funciona correctamente agregando una data a mi Form y activando o no el
> OnChange del Browse detectando cuando pulso y cuando suelto... pero
> desearía que formara parte de MI CLASE TBROWSE derivada... y pido vuestra
> ayuda y/o colaboración...
>
> No se como se llama el evento OnChange, pues de lo que se trataría es de
> no lanzar OnChange hasta que suelte la tecla.
>
> CLASS TBrowse FROM xBrowse
> PUBLISHED:
> Data lChange INIT .F.
>
> METHOD WMKeyDown( nKey, nFlags, hWnd )
> METHOD WMKeyUp( nKey, nFlags, hWnd )
> METHOD WMChange( oSender, lBookMarkChanged )
> ENDCLASS
> *
> **
> METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
> ::lChange := .T.
> RETURN 0
> *
> **
> METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
> ::lChange := .F.
> RETURN 0
> *
> **
> METHOD WMChange( oSender, lBookMarkChanged ) CLASS TBrowse
> If !::lChange
> Super:WMChange( oSender, lBookMarkChanged )
> EndIf
> RETURN 0
>
> Espero que se entienda mi intención.
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
> news:45b5daf8$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Fredy,
>>
>> Arreglado. Adjunto el módulo corregido.
>>
>> Un saludo
>>
>> --
>> Ignacio Ortiz de Zúñiga
>> http://www.xailer.com
>>
>>
>> "Fredy" <fredy@aglsl.com> escribió en el mensaje
>> news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
>> Hola,
>>
>> Otra cosa que me pasa:
>>
>> Las teclas flechas de cursor no me disparan el onkeydown, pero en cambio
>> sí
>> que disparan el onkeyup
>>
>>
>> En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
>> teclas salvo las del cursor, avance y retroceso de página, inicio y final
>>
>> ¿alguna razón para ello?
>>
>> Un saludico
>> Fredy
>>
>>
>>
>
>
Así tengo funcionando la Clase... SOLO A FALTA de añadir la derivación del
evento OnChange...
CLASS TBrowse FROM xBrowse
PUBLISHED:
PROPERTY lChange INIT .T.
METHOD WMKeyDown( nKey, nFlags, hWnd )
METHOD WMKeyUp( nKey, nFlags, hWnd )
ENDCLASS
*
**
METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := !(nKey == VK_UP .or. nKey == VK_DOWN .or. nKey == VK_PRIOR
..or. nKey == VK_NEXT)
RETURN Super:WMKeyDown( nKey, nFlags, hWnd )
*
**
METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
If !::lChange()
::lChange := .T.
::OnChange()
EndIf
RETURN Super:WMKeyUp( nKey, nFlags, hWnd )
Y... a falta del evento WMChange...
en cada Browse que quiero "refrescar" sólo al soltar la tecla de cambio de
registro...
en el evento OnChange()
If !::oMiBrowse:lChange
Return Nil
EndIf
....
Por esta parte tendría YA totalmente arreglado el problema de "refresco
contíuo" en OnChange de Browse y múltiples "refrescos" por interacción.
Como Fredy...
Ahora a ver si puede hacerse algo para el cambio de registros PERO por la
barra Scroll.
Por lo que he notado... no sólo és al pulsar el botón de la barra Scroll,
sinó también si pulsamos dentro de la barra, por lo que como dice Fredy, con
sólo disponer de la captura del OnButtonDown y OnButtonUp de la barra scroll
del Browse... habría mas que suficiente, aplicando la misma téctica.
Un Saludo,
Xevi.
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:45b671fb$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Venga... una ayudita !!!
> Sólo me falta el método OnChange... los eventos OnKeyDown y OnKeyUp
> funcionan perfectamente!!!
>
>
> CLASS TBrowse FROM xBrowse
> PUBLISHED:
> PROPERTY lChange INIT .T.
> METHOD WMKeyDown( nKey, nFlags, hWnd )
> METHOD WMKeyUp( nKey, nFlags, hWnd )
> METHOD WMChange( lBookMarkChanged, hWnd ) //No se como derivar este
> evento
> ENDCLASS
> *
> **
> METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
> ::lChange := .F.
> RETURN Super:WMKeyDown( nKey, nFlags, hWnd )
> *
> **
> METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
> ::lChange := .T.
> RETURN Super:WMKeyUp( nKey, nFlags, hWnd )
> *
> **
> METHOD WMChange( lBookMarkChanged, hWnd ) CLASS TBrowse
> MSGINFO( "Change" ) //Aqui NUNCA llega!!!
> RETURN Super:WMChange( lBookMarkChanged, hWnd )
>
>
> Un Saludo,
> Xevi.
>
>
> "Xevi" <xevicomas@gmail.com> escribió en el mensaje
> news:45b65fca$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Ignacio,
>
> Aprovechando la incorporación de la detección de las teclas en OnKeyDown,
> por lo que hasta donde nosotros podemos llegar...
>
> Me funciona correctamente agregando una data a mi Form y activando o no el
> OnChange del Browse detectando cuando pulso y cuando suelto... pero
> desearía que formara parte de MI CLASE TBROWSE derivada... y pido vuestra
> ayuda y/o colaboración...
>
> No se como se llama el evento OnChange, pues de lo que se trataría es de
> no lanzar OnChange hasta que suelte la tecla.
>
> CLASS TBrowse FROM xBrowse
> PUBLISHED:
> Data lChange INIT .F.
>
> METHOD WMKeyDown( nKey, nFlags, hWnd )
> METHOD WMKeyUp( nKey, nFlags, hWnd )
> METHOD WMChange( oSender, lBookMarkChanged )
> ENDCLASS
> *
> **
> METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
> ::lChange := .T.
> RETURN 0
> *
> **
> METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
> ::lChange := .F.
> RETURN 0
> *
> **
> METHOD WMChange( oSender, lBookMarkChanged ) CLASS TBrowse
> If !::lChange
> Super:WMChange( oSender, lBookMarkChanged )
> EndIf
> RETURN 0
>
> Espero que se entienda mi intención.
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
> news:45b5daf8$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Fredy,
>>
>> Arreglado. Adjunto el módulo corregido.
>>
>> Un saludo
>>
>> --
>> Ignacio Ortiz de Zúñiga
>> http://www.xailer.com
>>
>>
>> "Fredy" <fredy@aglsl.com> escribió en el mensaje
>> news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
>> Hola,
>>
>> Otra cosa que me pasa:
>>
>> Las teclas flechas de cursor no me disparan el onkeydown, pero en cambio
>> sí
>> que disparan el onkeyup
>>
>>
>> En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
>> teclas salvo las del cursor, avance y retroceso de página, inicio y final
>>
>> ¿alguna razón para ello?
>>
>> Un saludico
>> Fredy
>>
>>
>>
>
>
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Scroll de un browse
Xevi,
Esa funcionalidad que a tí te puede ser muy útil, es posible que a más de uno no le guste, pues lógicamente, por cada cambio en el browse quiere recibir un evento OnChange.
Te propongo un sistema muy simple para hacer lo que quieres:
1) Crea un timer que se dispare la acción pasado un segundo o menos
2) En la acción de dicho timer pones el código que tienes en el evento OnChange
3) En los eventos OnKeyDown y OnLButtonDown simplemente haz un reset del timer
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Xevi" <xevicomas@gmail.com> escribió en el mensaje news:45b65fca$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
Ignacio,
Aprovechando la incorporación de la detección de las teclas en OnKeyDown, por lo que hasta donde nosotros podemos llegar...
Me funciona correctamente agregando una data a mi Form y activando o no el OnChange del Browse detectando cuando pulso y cuando suelto... pero desearía que formara parte de MI CLASE TBROWSE derivada... y pido vuestra ayuda y/o colaboración...
No se como se llama el evento OnChange, pues de lo que se trataría es de no lanzar OnChange hasta que suelte la tecla.
CLASS TBrowse FROM xBrowse
PUBLISHED:
Data lChange INIT .F.
METHOD WMKeyDown( nKey, nFlags, hWnd )
METHOD WMKeyUp( nKey, nFlags, hWnd )
METHOD WMChange( oSender, lBookMarkChanged )
ENDCLASS
*
**
METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .T.
RETURN 0
*
**
METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .F.
RETURN 0
*
**
METHOD WMChange( oSender, lBookMarkChanged ) CLASS TBrowse
If !::lChange
Super:WMChange( oSender, lBookMarkChanged )
EndIf
RETURN 0
Espero que se entienda mi intención.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje news:45b5daf8$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fredy,
>
> Arreglado. Adjunto el módulo corregido.
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fredy" <fredy@aglsl.com> escribió en el mensaje
> news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
> Hola,
>
> Otra cosa que me pasa:
>
> Las teclas flechas de cursor no me disparan el onkeydown, pero en cambio sí
> que disparan el onkeyup
>
>
> En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
> teclas salvo las del cursor, avance y retroceso de página, inicio y final
>
> ¿alguna razón para ello?
>
> Un saludico
> Fredy
>
>
>
--
Esa funcionalidad que a tí te puede ser muy útil, es posible que a más de uno no le guste, pues lógicamente, por cada cambio en el browse quiere recibir un evento OnChange.
Te propongo un sistema muy simple para hacer lo que quieres:
1) Crea un timer que se dispare la acción pasado un segundo o menos
2) En la acción de dicho timer pones el código que tienes en el evento OnChange
3) En los eventos OnKeyDown y OnLButtonDown simplemente haz un reset del timer
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Xevi" <xevicomas@gmail.com> escribió en el mensaje news:45b65fca$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
Ignacio,
Aprovechando la incorporación de la detección de las teclas en OnKeyDown, por lo que hasta donde nosotros podemos llegar...
Me funciona correctamente agregando una data a mi Form y activando o no el OnChange del Browse detectando cuando pulso y cuando suelto... pero desearía que formara parte de MI CLASE TBROWSE derivada... y pido vuestra ayuda y/o colaboración...
No se como se llama el evento OnChange, pues de lo que se trataría es de no lanzar OnChange hasta que suelte la tecla.
CLASS TBrowse FROM xBrowse
PUBLISHED:
Data lChange INIT .F.
METHOD WMKeyDown( nKey, nFlags, hWnd )
METHOD WMKeyUp( nKey, nFlags, hWnd )
METHOD WMChange( oSender, lBookMarkChanged )
ENDCLASS
*
**
METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .T.
RETURN 0
*
**
METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .F.
RETURN 0
*
**
METHOD WMChange( oSender, lBookMarkChanged ) CLASS TBrowse
If !::lChange
Super:WMChange( oSender, lBookMarkChanged )
EndIf
RETURN 0
Espero que se entienda mi intención.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje news:45b5daf8$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fredy,
>
> Arreglado. Adjunto el módulo corregido.
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fredy" <fredy@aglsl.com> escribió en el mensaje
> news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
> Hola,
>
> Otra cosa que me pasa:
>
> Las teclas flechas de cursor no me disparan el onkeydown, pero en cambio sí
> que disparan el onkeyup
>
>
> En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
> teclas salvo las del cursor, avance y retroceso de página, inicio y final
>
> ¿alguna razón para ello?
>
> Un saludico
> Fredy
>
>
>
--
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Scroll de un browse
Ignacio,
creo que igual no me has entendido,...
No pretendo que la clase TBrowse tenga incorporado esta funcionalidad...
sinó que a mi me va perfecto para mi proyecto y al postear mi forma de
hacerlo no pretendo mas que compartir lo poco que puedo hacer dentro de mis
posibilidades.
Ahora bien, todavía no me has respondido mi pregunta principal de este
hilo... ¿como se llama el evento OnChange para poder sobreescribirlo???
Aunque SOLO me sirva a mi, pero solo por saber como poderle incorporar esta
funcionalidad a mi aplicación!!!
También probaré tu alternativa a utilizar un Timer,... pero para lo que
necesito, creo que me sirve como lo tengo, y si puedo, incorporar también el
evento OnChange a mi derivaión de la clase,... mejor.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45b746b1$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
Xevi,
Esa funcionalidad que a tí te puede ser muy útil, es posible que a más de
uno no le guste, pues lógicamente, por cada cambio en el browse quiere
recibir un evento OnChange.
Te propongo un sistema muy simple para hacer lo que quieres:
1) Crea un timer que se dispare la acción pasado un segundo o menos
2) En la acción de dicho timer pones el código que tienes en el evento
OnChange
3) En los eventos OnKeyDown y OnLButtonDown simplemente haz un reset del
timer
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:45b65fca$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
Ignacio,
Aprovechando la incorporación de la detección de las teclas en OnKeyDown,
por lo que hasta donde nosotros podemos llegar...
Me funciona correctamente agregando una data a mi Form y activando o no el
OnChange del Browse detectando cuando pulso y cuando suelto... pero desearía
que formara parte de MI CLASE TBROWSE derivada... y pido vuestra ayuda y/o
colaboración...
No se como se llama el evento OnChange, pues de lo que se trataría es de
no lanzar OnChange hasta que suelte la tecla.
CLASS TBrowse FROM xBrowse
PUBLISHED:
Data lChange INIT .F.
METHOD WMKeyDown( nKey, nFlags, hWnd )
METHOD WMKeyUp( nKey, nFlags, hWnd )
METHOD WMChange( oSender, lBookMarkChanged )
ENDCLASS
*
**
METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .T.
RETURN 0
*
**
METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .F.
RETURN 0
*
**
METHOD WMChange( oSender, lBookMarkChanged ) CLASS TBrowse
If !::lChange
Super:WMChange( oSender, lBookMarkChanged )
EndIf
RETURN 0
Espero que se entienda mi intención.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45b5daf8$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fredy,
>
> Arreglado. Adjunto el módulo corregido.
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fredy" <fredy@aglsl.com> escribió en el mensaje
> news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
> Hola,
>
> Otra cosa que me pasa:
>
> Las teclas flechas de cursor no me disparan el onkeydown, pero en cambio
sí
> que disparan el onkeyup
>
>
> En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
> teclas salvo las del cursor, avance y retroceso de página, inicio y
final
>
> ¿alguna razón para ello?
>
> Un saludico
> Fredy
>
>
>
creo que igual no me has entendido,...
No pretendo que la clase TBrowse tenga incorporado esta funcionalidad...
sinó que a mi me va perfecto para mi proyecto y al postear mi forma de
hacerlo no pretendo mas que compartir lo poco que puedo hacer dentro de mis
posibilidades.
Ahora bien, todavía no me has respondido mi pregunta principal de este
hilo... ¿como se llama el evento OnChange para poder sobreescribirlo???
Aunque SOLO me sirva a mi, pero solo por saber como poderle incorporar esta
funcionalidad a mi aplicación!!!
También probaré tu alternativa a utilizar un Timer,... pero para lo que
necesito, creo que me sirve como lo tengo, y si puedo, incorporar también el
evento OnChange a mi derivaión de la clase,... mejor.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45b746b1$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
Xevi,
Esa funcionalidad que a tí te puede ser muy útil, es posible que a más de
uno no le guste, pues lógicamente, por cada cambio en el browse quiere
recibir un evento OnChange.
Te propongo un sistema muy simple para hacer lo que quieres:
1) Crea un timer que se dispare la acción pasado un segundo o menos
2) En la acción de dicho timer pones el código que tienes en el evento
OnChange
3) En los eventos OnKeyDown y OnLButtonDown simplemente haz un reset del
timer
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:45b65fca$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
Ignacio,
Aprovechando la incorporación de la detección de las teclas en OnKeyDown,
por lo que hasta donde nosotros podemos llegar...
Me funciona correctamente agregando una data a mi Form y activando o no el
OnChange del Browse detectando cuando pulso y cuando suelto... pero desearía
que formara parte de MI CLASE TBROWSE derivada... y pido vuestra ayuda y/o
colaboración...
No se como se llama el evento OnChange, pues de lo que se trataría es de
no lanzar OnChange hasta que suelte la tecla.
CLASS TBrowse FROM xBrowse
PUBLISHED:
Data lChange INIT .F.
METHOD WMKeyDown( nKey, nFlags, hWnd )
METHOD WMKeyUp( nKey, nFlags, hWnd )
METHOD WMChange( oSender, lBookMarkChanged )
ENDCLASS
*
**
METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .T.
RETURN 0
*
**
METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
::lChange := .F.
RETURN 0
*
**
METHOD WMChange( oSender, lBookMarkChanged ) CLASS TBrowse
If !::lChange
Super:WMChange( oSender, lBookMarkChanged )
EndIf
RETURN 0
Espero que se entienda mi intención.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45b5daf8$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fredy,
>
> Arreglado. Adjunto el módulo corregido.
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fredy" <fredy@aglsl.com> escribió en el mensaje
> news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
> Hola,
>
> Otra cosa que me pasa:
>
> Las teclas flechas de cursor no me disparan el onkeydown, pero en cambio
sí
> que disparan el onkeyup
>
>
> En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
> teclas salvo las del cursor, avance y retroceso de página, inicio y
final
>
> ¿alguna razón para ello?
>
> Un saludico
> Fredy
>
>
>
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Scroll de un browse
Xevi,
Sino te he respondido antes es porque sencillamente no existe ningún mensaje
WMCHANGE que puedas sobrecargar, y los eventos como tales no se puede
sobrecargar, no tiene sentido.
El evento OnChange es disparado manualmente por unos cuantos métodos
internos de la clase TBrowse y no hay forma de pararlos, más que
sobreescribiendo dichos métodos. La única forma de hacerlo de una manera
fácil es que creasemos un método Change() que fuera el responsable de
ejecutar OnChange(), en dicho caso si podrías sobrecargar Change(). No
obstante creo que no tiene mucho sentido hacerlo, más aún con la forma que
te propongo de hacerlo que es bien sencilla.
Un saludo,
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:45b76c6d$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Ignacio,
>
> creo que igual no me has entendido,...
> No pretendo que la clase TBrowse tenga incorporado esta funcionalidad...
> sinó que a mi me va perfecto para mi proyecto y al postear mi forma de
> hacerlo no pretendo mas que compartir lo poco que puedo hacer dentro de
> mis posibilidades.
>
> Ahora bien, todavía no me has respondido mi pregunta principal de este
> hilo... ¿como se llama el evento OnChange para poder sobreescribirlo???
> Aunque SOLO me sirva a mi, pero solo por saber como poderle incorporar
> esta funcionalidad a mi aplicación!!!
>
> También probaré tu alternativa a utilizar un Timer,... pero para lo que
> necesito, creo que me sirve como lo tengo, y si puedo, incorporar también
> el evento OnChange a mi derivaión de la clase,... mejor.
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
> news:45b746b1$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Xevi,
>
> Esa funcionalidad que a tí te puede ser muy útil, es posible que a más de
> uno no le guste, pues lógicamente, por cada cambio en el browse quiere
> recibir un evento OnChange.
>
> Te propongo un sistema muy simple para hacer lo que quieres:
>
> 1) Crea un timer que se dispare la acción pasado un segundo o menos
> 2) En la acción de dicho timer pones el código que tienes en el evento
> OnChange
> 3) En los eventos OnKeyDown y OnLButtonDown simplemente haz un reset del
> timer
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Xevi" <xevicomas@gmail.com> escribió en el mensaje
> news:45b65fca$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Ignacio,
>
> Aprovechando la incorporación de la detección de las teclas en OnKeyDown,
> por lo que hasta donde nosotros podemos llegar...
>
> Me funciona correctamente agregando una data a mi Form y activando o no
> el OnChange del Browse detectando cuando pulso y cuando suelto... pero
> desearía que formara parte de MI CLASE TBROWSE derivada... y pido vuestra
> ayuda y/o colaboración...
>
> No se como se llama el evento OnChange, pues de lo que se trataría es de
> no lanzar OnChange hasta que suelte la tecla.
>
> CLASS TBrowse FROM xBrowse
> PUBLISHED:
> Data lChange INIT .F.
>
> METHOD WMKeyDown( nKey, nFlags, hWnd )
> METHOD WMKeyUp( nKey, nFlags, hWnd )
> METHOD WMChange( oSender, lBookMarkChanged )
> ENDCLASS
> *
> **
> METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
> ::lChange := .T.
> RETURN 0
> *
> **
> METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
> ::lChange := .F.
> RETURN 0
> *
> **
> METHOD WMChange( oSender, lBookMarkChanged ) CLASS TBrowse
> If !::lChange
> Super:WMChange( oSender, lBookMarkChanged )
> EndIf
> RETURN 0
>
> Espero que se entienda mi intención.
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
> news:45b5daf8$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> > Fredy,
> >
> > Arreglado. Adjunto el módulo corregido.
> >
> > Un saludo
> >
> > --
> > Ignacio Ortiz de Zúñiga
> > http://www.xailer.com
> >
> >
> > "Fredy" <fredy@aglsl.com> escribió en el mensaje
> > news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
> > Hola,
> >
> > Otra cosa que me pasa:
> >
> > Las teclas flechas de cursor no me disparan el onkeydown, pero en
> cambio sí
> > que disparan el onkeyup
> >
> >
> > En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
> > teclas salvo las del cursor, avance y retroceso de página, inicio y
> final
> >
> > ¿alguna razón para ello?
> >
> > Un saludico
> > Fredy
> >
> >
> >
>
Sino te he respondido antes es porque sencillamente no existe ningún mensaje
WMCHANGE que puedas sobrecargar, y los eventos como tales no se puede
sobrecargar, no tiene sentido.
El evento OnChange es disparado manualmente por unos cuantos métodos
internos de la clase TBrowse y no hay forma de pararlos, más que
sobreescribiendo dichos métodos. La única forma de hacerlo de una manera
fácil es que creasemos un método Change() que fuera el responsable de
ejecutar OnChange(), en dicho caso si podrías sobrecargar Change(). No
obstante creo que no tiene mucho sentido hacerlo, más aún con la forma que
te propongo de hacerlo que es bien sencilla.
Un saludo,
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:45b76c6d$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Ignacio,
>
> creo que igual no me has entendido,...
> No pretendo que la clase TBrowse tenga incorporado esta funcionalidad...
> sinó que a mi me va perfecto para mi proyecto y al postear mi forma de
> hacerlo no pretendo mas que compartir lo poco que puedo hacer dentro de
> mis posibilidades.
>
> Ahora bien, todavía no me has respondido mi pregunta principal de este
> hilo... ¿como se llama el evento OnChange para poder sobreescribirlo???
> Aunque SOLO me sirva a mi, pero solo por saber como poderle incorporar
> esta funcionalidad a mi aplicación!!!
>
> También probaré tu alternativa a utilizar un Timer,... pero para lo que
> necesito, creo que me sirve como lo tengo, y si puedo, incorporar también
> el evento OnChange a mi derivaión de la clase,... mejor.
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
> news:45b746b1$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Xevi,
>
> Esa funcionalidad que a tí te puede ser muy útil, es posible que a más de
> uno no le guste, pues lógicamente, por cada cambio en el browse quiere
> recibir un evento OnChange.
>
> Te propongo un sistema muy simple para hacer lo que quieres:
>
> 1) Crea un timer que se dispare la acción pasado un segundo o menos
> 2) En la acción de dicho timer pones el código que tienes en el evento
> OnChange
> 3) En los eventos OnKeyDown y OnLButtonDown simplemente haz un reset del
> timer
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Xevi" <xevicomas@gmail.com> escribió en el mensaje
> news:45b65fca$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Ignacio,
>
> Aprovechando la incorporación de la detección de las teclas en OnKeyDown,
> por lo que hasta donde nosotros podemos llegar...
>
> Me funciona correctamente agregando una data a mi Form y activando o no
> el OnChange del Browse detectando cuando pulso y cuando suelto... pero
> desearía que formara parte de MI CLASE TBROWSE derivada... y pido vuestra
> ayuda y/o colaboración...
>
> No se como se llama el evento OnChange, pues de lo que se trataría es de
> no lanzar OnChange hasta que suelte la tecla.
>
> CLASS TBrowse FROM xBrowse
> PUBLISHED:
> Data lChange INIT .F.
>
> METHOD WMKeyDown( nKey, nFlags, hWnd )
> METHOD WMKeyUp( nKey, nFlags, hWnd )
> METHOD WMChange( oSender, lBookMarkChanged )
> ENDCLASS
> *
> **
> METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
> ::lChange := .T.
> RETURN 0
> *
> **
> METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
> ::lChange := .F.
> RETURN 0
> *
> **
> METHOD WMChange( oSender, lBookMarkChanged ) CLASS TBrowse
> If !::lChange
> Super:WMChange( oSender, lBookMarkChanged )
> EndIf
> RETURN 0
>
> Espero que se entienda mi intención.
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
> news:45b5daf8$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> > Fredy,
> >
> > Arreglado. Adjunto el módulo corregido.
> >
> > Un saludo
> >
> > --
> > Ignacio Ortiz de Zúñiga
> > http://www.xailer.com
> >
> >
> > "Fredy" <fredy@aglsl.com> escribió en el mensaje
> > news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
> > Hola,
> >
> > Otra cosa que me pasa:
> >
> > Las teclas flechas de cursor no me disparan el onkeydown, pero en
> cambio sí
> > que disparan el onkeyup
> >
> >
> > En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
> > teclas salvo las del cursor, avance y retroceso de página, inicio y
> final
> >
> > ¿alguna razón para ello?
> >
> > Un saludico
> > Fredy
> >
> >
> >
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Scroll de un browse
Ignacio,
No sabía que era un método "inexistente", disculpa.
De todas formas, yo haría la petición, si no es mucho pedir, de incluir el
método Change() en TBrowse para poderlo sobrecargar.
Cada uno que le saque el rendimiento que quiera o no... de hecho el método
sólo debe lanzar OnChange y no creo que perjudique a la clase en cuestión.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:[email=45b78051@news.xailer.com...]45b78051@news.xailer.com...[/email]
> Xevi,
>
> Sino te he respondido antes es porque sencillamente no existe ningún
> mensaje WMCHANGE que puedas sobrecargar, y los eventos como tales no se
> puede sobrecargar, no tiene sentido.
>
> El evento OnChange es disparado manualmente por unos cuantos métodos
> internos de la clase TBrowse y no hay forma de pararlos, más que
> sobreescribiendo dichos métodos. La única forma de hacerlo de una manera
> fácil es que creasemos un método Change() que fuera el responsable de
> ejecutar OnChange(), en dicho caso si podrías sobrecargar Change(). No
> obstante creo que no tiene mucho sentido hacerlo, más aún con la forma que
> te propongo de hacerlo que es bien sencilla.
>
> Un saludo,
>
> "Xevi" <xevicomas@gmail.com> escribió en el mensaje
> news:45b76c6d$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Ignacio,
>>
>> creo que igual no me has entendido,...
>> No pretendo que la clase TBrowse tenga incorporado esta funcionalidad...
>> sinó que a mi me va perfecto para mi proyecto y al postear mi forma de
>> hacerlo no pretendo mas que compartir lo poco que puedo hacer dentro de
>> mis posibilidades.
>>
>> Ahora bien, todavía no me has respondido mi pregunta principal de este
>> hilo... ¿como se llama el evento OnChange para poder sobreescribirlo???
>> Aunque SOLO me sirva a mi, pero solo por saber como poderle incorporar
>> esta funcionalidad a mi aplicación!!!
>>
>> También probaré tu alternativa a utilizar un Timer,... pero para lo que
>> necesito, creo que me sirve como lo tengo, y si puedo, incorporar también
>> el evento OnChange a mi derivaión de la clase,... mejor.
>>
>> Gracias.
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:45b746b1$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Xevi,
>>
>> Esa funcionalidad que a tí te puede ser muy útil, es posible que a más de
>> uno no le guste, pues lógicamente, por cada cambio en el browse quiere
>> recibir un evento OnChange.
>>
>> Te propongo un sistema muy simple para hacer lo que quieres:
>>
>> 1) Crea un timer que se dispare la acción pasado un segundo o menos
>> 2) En la acción de dicho timer pones el código que tienes en el evento
>> OnChange
>> 3) En los eventos OnKeyDown y OnLButtonDown simplemente haz un reset del
>> timer
>>
>> Un saludo
>>
>> --
>> Ignacio Ortiz de Zúñiga
>> http://www.xailer.com
>>
>>
>> "Xevi" <xevicomas@gmail.com> escribió en el mensaje
>> news:45b65fca$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Ignacio,
>>
>> Aprovechando la incorporación de la detección de las teclas en
>> OnKeyDown, por lo que hasta donde nosotros podemos llegar...
>>
>> Me funciona correctamente agregando una data a mi Form y activando o no
>> el OnChange del Browse detectando cuando pulso y cuando suelto... pero
>> desearía que formara parte de MI CLASE TBROWSE derivada... y pido vuestra
>> ayuda y/o colaboración...
>>
>> No se como se llama el evento OnChange, pues de lo que se trataría es de
>> no lanzar OnChange hasta que suelte la tecla.
>>
>> CLASS TBrowse FROM xBrowse
>> PUBLISHED:
>> Data lChange INIT .F.
>>
>> METHOD WMKeyDown( nKey, nFlags, hWnd )
>> METHOD WMKeyUp( nKey, nFlags, hWnd )
>> METHOD WMChange( oSender, lBookMarkChanged )
>> ENDCLASS
>> *
>> **
>> METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
>> ::lChange := .T.
>> RETURN 0
>> *
>> **
>> METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
>> ::lChange := .F.
>> RETURN 0
>> *
>> **
>> METHOD WMChange( oSender, lBookMarkChanged ) CLASS TBrowse
>> If !::lChange
>> Super:WMChange( oSender, lBookMarkChanged )
>> EndIf
>> RETURN 0
>>
>> Espero que se entienda mi intención.
>>
>> Gracias.
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:45b5daf8$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> > Fredy,
>> >
>> > Arreglado. Adjunto el módulo corregido.
>> >
>> > Un saludo
>> >
>> > --
>> > Ignacio Ortiz de Zúñiga
>> > http://www.xailer.com
>> >
>> >
>> > "Fredy" <fredy@aglsl.com> escribió en el mensaje
>> > news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
>> > Hola,
>> >
>> > Otra cosa que me pasa:
>> >
>> > Las teclas flechas de cursor no me disparan el onkeydown, pero en
>> cambio sí
>> > que disparan el onkeyup
>> >
>> >
>> > En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
>> > teclas salvo las del cursor, avance y retroceso de página, inicio y
>> final
>> >
>> > ¿alguna razón para ello?
>> >
>> > Un saludico
>> > Fredy
>> >
>> >
>> >
>>
>
>
No sabía que era un método "inexistente", disculpa.
De todas formas, yo haría la petición, si no es mucho pedir, de incluir el
método Change() en TBrowse para poderlo sobrecargar.
Cada uno que le saque el rendimiento que quiera o no... de hecho el método
sólo debe lanzar OnChange y no creo que perjudique a la clase en cuestión.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:[email=45b78051@news.xailer.com...]45b78051@news.xailer.com...[/email]
> Xevi,
>
> Sino te he respondido antes es porque sencillamente no existe ningún
> mensaje WMCHANGE que puedas sobrecargar, y los eventos como tales no se
> puede sobrecargar, no tiene sentido.
>
> El evento OnChange es disparado manualmente por unos cuantos métodos
> internos de la clase TBrowse y no hay forma de pararlos, más que
> sobreescribiendo dichos métodos. La única forma de hacerlo de una manera
> fácil es que creasemos un método Change() que fuera el responsable de
> ejecutar OnChange(), en dicho caso si podrías sobrecargar Change(). No
> obstante creo que no tiene mucho sentido hacerlo, más aún con la forma que
> te propongo de hacerlo que es bien sencilla.
>
> Un saludo,
>
> "Xevi" <xevicomas@gmail.com> escribió en el mensaje
> news:45b76c6d$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Ignacio,
>>
>> creo que igual no me has entendido,...
>> No pretendo que la clase TBrowse tenga incorporado esta funcionalidad...
>> sinó que a mi me va perfecto para mi proyecto y al postear mi forma de
>> hacerlo no pretendo mas que compartir lo poco que puedo hacer dentro de
>> mis posibilidades.
>>
>> Ahora bien, todavía no me has respondido mi pregunta principal de este
>> hilo... ¿como se llama el evento OnChange para poder sobreescribirlo???
>> Aunque SOLO me sirva a mi, pero solo por saber como poderle incorporar
>> esta funcionalidad a mi aplicación!!!
>>
>> También probaré tu alternativa a utilizar un Timer,... pero para lo que
>> necesito, creo que me sirve como lo tengo, y si puedo, incorporar también
>> el evento OnChange a mi derivaión de la clase,... mejor.
>>
>> Gracias.
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:45b746b1$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Xevi,
>>
>> Esa funcionalidad que a tí te puede ser muy útil, es posible que a más de
>> uno no le guste, pues lógicamente, por cada cambio en el browse quiere
>> recibir un evento OnChange.
>>
>> Te propongo un sistema muy simple para hacer lo que quieres:
>>
>> 1) Crea un timer que se dispare la acción pasado un segundo o menos
>> 2) En la acción de dicho timer pones el código que tienes en el evento
>> OnChange
>> 3) En los eventos OnKeyDown y OnLButtonDown simplemente haz un reset del
>> timer
>>
>> Un saludo
>>
>> --
>> Ignacio Ortiz de Zúñiga
>> http://www.xailer.com
>>
>>
>> "Xevi" <xevicomas@gmail.com> escribió en el mensaje
>> news:45b65fca$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Ignacio,
>>
>> Aprovechando la incorporación de la detección de las teclas en
>> OnKeyDown, por lo que hasta donde nosotros podemos llegar...
>>
>> Me funciona correctamente agregando una data a mi Form y activando o no
>> el OnChange del Browse detectando cuando pulso y cuando suelto... pero
>> desearía que formara parte de MI CLASE TBROWSE derivada... y pido vuestra
>> ayuda y/o colaboración...
>>
>> No se como se llama el evento OnChange, pues de lo que se trataría es de
>> no lanzar OnChange hasta que suelte la tecla.
>>
>> CLASS TBrowse FROM xBrowse
>> PUBLISHED:
>> Data lChange INIT .F.
>>
>> METHOD WMKeyDown( nKey, nFlags, hWnd )
>> METHOD WMKeyUp( nKey, nFlags, hWnd )
>> METHOD WMChange( oSender, lBookMarkChanged )
>> ENDCLASS
>> *
>> **
>> METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TBrowse
>> ::lChange := .T.
>> RETURN 0
>> *
>> **
>> METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
>> ::lChange := .F.
>> RETURN 0
>> *
>> **
>> METHOD WMChange( oSender, lBookMarkChanged ) CLASS TBrowse
>> If !::lChange
>> Super:WMChange( oSender, lBookMarkChanged )
>> EndIf
>> RETURN 0
>>
>> Espero que se entienda mi intención.
>>
>> Gracias.
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:45b5daf8$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> > Fredy,
>> >
>> > Arreglado. Adjunto el módulo corregido.
>> >
>> > Un saludo
>> >
>> > --
>> > Ignacio Ortiz de Zúñiga
>> > http://www.xailer.com
>> >
>> >
>> > "Fredy" <fredy@aglsl.com> escribió en el mensaje
>> > news:[email=a20b86f3202d8c90ca0cddb8804@news.xailer.com...]a20b86f3202d8c90ca0cddb8804@news.xailer.com...[/email]
>> > Hola,
>> >
>> > Otra cosa que me pasa:
>> >
>> > Las teclas flechas de cursor no me disparan el onkeydown, pero en
>> cambio sí
>> > que disparan el onkeyup
>> >
>> >
>> > En el ejemplo que adjunto se ve cómo onkeydown funciona para todas las
>> > teclas salvo las del cursor, avance y retroceso de página, inicio y
>> final
>> >
>> > ¿alguna razón para ello?
>> >
>> > Un saludico
>> > Fredy
>> >
>> >
>> >
>>
>
>
Scroll de un browse
Fredy, Xevi,
lo he revisado por encima, y sólo se me ocurre una solución: usar el mensaje
WM_VSCROLL con el código SB_ENDSCROLL. Sería algo así:
METHOD WMVScroll( nWParam, nLParam ) CLASS TBrowse
LOCAL nRet := Super:WMVScroll( nWParam, nLParam )
IF LoWord( nWParam ) == SB_ENDSCROLL
// Ejecutar el codigo (evento) que se necesite
ENDIF
RETURN Ret
Respecto al control TScrollBar, como ya te dijo Ignacio, es el
comportamiento de windows, que tanto si es el correcto como si no, me temo
que nos lo tenemos que tragar
No obstante, creo que he encontrado un 'workaround', pero no estoy seguro de
si va a tener o no efectos secundarios:
CLASS TScrollBar FROM XScrollBar
METHOD WMCaptureChanged( nWParam ) ;
INLINE IIF( nWParam == 0, ::PostMsg( WM_LBUTTONUP ), ), Nil
ENDCLASS
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
lo he revisado por encima, y sólo se me ocurre una solución: usar el mensaje
WM_VSCROLL con el código SB_ENDSCROLL. Sería algo así:
METHOD WMVScroll( nWParam, nLParam ) CLASS TBrowse
LOCAL nRet := Super:WMVScroll( nWParam, nLParam )
IF LoWord( nWParam ) == SB_ENDSCROLL
// Ejecutar el codigo (evento) que se necesite
ENDIF
RETURN Ret
Respecto al control TScrollBar, como ya te dijo Ignacio, es el
comportamiento de windows, que tanto si es el correcto como si no, me temo
que nos lo tenemos que tragar

No obstante, creo que he encontrado un 'workaround', pero no estoy seguro de
si va a tener o no efectos secundarios:
CLASS TScrollBar FROM XScrollBar
METHOD WMCaptureChanged( nWParam ) ;
INLINE IIF( nWParam == 0, ::PostMsg( WM_LBUTTONUP ), ), Nil
ENDCLASS
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
Scroll de un browse
Xevi,
mira otra respuesta mia en este hilo.
> También probaré tu alternativa a utilizar un Timer,... pero para lo que
> necesito, creo que me sirve como lo tengo, y si puedo, incorporar también
> el evento OnChange a mi derivaión de la clase,... mejor.
La técnica del timer funciona bien. Yo la estoy usando en una situación
parecida. Y no soy el único... si usas outlook express prueba a cambiar de
carpeta en el treeview de la izquierda usando el teclado; verás que sólo se
actualiza cuando pasa aprox. 1 segundo desde que dejas de pulsar teclas.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
mira otra respuesta mia en este hilo.
> También probaré tu alternativa a utilizar un Timer,... pero para lo que
> necesito, creo que me sirve como lo tengo, y si puedo, incorporar también
> el evento OnChange a mi derivaión de la clase,... mejor.
La técnica del timer funciona bien. Yo la estoy usando en una situación
parecida. Y no soy el único... si usas outlook express prueba a cambiar de
carpeta en el treeview de la izquierda usando el teclado; verás que sólo se
actualiza cuando pasa aprox. 1 segundo desde que dejas de pulsar teclas.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
Scroll de un browse
Xevi,
> No sabía que era un método "inexistente", disculpa.
> De todas formas, yo haría la petición, si no es mucho pedir, de incluir el
> método Change() en TBrowse para poderlo sobrecargar.
> Cada uno que le saque el rendimiento que quiera o no... de hecho el método
> sólo debe lanzar OnChange y no creo que perjudique a la clase en cuestión.
Se puede hacer, y de hecho es posible que lo hagamos. Pero en este caso,
como estás sobreescribiendo tú la clase y quieres disparar el evento sólo en
dos casos concretos (por teclado y por la scrollbar) que además los estás
controlando tú, mi consejo es que te crees un nuevo evento. Vamos, basándome
en tu código:
CLASS TBrowse FROM xBrowse
PUBLISHED:
EVENT OnActualizarDatos( Self )
METHOD WMKeyUp( nKey, nFlags, hWnd )
METHOD WMVScroll( nWParam, nLParam )
ENDCLASS
*
**
METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
::OnActualizarDatos()
RETURN Super:WMKeyUp( nKey, nFlags, hWnd )
*
**
METHOD WMVScroll( nWParam, nLParam ) CLASS TBrowse
LOCAL nRet := Super:WMVScroll( nWParam, nLParam )
IF LoWord( nWParam ) == SB_ENDSCROLL
::OnActualizarDatos()
ENDIF
RETURN Ret
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
> No sabía que era un método "inexistente", disculpa.
> De todas formas, yo haría la petición, si no es mucho pedir, de incluir el
> método Change() en TBrowse para poderlo sobrecargar.
> Cada uno que le saque el rendimiento que quiera o no... de hecho el método
> sólo debe lanzar OnChange y no creo que perjudique a la clase en cuestión.
Se puede hacer, y de hecho es posible que lo hagamos. Pero en este caso,
como estás sobreescribiendo tú la clase y quieres disparar el evento sólo en
dos casos concretos (por teclado y por la scrollbar) que además los estás
controlando tú, mi consejo es que te crees un nuevo evento. Vamos, basándome
en tu código:
CLASS TBrowse FROM xBrowse
PUBLISHED:
EVENT OnActualizarDatos( Self )
METHOD WMKeyUp( nKey, nFlags, hWnd )
METHOD WMVScroll( nWParam, nLParam )
ENDCLASS
*
**
METHOD WMKeyUp( nKey, nFlags, hWnd ) CLASS TBrowse
::OnActualizarDatos()
RETURN Super:WMKeyUp( nKey, nFlags, hWnd )
*
**
METHOD WMVScroll( nWParam, nLParam ) CLASS TBrowse
LOCAL nRet := Super:WMVScroll( nWParam, nLParam )
IF LoWord( nWParam ) == SB_ENDSCROLL
::OnActualizarDatos()
ENDIF
RETURN Ret
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
Scroll de un browse
Jose,
Seguiré vuestro consejo, intentare utilizar un Timer...
Por cierto... ¿como puedo agregar un Timer en una Clase???
De ser posible...
y... ¿como utilizo sus eventos???
Pongamos que quiero derivar de XBrowse y quiero que TBrowse disponga de un
Timer con intervalo 500 y OnTimer que ponga lEnabled del timer a .F. y llame
al evento OnChange del Browse...
Estaría por incluir un Timer a la Clase TBrowse y así no tener que crearlo
en cada Form que lo necesite.
GRACIAS.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:45b8b251$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Xevi,
>
> mira otra respuesta mia en este hilo.
>
>> También probaré tu alternativa a utilizar un Timer,... pero para lo que
>> necesito, creo que me sirve como lo tengo, y si puedo, incorporar también
>> el evento OnChange a mi derivaión de la clase,... mejor.
>
> La técnica del timer funciona bien. Yo la estoy usando en una situación
> parecida. Y no soy el único... si usas outlook express prueba a cambiar de
> carpeta en el treeview de la izquierda usando el teclado; verás que sólo
> se actualiza cuando pasa aprox. 1 segundo desde que dejas de pulsar
> teclas.
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
>
Seguiré vuestro consejo, intentare utilizar un Timer...
Por cierto... ¿como puedo agregar un Timer en una Clase???
De ser posible...
y... ¿como utilizo sus eventos???
Pongamos que quiero derivar de XBrowse y quiero que TBrowse disponga de un
Timer con intervalo 500 y OnTimer que ponga lEnabled del timer a .F. y llame
al evento OnChange del Browse...
Estaría por incluir un Timer a la Clase TBrowse y así no tener que crearlo
en cada Form que lo necesite.
GRACIAS.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:45b8b251$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Xevi,
>
> mira otra respuesta mia en este hilo.
>
>> También probaré tu alternativa a utilizar un Timer,... pero para lo que
>> necesito, creo que me sirve como lo tengo, y si puedo, incorporar también
>> el evento OnChange a mi derivaión de la clase,... mejor.
>
> La técnica del timer funciona bien. Yo la estoy usando en una situación
> parecida. Y no soy el único... si usas outlook express prueba a cambiar de
> carpeta en el treeview de la izquierda usando el teclado; verás que sólo
> se actualiza cuando pasa aprox. 1 segundo desde que dejas de pulsar
> teclas.
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
>
Scroll de un browse
ENCONTRADO!!!
Reescribo el evento New y creo añado los controles como siempre...
Ya tengo funcionando el Browse con un retardo del refresco de OnChange de
250ms y todo PERFECTO!!!
También me funciona con el desplazo del Scroll Vertical... Asunto
solucionado por mi parte.
GRACIAS.
Un Saludo,
Xevi.
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:45b927c0$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Jose,
>
> Seguiré vuestro consejo, intentare utilizar un Timer...
> Por cierto... ¿como puedo agregar un Timer en una Clase???
> De ser posible...
> y... ¿como utilizo sus eventos???
> Pongamos que quiero derivar de XBrowse y quiero que TBrowse disponga de
> un Timer con intervalo 500 y OnTimer que ponga lEnabled del timer a .F. y
> llame al evento OnChange del Browse...
>
> Estaría por incluir un Timer a la Clase TBrowse y así no tener que crearlo
> en cada Form que lo necesite.
>
> GRACIAS.
>
> Un Saludo,
> Xevi.
>
>
> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
> news:45b8b251$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Xevi,
>>
>> mira otra respuesta mia en este hilo.
>>
>>> También probaré tu alternativa a utilizar un Timer,... pero para lo que
>>> necesito, creo que me sirve como lo tengo, y si puedo, incorporar
>>> también el evento OnChange a mi derivaión de la clase,... mejor.
>>
>> La técnica del timer funciona bien. Yo la estoy usando en una situación
>> parecida. Y no soy el único... si usas outlook express prueba a cambiar
>> de carpeta en el treeview de la izquierda usando el teclado; verás que
>> sólo se actualiza cuando pasa aprox. 1 segundo desde que dejas de pulsar
>> teclas.
>>
>> --
>> Un saludo,
>>
>> José F. Giménez
>> http://www.xailer.com
>> http://www.xailer.info
>>
>
>
Reescribo el evento New y creo añado los controles como siempre...
Ya tengo funcionando el Browse con un retardo del refresco de OnChange de
250ms y todo PERFECTO!!!
También me funciona con el desplazo del Scroll Vertical... Asunto
solucionado por mi parte.
GRACIAS.
Un Saludo,
Xevi.
"Xevi" <xevicomas@gmail.com> escribió en el mensaje
news:45b927c0$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Jose,
>
> Seguiré vuestro consejo, intentare utilizar un Timer...
> Por cierto... ¿como puedo agregar un Timer en una Clase???
> De ser posible...
> y... ¿como utilizo sus eventos???
> Pongamos que quiero derivar de XBrowse y quiero que TBrowse disponga de
> un Timer con intervalo 500 y OnTimer que ponga lEnabled del timer a .F. y
> llame al evento OnChange del Browse...
>
> Estaría por incluir un Timer a la Clase TBrowse y así no tener que crearlo
> en cada Form que lo necesite.
>
> GRACIAS.
>
> Un Saludo,
> Xevi.
>
>
> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
> news:45b8b251$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Xevi,
>>
>> mira otra respuesta mia en este hilo.
>>
>>> También probaré tu alternativa a utilizar un Timer,... pero para lo que
>>> necesito, creo que me sirve como lo tengo, y si puedo, incorporar
>>> también el evento OnChange a mi derivaión de la clase,... mejor.
>>
>> La técnica del timer funciona bien. Yo la estoy usando en una situación
>> parecida. Y no soy el único... si usas outlook express prueba a cambiar
>> de carpeta en el treeview de la izquierda usando el teclado; verás que
>> sólo se actualiza cuando pasa aprox. 1 segundo desde que dejas de pulsar
>> teclas.
>>
>> --
>> Un saludo,
>>
>> José F. Giménez
>> http://www.xailer.com
>> http://www.xailer.info
>>
>
>