Página 1 de 1

Rotar texto

Publicado: Mié Sep 20, 2006 11:01 am
por jose.luis
Hola,
No se como hacer que un tlabel tenga el texto con rotación 900. Tampoco se
como hacer lo mismo en btnbmp (¿se puede?). Os dejo un proyecto donde
intento cambiar la rotación de un label, u btnbmp y un button. Aunque el
texto si gira, no se como hacer que cambie el origen del pintado del texto.
Espero vuestros comentarios. Por cierto, fijaros en el comportamiento de
button respecto al resto. Parece que algo no le gusta.
Saludos,
José Luis Capel


Attached files pruebas6.zip (1.9 KB)Â

Rotar texto

Publicado: Mié Sep 20, 2006 11:11 am
por jose.luis
Hola,
Por cierto... Desde el IDE no hay ninguna opción, en un tLabel, para rotar
el texto.
Y otra... es una curiosidad. Si ejecutáis el ejemplo y haceis click
repetidas veces sobre el botón 'Rotar' da la sensación de que a cada click
comienza de nuevo el bucle de rotación (lanza el evento onclick). Y si
cerráis el formulario por la x podréis observar que aunque el formulario no
está, el programa sigue en memoria ejecutando toooodos los clicks que hemos
hecho. Entonces...
a. ¿¿ Cada click lanza un nuevo evento sin esperar a que termine el
anterior? ?? ¿¿ O los pone a la cola, uno detrás del otro ??
b. Al cerrar el formulario.. ¿No debería matar todos los procesos? ¿Hay
alguna manera de saber si queda algo 'vivo' por ahí?
Saludos y gracias,
José Luis Capel
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=45110342@news.xailer.com...]45110342@news.xailer.com...[/email]
> Hola,
>
> No se como hacer que un tlabel tenga el texto con rotación 900. Tampoco
> se como hacer lo mismo en btnbmp (¿se puede?). Os dejo un proyecto donde
> intento cambiar la rotación de un label, u btnbmp y un button. Aunque el
> texto si gira, no se como hacer que cambie el origen del pintado del
> texto.
>
> Espero vuestros comentarios. Por cierto, fijaros en el comportamiento de
> button respecto al resto. Parece que algo no le gusta.
>
> Saludos,
> José Luis Capel
>
>

Rotar texto

Publicado: Mié Sep 20, 2006 5:03 pm
por ignacio
José Luis,
Los controles TBtnbmp y TLabel NO están preparados para utilizar fonts con
orientación distinta de horizontal. Lo siento.
Para pintar texto con orientación vertical lo más sencillo es utilizar el
evento OnPaint y utilizar primitvas GDI para hacer el trabajo.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=45110342@news.xailer.com...]45110342@news.xailer.com...[/email]
> Hola,
>
> No se como hacer que un tlabel tenga el texto con rotación 900. Tampoco
> se como hacer lo mismo en btnbmp (¿se puede?). Os dejo un proyecto donde
> intento cambiar la rotación de un label, u btnbmp y un button. Aunque el
> texto si gira, no se como hacer que cambie el origen del pintado del
> texto.
>
> Espero vuestros comentarios. Por cierto, fijaros en el comportamiento de
> button respecto al resto. Parece que algo no le gusta.
>
> Saludos,
> José Luis Capel
>
>

Rotar texto

Publicado: Mié Sep 20, 2006 5:09 pm
por ignacio
José Luis,
Al estar llamando internamente a ProcessMessages() estás permitiendo que
entren nuevos mensajes y por lo tanto funcione un nuevo click de ratón, y
por lo tanto entre en ejecución de nuevo Button2Click. En definitiva, puede
haber muchas llamadas a Button2Click en cascada. Por eso aconsejamos no usar
ProcessMessages() salvo cuando sea extricamente necesario y en dicho caso
hay que tener la precaución de inhabilitar cualquier control o formulario
que pude provocar un efecto indeseado como el que comentas.
> a. ¿¿ Cada click lanza un nuevo evento sin esperar a que termine el
> anterior? ?? ¿¿ O los pone a la cola, uno detrás del otro ??
Realmente entra el segundo en funcionamiento, y el primero retoma a su
trabajo cuando el segundo termina. En definitiva aumenta la pila de
procedimientos llamados, eso es todo.
> b. Al cerrar el formulario.. ¿No debería matar todos los procesos? ¿Hay
> alguna manera de saber si queda algo 'vivo' por ahí?
Pues no. Eso lo debes de controlar tu mismo como te he comentado al
principio, o evita llamar a ProcessMessages().
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:45110593$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Hola,
>
> Por cierto... Desde el IDE no hay ninguna opción, en un tLabel, para
> rotar el texto.
>
> Y otra... es una curiosidad. Si ejecutáis el ejemplo y haceis click
> repetidas veces sobre el botón 'Rotar' da la sensación de que a cada click
> comienza de nuevo el bucle de rotación (lanza el evento onclick). Y si
> cerráis el formulario por la x podréis observar que aunque el formulario
> no está, el programa sigue en memoria ejecutando toooodos los clicks que
> hemos hecho. Entonces...
>
> a. ¿¿ Cada click lanza un nuevo evento sin esperar a que termine el
> anterior? ?? ¿¿ O los pone a la cola, uno detrás del otro ??
>
> b. Al cerrar el formulario.. ¿No debería matar todos los procesos? ¿Hay
> alguna manera de saber si queda algo 'vivo' por ahí?
>
> Saludos y gracias,
> José Luis Capel
>
>
>
>
> "José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
> news:[email=45110342@news.xailer.com...]45110342@news.xailer.com...[/email]
>> Hola,
>>
>> No se como hacer que un tlabel tenga el texto con rotación 900. Tampoco
>> se como hacer lo mismo en btnbmp (¿se puede?). Os dejo un proyecto donde
>> intento cambiar la rotación de un label, u btnbmp y un button. Aunque el
>> texto si gira, no se como hacer que cambie el origen del pintado del
>> texto.
>>
>> Espero vuestros comentarios. Por cierto, fijaros en el comportamiento de
>> button respecto al resto. Parece que algo no le gusta.
>>
>> Saludos,
>> José Luis Capel
>>
>>
>
>

Rotar texto

Publicado: Jue Sep 21, 2006 1:12 pm
por jose.luis
Ignacio,
Gracias por tus aclaraciones. En mis aplicaciones el ProcessMessages lo
utilizo en contadas ocasiones. Básicamente cuando lanzo SELECT's muy
pesadas, entre select y select. Pero en el ejemplo lo he tenido que poner
por que no se por cuales razones el xxxx:Refresh() no refrescaba el control.
Saludos y gracias!
José Luis Capel
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45115998$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> José Luis,
>
> Al estar llamando internamente a ProcessMessages() estás permitiendo que
> entren nuevos mensajes y por lo tanto funcione un nuevo click de ratón, y
> por lo tanto entre en ejecución de nuevo Button2Click. En definitiva,
> puede haber muchas llamadas a Button2Click en cascada. Por eso aconsejamos
> no usar ProcessMessages() salvo cuando sea extricamente necesario y en
> dicho caso hay que tener la precaución de inhabilitar cualquier control o
> formulario que pude provocar un efecto indeseado como el que comentas.
>
>> a. ¿¿ Cada click lanza un nuevo evento sin esperar a que termine el
>> anterior? ?? ¿¿ O los pone a la cola, uno detrás del otro ??
>
> Realmente entra el segundo en funcionamiento, y el primero retoma a su
> trabajo cuando el segundo termina. En definitiva aumenta la pila de
> procedimientos llamados, eso es todo.
>
>> b. Al cerrar el formulario.. ¿No debería matar todos los procesos? ¿Hay
>> alguna manera de saber si queda algo 'vivo' por ahí?
>
> Pues no. Eso lo debes de controlar tu mismo como te he comentado al
> principio, o evita llamar a ProcessMessages().
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
> "José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
> news:45110593$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Hola,
>>
>> Por cierto... Desde el IDE no hay ninguna opción, en un tLabel, para
>> rotar el texto.
>>
>> Y otra... es una curiosidad. Si ejecutáis el ejemplo y haceis click
>> repetidas veces sobre el botón 'Rotar' da la sensación de que a cada
>> click comienza de nuevo el bucle de rotación (lanza el evento onclick).
>> Y si cerráis el formulario por la x podréis observar que aunque el
>> formulario no está, el programa sigue en memoria ejecutando toooodos los
>> clicks que hemos hecho. Entonces...
>>
>> a. ¿¿ Cada click lanza un nuevo evento sin esperar a que termine el
>> anterior? ?? ¿¿ O los pone a la cola, uno detrás del otro ??
>>
>> b. Al cerrar el formulario.. ¿No debería matar todos los procesos? ¿Hay
>> alguna manera de saber si queda algo 'vivo' por ahí?
>>
>> Saludos y gracias,
>> José Luis Capel
>>
>>
>>
>>
>> "José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
>> news:[email=45110342@news.xailer.com...]45110342@news.xailer.com...[/email]
>>> Hola,
>>>
>>> No se como hacer que un tlabel tenga el texto con rotación 900. Tampoco
>>> se como hacer lo mismo en btnbmp (¿se puede?). Os dejo un proyecto
>>> donde intento cambiar la rotación de un label, u btnbmp y un button.
>>> Aunque el texto si gira, no se como hacer que cambie el origen del
>>> pintado del texto.
>>>
>>> Espero vuestros comentarios. Por cierto, fijaros en el comportamiento
>>> de button respecto al resto. Parece que algo no le gusta.
>>>
>>> Saludos,
>>> José Luis Capel
>>>
>>>
>>
>>
>
>

Rotar texto

Publicado: Jue Sep 21, 2006 1:14 pm
por jose.luis
Ignacio,
Gracias por tu respuesta.
>
> Los controles TBtnbmp y TLabel NO están preparados para utilizar fonts con
> orientación distinta de horizontal. Lo siento.
>
> Para pintar texto con orientación vertical lo más sencillo es utilizar el
> evento OnPaint y utilizar primitvas GDI para hacer el trabajo.
>
Pero.... se ven como rotan ;-)
Saludos,
José Luis Capel

Rotar texto

Publicado: Vie Sep 22, 2006 11:01 am
por jfgimenez
José Luis,
> Pero.... se ven como rotan ;-)
Se ve porque cuando se llama en última instancia a DrawText(), el API lo
hace así. Pero ten en cuenta que al llamar a esa función se le está pasando
un rectángulo que está calculado en base a un texto horizontal; por eso se
ve cortado.
--
Un saludo,
José F. Giménez
http://www.xailer.com