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.

Duda sobre fonts

Foro de Xailer profesional en español
Responder
jmartial
Mensajes: 397
Registrado: Vie May 20, 2005 8:53 pm

Duda sobre fonts

Mensaje por jmartial »

Hola,
Necesito ecribir con textout, y no estoy usando la clase canvas, sino
directamente, mi duda es que en fw teníamos un oFnt:activate() que
seleccionaba el font para la próxima vez que pintaba windows.
Yo al usar
hFontOld := SelectObject( :hDC, oFnt:handle )
me funciona, pero para liberar recursos y dejar de usarlo no sé si basta un
simple oFnt:End(), o hay que hacer
DeleteObject(oFnt:handle)
SelectObject( :hDC, hFontOld )
¿Cómo sería lo correcto para no perder recursos? No se si en Xa hay algo
similar al oFnt:Activate()
Mi duda no es como hacerlo a pelo, sino como usarlo con la clase Tfont de
Xailer.
Un Saludo,
Joaquín
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Duda sobre fonts

Mensaje por jfgimenez »

Joaquín,
> Yo al usar
> hFontOld := SelectObject( :hDC, oFnt:handle )
>
> me funciona, pero para liberar recursos y dejar de usarlo no sé si basta
> un
> simple oFnt:End(), o hay que hacer
>
> DeleteObject(oFnt:handle)
> SelectObject( :hDC, hFontOld )
Esta última línea es correcta, pero no deberías llamar a DeleteObject(),
salvo que hayas sido tú quien ha creado la fuente.
Ahora bien, si la fuente la has creado con TFont():Create(...), entonces
deberás destruirla con :End(). Pero si la fuente es la propia del control,
no la destruyas; ya se encargará Xailer de destruirla cuando se destruye el
control.
> ¿Cómo sería lo correcto para no perder recursos? No se si en Xa hay algo
> similar al oFnt:Activate()
No.
> Mi duda no es como hacerlo a pelo, sino como usarlo con la clase Tfont de
> Xailer.
Me imagino que lo que necesitas son varias fuentes en un mismo control, ¿no?
Para esto, mi consejo es que las crees en el Create() del control, y las
destruyas en el método Free(). Algo así:
METHOD Create( oParent ) CLASS TMiControl
...
Super:Create( oParent )
::oFont1 := TFont():Create( ... )
::oFont2 := TFont():Create( ... )
::oFont3 := TFont():Create( ... )
RETURN Self
METHOD Free() CLASS TMiControl
::oFont1:End()
::oFont2:End()
::oFont3:End()
RETURN Super:Free() // OJO con esto. Hay que llamar *SIEMPRE* a
Super:Free()
Y después, durante el proceso de pintado simplemente tienes que
seleccionarlas en el HDC cuando las necesites, y volver a seleccionar la
fuente original al terminar el pintado:
hOldFont := SelectObject( hDC, ::oFont1:Handle )
....
SelectObject( hDC, ::oFont2:Handle )
....
SelectObject( hDC, ::oFont3:Handle )
....
SelectObject( hDC, hOldFont )
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jmartial
Mensajes: 397
Registrado: Vie May 20, 2005 8:53 pm

Duda sobre fonts

Mensaje por jmartial »

Muchas gracias,
esa era la duda, y es como pensaba que debería funcionar, no obstante no
estaría de más un par de métodos en la clase font:
oFnt:Select( [hDC] ) --> hDC opcional, por si quisiera pintar en otro
espacio
oFnt:UnSelect() // Restauraría el font que había seleccionado antes de
seleccionar este.
Un Saludo,
Joaquín
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=4225b9ed@ozsrv2.ozlan.local...]4225b9ed@ozsrv2.ozlan.local...[/email]
> Joaquín,
>
> > Yo al usar
> > hFontOld := SelectObject( :hDC, oFnt:handle )
> >
> > me funciona, pero para liberar recursos y dejar de usarlo no sé si basta
> > un
> > simple oFnt:End(), o hay que hacer
> >
> > DeleteObject(oFnt:handle)
> > SelectObject( :hDC, hFontOld )
>
> Esta última línea es correcta, pero no deberías llamar a DeleteObject(),
> salvo que hayas sido tú quien ha creado la fuente.
>
> Ahora bien, si la fuente la has creado con TFont():Create(...), entonces
> deberás destruirla con :End(). Pero si la fuente es la propia del control,
> no la destruyas; ya se encargará Xailer de destruirla cuando se destruye
el
> control.
>
>
> > ¿Cómo sería lo correcto para no perder recursos? No se si en Xa hay algo
> > similar al oFnt:Activate()
>
> No.
>
>
> > Mi duda no es como hacerlo a pelo, sino como usarlo con la clase Tfont
de
> > Xailer.
>
> Me imagino que lo que necesitas son varias fuentes en un mismo control,
¿no?
>
> Para esto, mi consejo es que las crees en el Create() del control, y las
> destruyas en el método Free(). Algo así:
>
> METHOD Create( oParent ) CLASS TMiControl
> ...
> Super:Create( oParent )
> ::oFont1 := TFont():Create( ... )
> ::oFont2 := TFont():Create( ... )
> ::oFont3 := TFont():Create( ... )
>
> RETURN Self
>
> METHOD Free() CLASS TMiControl
> ::oFont1:End()
> ::oFont2:End()
> ::oFont3:End()
> RETURN Super:Free() // OJO con esto. Hay que llamar *SIEMPRE* a
> Super:Free()
>
> Y después, durante el proceso de pintado simplemente tienes que
> seleccionarlas en el HDC cuando las necesites, y volver a seleccionar la
> fuente original al terminar el pintado:
>
> hOldFont := SelectObject( hDC, ::oFont1:Handle )
> ...
> SelectObject( hDC, ::oFont2:Handle )
> ...
> SelectObject( hDC, ::oFont3:Handle )
> ...
> SelectObject( hDC, hOldFont )
>
>
> --
> Un saludo,
>
> José F. Giménez
>
>
Responder