Página 1 de 1

Duda sobre fonts

Publicado: Mié Mar 02, 2005 1:50 pm
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

Duda sobre fonts

Publicado: Mié Mar 02, 2005 2:04 pm
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

Duda sobre fonts

Publicado: Mié Mar 02, 2005 2:16 pm
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
>
>