Saludos:
Siento no expresarme mejor, pero lo que prentendía es que se modificara el
TStatusPanel, de forma que admitiera que através de algún evento, o por la
modificación de la Clase, se pudiera activar o desactivar la nImage, al
igual que se activa y desactiva el texto, claro que me refiero
exclusivamente a cuando se emplea para la detección del estado de las
teclas del teclado.
Respondiendo a lo que me has escrito:
"Jose F. Gimenez" <
jfgimenez@wanadoo.es> escribió en el mensaje de
noticias news:[email=
491c7418@ozsrv2.ozlan.local...]
491c7418@ozsrv2.ozlan.local...[/email]
> José Ramón,
>
>> Veamos en el formulario principal de la aplicación en el
>> InicializaForm, pongo este código y según tenga las teclas del teclado
>> activadas salen en el TStatusBar en su correspondiente TStatusPanel:
>>
>> ::oStatusBar1:aItems[6]:nImage:= IIf(GetKeyBoardState( VK_NUMLOCK ) ==
>> 1,3,0)
>> ::oStatusBar1:aItems[5]:nImage:= IIf(GetKeyBoardState( VK_INSERT ) ==
>> 1,3,0)
>> ::oStatusBar1:aItems[4]:nImage:= IIf(GetKeyBoardState( VK_CAPITAL ) ==
>> 1,3,0)
>>
>> Ahora bien mientras la aplicación está activa, cuando activo o desactivo
>> las mismas teclas, se activa o desactiva el texto que pone, pero no puedo
>> hacer lo mismo con la nImage, he probado a ponerlo en el evento
>> OnDrawItem de la TStatusBar, pero no hace nada, si pongo a .T. la
>> propiedad lOwnerDraw del TStatusPanel, la aplicación no responde y tengo
>> que desactivarla yo, pero en cambio si no modifico nada y no utilizo el
>> evento OnDrawItem, y le añado al formulario un TTimer y en su evento
>> OnTimer repito el codigo anterior, si consigo que se active y desactive
>> la imagen al mismo tiempo que el texto del TStatusPanel, ya se que no es
>> la forma adecuada de hacerlo, pero porque al igual que lo hace
>> automaticamente con el texto no lo puede hacer con la nImage y en mi
>> modesta opinión debe haber otra forma de hacerlo, pero yo no he dado con
>> ella, alguna idea, de otra forma de hacerlo.
>
> No sé si he conseguido entenderte. Si poniendo ese código en el evento
> OnTimer funciona bien, ¿cual es el problema?
Ninguno solo saber si hacía alguna cosa incorrecta.
>
> Ten en cuenta que si pones ese código en el OnInitialize del formulario,
> sólo se ejecuta una vez, cuando se crea el formulario.
Eso lo tengo claro.
> En cambio, el OnTimer se ejecuta cada x tiempo, y por eso cambia la
> imágen.
Eso también lo tengo claro.
>Otra posibilidad es utilizar la función SetKey() para que al pulsar una de
>esas teclas se cambie la imágen, sin necesidad de ejecutar un timer. P.ej.:
>
> SetKey( VK_NUMLOCK,, {|| ::oStatusBar1:aItems[6]:nImage:=
> IIf(GetKeyBoardState( VK_NUMLOCK ) == 1,3,0) }
>
> No obstante, esata técnica no te vale para VK_INSERT, ya que entonces
> nunca se procesaría esa tecla en los controles. Aún así, intentaremos
> cambiar el comportamiento de SetKey() para que si se retorna Nil no se
> elimine la tecla.
Creo que modificando la clase, o añadiendo algún evento, no haría falta
modificar el comportameniento de SetKey, pero eso mejor lo evaluaís
vosotros, todo esto ha venido a raiz de que algunos usuarios me han
comentado que no se endendía claramente cuando estaban activadas o
desactivadas las mayúsculas por ejemplo, (ya se que se puede decir que mire
al teclado), al no poner nada mas que la letra por eso quise añadirle una
imagen, pero claro tropecé con el problema de que no se quitaba al mismo
tiempo, en otros sistemas las letras se quedan permanentes y lo que ocurre
es que cambian de color cuando estan desactivadas o activadas.
Gracías por las molestías y por las respuestas.
>
> --
> Un saludo,
>
> José F. Giménez
>
http://www.xailer.com
>
http://www.xailer.info
>
José Ramón Castro.