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.

Imagen en TStatusPanel de una TStatusBar

Foro de Xailer profesional en español
jrcpoli
Posts: 240
Joined: Wed Oct 25, 2006 8:55 pm

Imagen en TStatusPanel de una TStatusBar

Postby jrcpoli » Wed Nov 12, 2008 6:06 pm

Saludos:
Tengo una TStatusBar que contiene tres TStatusPanel que coresponden a la
activación de las teclas del ordenador, teclado númerico, mayúsculas, y
insertar, lo que quiero es que además de poner las letras de las teclas
cuando estan activadas, me salga una imagen cuando se activan y se quite
cuando se desactivan, tengo las imagenes definidas en la lista de imagenes
de la TStatusBar, y se que se puede asignar dichas imagenes en TStatusPanel
poniendo el número de imagen, pero eso hace que la imagen se quede fija, y
lo que yo deseo es que cuando las letras desaperezcan cambie la imagen o
incluso y es otra opción desaparezca, alguien me puede decir como hacerlo he
probado varias cosas en OnDrawItem pero no he tenido exito.
Gracias por vuestra atención.
José Ramón Castro
José Ramón Castro.
User avatar
ignacio
Site Admin
Posts: 8562
Joined: Mon Apr 06, 2015 8:00 pm
Location: Madrid, Spain
Contact:

Imagen en TStatusPanel de una TStatusBar

Postby ignacio » Wed Nov 12, 2008 8:32 pm

José Ramón,
Me temo que esa funcionalidad no es posible, lo siento.
Un saludo,
--
Ignacio Ortiz de Zúñiga
[Soporte Xailer]
[Xailer support]
"José Ramón Castro" <jrcpoli@terra.es> escribió en el mensaje
news:491b0cee$1@ozsrv2.ozlan.local...
> Saludos:
>
> Tengo una TStatusBar que contiene tres TStatusPanel que coresponden a
> la activación de las teclas del ordenador, teclado númerico, mayúsculas, y
> insertar, lo que quiero es que además de poner las letras de las teclas
> cuando estan activadas, me salga una imagen cuando se activan y se quite
> cuando se desactivan, tengo las imagenes definidas en la lista de imagenes
> de la TStatusBar, y se que se puede asignar dichas imagenes en
> TStatusPanel poniendo el número de imagen, pero eso hace que la imagen se
> quede fija, y lo que yo deseo es que cuando las letras desaperezcan cambie
> la imagen o incluso y es otra opción desaparezca, alguien me puede decir
> como hacerlo he probado varias cosas en OnDrawItem pero no he tenido
> exito.
>
> Gracias por vuestra atención.
>
> José Ramón Castro
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
User avatar
jfgimenez
Site Admin
Posts: 5620
Joined: Mon Apr 06, 2015 8:48 pm
Contact:

Imagen en TStatusPanel de una TStatusBar

Postby jfgimenez » Wed Nov 12, 2008 9:26 pm

José Ramón,
> Tengo una TStatusBar que contiene tres TStatusPanel que coresponden a
> la activación de las teclas del ordenador, teclado númerico, mayúsculas, y
> insertar, lo que quiero es que además de poner las letras de las teclas
> cuando estan activadas, me salga una imagen cuando se activan y se quite
> cuando se desactivan, tengo las imagenes definidas en la lista de imagenes
> de la TStatusBar, y se que se puede asignar dichas imagenes en
> TStatusPanel poniendo el número de imagen, pero eso hace que la imagen se
> quede fija, y lo que yo deseo es que cuando las letras desaperezcan cambie
> la imagen o incluso y es otra opción desaparezca, alguien me puede decir
> como hacerlo he probado varias cosas en OnDrawItem pero no he tenido
> exito.
Si lo he entendido bien, lo que quieres es que la imagen que has asignado al
panel desaparezca en algún momento. Si es eso, simplemente pon la propiedad
nImage del panel a 0.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jrcpoli
Posts: 240
Joined: Wed Oct 25, 2006 8:55 pm

Imagen en TStatusPanel de una TStatusBar

Postby jrcpoli » Thu Nov 13, 2008 2:55 pm

Saludos:
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.
José Ramón Castro.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje de
noticias news:491b3c13@ozsrv2.ozlan.local...
> José Ramón,
>
>> Tengo una TStatusBar que contiene tres TStatusPanel que coresponden a
>> la activación de las teclas del ordenador, teclado númerico, mayúsculas,
>> y insertar, lo que quiero es que además de poner las letras de las teclas
>> cuando estan activadas, me salga una imagen cuando se activan y se quite
>> cuando se desactivan, tengo las imagenes definidas en la lista de
>> imagenes de la TStatusBar, y se que se puede asignar dichas imagenes en
>> TStatusPanel poniendo el número de imagen, pero eso hace que la imagen se
>> quede fija, y lo que yo deseo es que cuando las letras desaperezcan
>> cambie la imagen o incluso y es otra opción desaparezca, alguien me puede
>> decir como hacerlo he probado varias cosas en OnDrawItem pero no he
>> tenido exito.
>
> Si lo he entendido bien, lo que quieres es que la imagen que has asignado
> al panel desaparezca en algún momento. Si es eso, simplemente pon la
> propiedad nImage del panel a 0.
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
>
José Ramón Castro.
User avatar
jfgimenez
Site Admin
Posts: 5620
Joined: Mon Apr 06, 2015 8:48 pm
Contact:

Imagen en TStatusPanel de una TStatusBar

Postby jfgimenez » Thu Nov 13, 2008 7:36 pm

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?
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. En cambio, el OnTimer
se ejecuta cada x tiempo, y por eso cambia la imágen. 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.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jrcpoli
Posts: 240
Joined: Wed Oct 25, 2006 8:55 pm

Imagen en TStatusPanel de una TStatusBar

Postby jrcpoli » Thu Nov 13, 2008 10:32 pm

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:491c7418@ozsrv2.ozlan.local...
> 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.
José Ramón Castro.
User avatar
jfgimenez
Site Admin
Posts: 5620
Joined: Mon Apr 06, 2015 8:48 pm
Contact:

Imagen en TStatusPanel de una TStatusBar

Postby jfgimenez » Mon Nov 17, 2008 8:49 pm

José Ramón,
> 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.
Puedes escribir la clase TStatusPanel sobrecargando el método Update. Sería
algo así (ojo, lo escribo al vuelo sin probarlo):
CLASS TStatusPanel FROM XStatusPanel
METHOD Update()
ENDCLASS
METHOD Update( lOnlyTimer ) CLASS TStatusPanel
Super:Update( lOnlyTimer )
IF ::nType == sbKEYCAPS
::nImage := IIf( GetKeyBoardState( VK_CAPITAL ) == 1, 1, 0 )
::SetText( "" )
ELSEIF ::nType == sbKEYINSERT
::nImage := IIf( GetKeyBoardState( VK_INSERT ) == 1, 2, 0 )
::SetText( "" )
ELSEIF ::nType == sbKEYNUMLOCK
::nImage := IIf( GetKeyBoardState( VK_NUMLOCK ) == 1, 2, 0 )
::SetText( "" )
ENDIF
RETURN Nil
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
User avatar
jfgimenez
Site Admin
Posts: 5620
Joined: Mon Apr 06, 2015 8:48 pm
Contact:

Imagen en TStatusPanel de una TStatusBar

Postby jfgimenez » Mon Nov 17, 2008 8:51 pm

José Ramón,
> ::nImage := IIf( GetKeyBoardState( VK_CAPITAL ) == 1, 1, 0 )
> ::nImage := IIf( GetKeyBoardState( VK_INSERT ) == 1, 2, 0 )
> ::nImage := IIf( GetKeyBoardState( VK_NUMLOCK ) == 1, 2, 0 )
El último es 3, no 2. Bueno, en realidad lo tienes que cambiar por los
números de las imágenes que estés usando.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jrcpoli-quitar
Posts: 558
Joined: Tue Feb 09, 2010 2:26 pm

Imagen en TStatusPanel de una TStatusBar

Postby jrcpoli-quitar » Tue Nov 18, 2008 12:18 pm

Saludos José F.
Ante todo como siempre grací­as por tu respuesta siempre acertada,
aunque después de probarla te diré que no hace falta el ::SetText := "",
porque esa parte ya la hace el update de la Clase, por lo tanto y si me
lo permites esto queda así­ para que desaparezca la nImagen según este
activada o desactivada la tecla correspondiente.
Jose F. Gimenez escribió:
> José Ramón,
>
>> 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.
>
> Puedes escribir la clase TStatusPanel sobrecargando el método Update. Serí­a
> algo así­ (ojo, lo escribo al vuelo sin probarlo):
>
> CLASS TStatusPanel FROM XStatusPanel
> METHOD Update()
> ENDCLASS
>
> METHOD Update( lOnlyTimer ) CLASS TStatusPanel
> Super:Update( lOnlyTimer )
> IF ::nType == sbKEYCAPS
> ::nImage := IIf( GetKeyBoardState( VK_CAPITAL ) == 1, 1, 0 )
> ::SetText( "" )
> ELSEIF ::nType == sbKEYINSERT
> ::nImage := IIf( GetKeyBoardState( VK_INSERT ) == 1, 2, 0 )
> ::SetText( "" )
> ELSEIF ::nType == sbKEYNUMLOCK
> ::nImage := IIf( GetKeyBoardState( VK_NUMLOCK ) == 1, 2, 0 )
> ::SetText( "" )
> ENDIF
> RETURN Nil
>
>
CLASS TStatusPanel FROM XStatusPanel
METHOD Update(lOnlyTimer)
ENDCLASS
METHOD Update( lOnlyTimer ) CLASS TStatusPanel
Super:Update( lOnlyTimer )
IF ::nType == sbKEYCAPS
::nImage := IIf( GetKeyBoardState( VK_CAPITAL ) == 1, 3, 0 )
ELSEIF ::nType == sbKEYINSERT
::nImage := IIf( GetKeyBoardState( VK_INSERT ) == 1, 3, 0 )
ELSEIF ::nType == sbKEYNUMLOCK
::nImage := IIf( GetKeyBoardState( VK_NUMLOCK ) == 1, 3, 0 )
ENDIF
RETURN Nil
Por si alguno quiere utilizarlo.
José Ramón Castro.
--

Return to “Spanish”