Página 1 de 1

Elementos fecha y estado del teclado en TStatusPanel

Publicado: Lun Nov 28, 2005 1:43 pm
por Jaime Irurzun
Hola,
Tengo que añadir a una TStatusBar dos elementos TStatusPanel que tengan
la fecha del sistema y el estado del teclado (bloqmayus,ins...)
respectivamente. He mirado la documentación pero no encuentro la forma
de hacerlo. Pienso que lo ideal serí­a una propiedad en TStatusPanel con
algo así­:
::oStatusPanel:nType := DATE // item tipo Fecha
::oStatusPanel:nType := KEYBOARD // item tipo BloqMayus/Ins
::oStatusPanel:nType := TEXT // item tipo Texto
En la tercera opción (creo que es la única disponible actualmente) el
texto serí­a el de la propiedad ::cText.
¿Podrí­ais aclararme cómo puedo hacerlo actualmente?
P.D.: También he visto que la forma de añadir elementos TStatusPanel a
un TStatusBar es mediante el método AddItem:
AddItem( cText, nWidth, cTooltip, nImage, nAlignment, ;
nBorderStyle, nMinWidth, lOwnerDraw )
Tal vez sea algo más personal, pero creo que estarí­a muy bien
sobrecargar el método para poder añadir elementos así­:
AddItem( oStatusPanel )
¿Podrí­a hacerse? :)
--
Un saludo,
Jaime Irurzun.

Elementos fecha y estado del teclado en TStatusPanel

Publicado: Lun Nov 28, 2005 1:57 pm
por jfgimenez
Jaime,
> Tengo que añadir a una TStatusBar dos elementos TStatusPanel que tengan la
> fecha del sistema y el estado del teclado (bloqmayus,ins...)
> respectivamente. He mirado la documentación pero no encuentro la forma de
> hacerlo. Pienso que lo ideal sería una propiedad en TStatusPanel con algo
> así:
>
> ::oStatusPanel:nType := DATE // item tipo Fecha
> ::oStatusPanel:nType := KEYBOARD // item tipo BloqMayus/Ins
> ::oStatusPanel:nType := TEXT // item tipo Texto
>
> En la tercera opción (creo que es la única disponible actualmente) el
> texto sería el de la propiedad ::cText.
>
> ¿Podríais aclararme cómo puedo hacerlo actualmente?
Puedes usar el método :SetText( <nPanel>, <cText> ) para poner cualquier
texto en cualquier panel. También puedes usar la propiedad cText de cada uno
de los paneles; p.ej.: ::oStatusBar:aItems[2]:cText := "Insertar"
> P.D.: También he visto que la forma de añadir elementos TStatusPanel a un
> TStatusBar es mediante el método AddItem:
>
> AddItem( cText, nWidth, cTooltip, nImage, nAlignment, ;
> nBorderStyle, nMinWidth, lOwnerDraw )
>
> Tal vez sea algo más personal, pero creo que estaría muy bien sobrecargar
> el método para poder añadir elementos así:
>
> AddItem( oStatusPanel )
Para añadir un panel lo puedes hacer o bien llamando al método AddItem() del
control, o bien creando directamente el item e indicando que su padre es el
control. P.ej.:
TStatusPanel():Create( ::oStatusBar1, "Panel1", 200 )
--
Un saludo,
José F. Giménez

Elementos fecha y estado del teclado en TStatusPanel

Publicado: Lun Nov 28, 2005 2:31 pm
por Jaime Irurzun
Jose,
> Puedes usar el método :SetText( <nPanel>, <cText> ) para poner cualquier
> texto en cualquier panel. También puedes usar la propiedad cText de cada uno
> de los paneles; p.ej.: ::oStatusBar:aItems[2]:cText := "Insertar"
Pero eso sólo sirve para poner un texto en el panel... lo que yo quiero
es insertar el reloj del sistema y el panel ese que indica cuándo está
pulsado el BloqMayus y el Ins. En FW esto se hací­a así­:
oWndMain:oMsgBar:ClockOn() // inserta el panel de hora del sistema
oWndMain:oMsgBar:DateOn() // inserta el panel de fecha
oWndMain:oMsgBar:KeybOn() // inserta el panel de bloqmayus,ins...
>> Para añadir un panel lo puedes hacer o bien llamando al método AddItem() del
>> control, o bien creando directamente el item e indicando que su padre es el
>> control. P.ej.:
>>
>> TStatusPanel():Create( ::oStatusBar1, "Panel1", 200 )
Vale, gracias. Pensaba que los métodos ::Create() no recibí­an parámetros
nunca... me fijaré mejor a partir de ahora.
--
Un saludo,
Jaime Irurzun.
Jose F. Gimenez escribió:
> Jaime,
>
>
>>Tengo que añadir a una TStatusBar dos elementos TStatusPanel que tengan la
>>fecha del sistema y el estado del teclado (bloqmayus,ins...)
>>respectivamente. He mirado la documentación pero no encuentro la forma de
>>hacerlo. Pienso que lo ideal serí­a una propiedad en TStatusPanel con algo
>>así­:
>>
>>::oStatusPanel:nType := DATE // item tipo Fecha
>>::oStatusPanel:nType := KEYBOARD // item tipo BloqMayus/Ins
>>::oStatusPanel:nType := TEXT // item tipo Texto
>>
>>En la tercera opción (creo que es la única disponible actualmente) el
>>texto serí­a el de la propiedad ::cText.
>>
>>¿Podrí­ais aclararme cómo puedo hacerlo actualmente?
>
>
> Puedes usar el método :SetText( <nPanel>, <cText> ) para poner cualquier
> texto en cualquier panel. También puedes usar la propiedad cText de cada uno
> de los paneles; p.ej.: ::oStatusBar:aItems[2]:cText := "Insertar"
>
>
>
>>P.D.: También he visto que la forma de añadir elementos TStatusPanel a un
>>TStatusBar es mediante el método AddItem:
>>
>> AddItem( cText, nWidth, cTooltip, nImage, nAlignment, ;
>> nBorderStyle, nMinWidth, lOwnerDraw )
>>
>>Tal vez sea algo más personal, pero creo que estarí­a muy bien sobrecargar
>>el método para poder añadir elementos así­:
>>
>> AddItem( oStatusPanel )
>
>
> Para añadir un panel lo puedes hacer o bien llamando al método AddItem() del
> control, o bien creando directamente el item e indicando que su padre es el
> control. P.ej.:
>
> TStatusPanel():Create( ::oStatusBar1, "Panel1", 200 )
>
>

Elementos fecha y estado del teclado en TStatusPanel

Publicado: Lun Nov 28, 2005 3:04 pm
por jfgimenez
Jaime,
> Pero eso sólo sirve para poner un texto en el panel... lo que yo quiero es
> insertar el reloj del sistema y el panel ese que indica cuándo está
> pulsado el BloqMayus y el Ins. En FW esto se hacía así:
>
> oWndMain:oMsgBar:ClockOn() // inserta el panel de hora del sistema
> oWndMain:oMsgBar:DateOn() // inserta el panel de fecha
> oWndMain:oMsgBar:KeybOn() // inserta el panel de bloqmayus,ins...
Si no recuerdo mal, lo que hacía FW era activar un timer y actualizaba los
paneles cuando se disparaba ese timer. Lo mismo puedes hacer con Xailer,
aunque es cierto que no está "automatizado". Intentaremos hacerlo cuando
podamos. Mientras tanto, si te sirve de ayuda, yo pongo en mis programas la
fecha y la hora, con este código:
//---------------------------------------------------------- --------------------
METHOD FormInitialize( oSender ) CLASS TPrincipal
WITH OBJECT ::oStatusBar1
:aItems[2]:OnClick := {|| ShellExecute( ::Handle, "open", "Control",
"date/time",, SW_SHOW ) }
:aItems[3]:OnClick := {|| ShellExecute( ::Handle, "open", "Control",
"date/time",, SW_SHOW ) }
END
::oTimer1:Enable()
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD Timer1Timer( oSender ) CLASS TPrincipal
IF ::oStatusBar1 != Nil
WITH OBJECT ::oStatusBar1
IF !Empty( :aItems )
:aItems[2]:cText := Trim( DiaSemana( Date() ) ) + ", " + DTOC(
Date() )
:aItems[3]:cText := Left( Time(), 5 )
ENDIF
END
ENDIF
RETURN Nil
//---------------------------------------------------------- --------------------
Puedes cambiarlo y ampliarlo a tu gusto.
--
Un saludo,
José F. Giménez

Elementos fecha y estado del teclado en TStatusPanel

Publicado: Lun Nov 28, 2005 11:34 pm
por Jaime Irurzun
Gracias Jose, lo haré así­ mientras implementáis la solución
"automatizada". Nos quejamos de vicio... Xailer es tan potente que damos
por hecho que tiene que hacer por nosotros casi cualquier cosa :)
--
Un saludo,
Jaime Irurzun.
Jose F. Gimenez escribió:
> Jaime,
>
>
>>Pero eso sólo sirve para poner un texto en el panel... lo que yo quiero es
>>insertar el reloj del sistema y el panel ese que indica cuándo está
>>pulsado el BloqMayus y el Ins. En FW esto se hací­a así­:
>>
>>oWndMain:oMsgBar:ClockOn() // inserta el panel de hora del sistema
>>oWndMain:oMsgBar:DateOn() // inserta el panel de fecha
>>oWndMain:oMsgBar:KeybOn() // inserta el panel de bloqmayus,ins...
>
>
> Si no recuerdo mal, lo que hací­a FW era activar un timer y actualizaba los
> paneles cuando se disparaba ese timer. Lo mismo puedes hacer con Xailer,
> aunque es cierto que no está "automatizado". Intentaremos hacerlo cuando
> podamos. Mientras tanto, si te sirve de ayuda, yo pongo en mis programas la
> fecha y la hora, con este código:
>
> //---------------------------------------------------------- --------------------
>
> METHOD FormInitialize( oSender ) CLASS TPrincipal
>
> WITH OBJECT ::oStatusBar1
> :aItems[2]:OnClick := {|| ShellExecute( ::Handle, "open", "Control",
> "date/time",, SW_SHOW ) }
> :aItems[3]:OnClick := {|| ShellExecute( ::Handle, "open", "Control",
> "date/time",, SW_SHOW ) }
> END
> ::oTimer1:Enable()
>
> RETURN Nil
>
> //---------------------------------------------------------- --------------------
>
> METHOD Timer1Timer( oSender ) CLASS TPrincipal
>
> IF ::oStatusBar1 != Nil
> WITH OBJECT ::oStatusBar1
> IF !Empty( :aItems )
> :aItems[2]:cText := Trim( DiaSemana( Date() ) ) + ", " + DTOC(
> Date() )
> :aItems[3]:cText := Left( Time(), 5 )
> ENDIF
> END
> ENDIF
>
> RETURN Nil
>
> //---------------------------------------------------------- --------------------
>
> Puedes cambiarlo y ampliarlo a tu gusto.
>

Elementos fecha y estado del teclado en TStatusPanel

Publicado: Mar Nov 29, 2005 9:25 am
por zeasoftware
aprovechando el viaje, pregunto como se puede hacer para que el panel tenga
un tamaño proporcional al ancho de la ventana?
Esto es que si pongo la hora, estado de teclado, etc., al ampliar la ventana
o maximizarla el ancho del panel sea proporcional al tamaño de dicha
ventana?
espero haberme explicado.
Saludos.
Ramón Zea

Elementos fecha y estado del teclado en TStatusPanel

Publicado: Mar Nov 29, 2005 9:35 am
por zeasoftware
puse este codigo para probarlo, pero no puedo hacerlo que se active el
timer, disculpen la ignoracia pero, como quedaria?
Gracias,
Ramon Zea
> //---------------------------------------------------------- --------------------
>
> METHOD FormInitialize( oSender ) CLASS TPrincipal
>
> WITH OBJECT ::oStatusBar1
> :aItems[2]:OnClick := {|| ShellExecute( ::Handle, "open", "Control",
> "date/time",, SW_SHOW ) }
> :aItems[3]:OnClick := {|| ShellExecute( ::Handle, "open", "Control",
> "date/time",, SW_SHOW ) }
> END
> ::oTimer1:Enable()
>
> RETURN Nil
>
> //---------------------------------------------------------- --------------------
>
> METHOD Timer1Timer( oSender ) CLASS TPrincipal
>
> IF ::oStatusBar1 != Nil
> WITH OBJECT ::oStatusBar1
> IF !Empty( :aItems )
> :aItems[2]:cText := Trim( DiaSemana( Date() ) ) + ", " +
> DTOC( Date() )
> :aItems[3]:cText := Left( Time(), 5 )
> ENDIF
> END
> ENDIF
>
> RETURN Nil
>

Elementos fecha y estado del teclado en TStatusPanel

Publicado: Mar Nov 29, 2005 12:26 pm
por jfgimenez
Ramón,
> puse este codigo para probarlo, pero no puedo hacerlo que se active el
> timer, disculpen la ignoracia pero, como quedaria?
Tienes que añadir un componente TTimer al formulario (está en la pestaña
"Sistema" de la paleta de componentes). Ponle un nInterval de unos 5000 (no
creo que necesites un periodo más corto), y lEnabled ponlo a .T.. Asigna
también el evento OnTimer al método que has puesto y ya está.
--
Un saludo,
José F. Giménez

Elementos fecha y estado del teclado en TStatusPanel

Publicado: Mar Nov 29, 2005 12:29 pm
por jfgimenez
Ramón,
> aprovechando el viaje, pregunto como se puede hacer para que el panel
> tenga un tamaño proporcional al ancho de la ventana?
>
> Esto es que si pongo la hora, estado de teclado, etc., al ampliar la
> ventana o maximizarla el ancho del panel sea proporcional al tamaño de
> dicha ventana?
yo tengo el evento OnSize del formulario de esta forma:
//---------------------------------------------------------- --------------------
METHOD FormSize( oSender, nSizeType, nClientWidth, nClientHeight ) CLASS
TPrincipal
IF ::oStatusBar1 != Nil .AND. nClientWidth > 0
::oStatusBar1:aItems[1]:nWidth := nClientWidth - 210
ENDIF
RETURN Nil
//---------------------------------------------------------- --------------------
Logicamente deberás ajustar el tamaño a tus necesidades.
--
Un saludo,
José F. Giménez