Cambiar tipo de letra en aplicación

Cambiar tipo de letra en aplicación

Postby José Luis Sánchez » Mon Mar 07, 2022 3:52 pm

Hola,
el tema del tipo de letra de las aplicaciones ha sido un tema recurrente para mi, sobre todo por usar escalado de pantalla en Windows. Hace poco, inspirado en el ejemplo FiveDbu, quise probar como se verían mis programas con una fuente de tamaño fijo en vez de coger la fuente del sistema con

DEFINE FONT ::oFont NAME GetDefaultFontName() SIZE 0, GetDefaultFontHeight()

utilicé en su lugar

DEFINE FONT ::oFont NAME "Calibri" SIZE 0, -14

Me tocó cambiar el tipo de letra en todos los diálogos en el fichero .RC pero el resultado creo que merece la pena.

Image

Sin embargo tengo un control en que no se cómo tengo que cambiar la fuente, que es el ribbonbar. A este control le asigno la fuente de esta manera:

::oRebar:SetFont(::oFont)

pero lo que hace es que cambia la fuente al título de las pestañas pero no a los títulos de los botones de dentro. Podeis ver en la imagen de arriba lo que digo.

¿ Cómo le puedo cambiar la fuente a los botones del ribbon ?

Saludos,
User avatar
José Luis Sánchez
 
Posts: 556
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Re: Cambiar tipo de letra en aplicación

Postby cnavarro » Mon Mar 07, 2022 4:58 pm

Jose Luis, a ver si te sirve algo de esto

Code: Select all  Expand view


   Local oDlg
   Local oGroup
   Local oBtn
   Local cFont       := "Segoe UI"
   Local nFontSize := 14

   oRb:oFont:End()
   oRb:SetFont( TFont():New( cFont, 0, -nFontSize ) )

   FOR EACH oDlg IN oRb:aDialogs

       FOR EACH oGroup IN oDlg:aControls
           if oGroup:IsKindOf( "TRBGROUP" )
              oGroup:oFont:End()
              oGroup:SetFont( TFont():New( cFont, 0, - ( nFontSize - 3 ) ) )

              FOR EACH oBtn IN oGroup:aControls
                  If oBtn:IsKindOf( "TRBTN" )

                     oBtn:oFont:End()
                     oBtn:SetFont( TFont():New( cFont, 0, - ( nFontSize - 3 ) ) )
                     oBtn:Refresh()
                  endIf
              NEXT
              //oGroup:Refresh()
           endif
       NEXT
   NEXT

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6548
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Cambiar tipo de letra en aplicación

Postby José Luis Sánchez » Mon Mar 07, 2022 5:34 pm

Perfecto, ¡ muchas gracias Cristóbal !

Una pregunta, ¿antes de hacer el setfont() debo hacer un end() de la fuente por defecto? Por ejemplo, en todos los dialogos y algunos controles asigno fuente con setfont() pero antes no hago end() de la fuente por defecto.

Saludos,
User avatar
José Luis Sánchez
 
Posts: 556
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Re: Cambiar tipo de letra en aplicación

Postby leandro » Mon Mar 07, 2022 11:21 pm

Que buen dato Cristobal, muchas gracias :D :D

Gracias José Luis, por hacer la pregunta correcta :D
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1676
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Cambiar tipo de letra en aplicación

Postby cnavarro » Mon Mar 07, 2022 11:30 pm

José Luis Sánchez wrote:Perfecto, ¡ muchas gracias Cristóbal !

Una pregunta, ¿antes de hacer el setfont() debo hacer un end() de la fuente por defecto? Por ejemplo, en todos los dialogos y algunos controles asigno fuente con setfont() pero antes no hago end() de la fuente por defecto.

Saludos,


Tienes que hacer el End() antes de asignar el font, para que el contador de fonts se asigne correctamente y no obtengas mensajes de tipo EXCESS RELEASE o lo que es peor que se te queden fonts ( objetos ) sin destruir al salir de la aplicación
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6548
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Cambiar tipo de letra en aplicación

Postby José Luis Sánchez » Tue Mar 08, 2022 7:31 am

Gracias de nuevo Cristóbal, sigo con mis dudas. ¿ Esto es aplicable también a los diálogos desde recursos ?

Yo cuando creo un diálogo desde recursos hago lo siguiente:

Code: Select all  Expand view
  DEFINE DIALOG oDlg RESOURCE "USEDIT" OF oParent;
      TITLE aTitle[ nMode ]
   oDlg:SetFont( oApp():oFont )


¿ Debería hacer un oDlg:oFont:End() antes de hacer el SetFont() ?

Olvidé decir que en mis aplicaciones solo utilizo una fuente que defino en la clase principal oApp, y que luego reutilizo en todos los .prg de la aplicación. oApp():oFont me devuelve esa fuente.Lo digo por tu comentario sobre el contador de fuentes, pero creo que te refieres a las fuentes de las clases que crean su propia fuente.

Saludos,
User avatar
José Luis Sánchez
 
Posts: 556
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Re: Cambiar tipo de letra en aplicación

Postby cnavarro » Tue Mar 08, 2022 9:37 am

José Luis Sánchez wrote:Gracias de nuevo Cristóbal, sigo con mis dudas. ¿ Esto es aplicable también a los diálogos desde recursos ?

Yo cuando creo un diálogo desde recursos hago lo siguiente:

Code: Select all  Expand view
  DEFINE DIALOG oDlg RESOURCE "USEDIT" OF oParent;
      TITLE aTitle[ nMode ]
   oDlg:SetFont( oApp():oFont )


¿ Debería hacer un oDlg:oFont:End() antes de hacer el SetFont() ?

Olvidé decir que en mis aplicaciones solo utilizo una fuente que defino en la clase principal oApp, y que luego reutilizo en todos los .prg de la aplicación. oApp():oFont me devuelve esa fuente.Lo digo por tu comentario sobre el contador de fuentes, pero creo que te refieres a las fuentes de las clases que crean su propia fuente.

Saludos,


No, no has de hacerlo si simplemente asignas un font inicialmente a un contenedor o control
Mi comentario era en relación a si cambias posteriormente el font
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6548
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Cambiar tipo de letra en aplicación

Postby hmpaquito » Tue Mar 08, 2022 10:35 am

cnavarro wrote:
Tienes que hacer el End() antes de asignar el font, para que el contador de fonts se asigne correctamente y no obtengas mensajes de tipo EXCESS RELEASE o lo que es peor que se te queden fonts ( objetos ) sin destruir al salir de la aplicación



Estimado Cristóbal,

Siempre entendí que en Windows, cuando cierras la aplicacion Windows libera todos los recursos, lo cual hace posible que ninguna aplicacion por mala praxis tire abajo el sistema.
Ahora bien, es la propia aplicacion la que va a tener dificultades si su consumo de recursos crece desordenadamente puesto que tiene un límite teórico máximo de 10.000 objetos, al menos en Win32

Saludos cordiales
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Cambiar tipo de letra en aplicación

Postby cnavarro » Tue Mar 08, 2022 10:49 am

Estimado Paquito
Teóricamente, así debería ser, pero el hecho es que no lo es
Tengo la costumbre de añadir al principio de mi aplicacion, antes de crear ningún control ni recurso gdi
Code: Select all  Expand view

   SetResDebug( .T. )
 


y justo antes de salir de la function Main
Code: Select all  Expand view

   if File( "checkres.txt" )
      FErase( "checkres.txt" )
   endif
   CheckRes()
 


En ese fichero "checkres.txt" podrás ver si hay recursos pendientes de ser "destruídos"
Si esto no lo has usado nunca, es posible que te lleves una sorpresita
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6548
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Cambiar tipo de letra en aplicación

Postby hmpaquito » Tue Mar 08, 2022 11:21 am

Estimado Cristóbal,

"o lo que es peor que se te queden fonts ( objetos ) sin destruir al salir de la aplicación"


Mi comentario era en torno a lo quoteado arriba que no entendí bien porque tu quisiste decir en el momento "justo antes de salir de la aplicacion" cuando yo entendi "despues de salir de la aplicacion", es decir, recursos que quedaban "colgados" aun con la aplicacion cerrad.

Disculpa mi falta de entendimiento. Debe ser la edad. Lucharé contra ello :)

Un cordial saludo
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Cambiar tipo de letra en aplicación

Postby cnavarro » Tue Mar 08, 2022 12:27 pm

Paquito, no nos engañes, que estás hecho un chaval.
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6548
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Cambiar tipo de letra en aplicación

Postby José Luis Sánchez » Wed Mar 09, 2022 5:57 pm

Hola otra vez :-)
Sigo con mi cambio de letra en la aplicación. Ahora el problema que tengo es que las funciones de mostrar mensajes de FWH - msginfo(), msgalert(), msgyesno() - utilizan la fuente del sistema.
¿ Se puede asignar una fuente a estos diálogos ? ¿ Cómo ?

Saludos,
User avatar
José Luis Sánchez
 
Posts: 556
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Re: Cambiar tipo de letra en aplicación

Postby hmpaquito » Wed Mar 09, 2022 6:46 pm

José Luis,

Es un viejo requerimiento de Fwh.

IMHO, sólo hay dos opciones:

1.- Crear un set de funciones alternativas a msginfo, msgyesno, msgnoyes, msgstop, etc, basado en un dialogo... Alguna vez vi algo asi en el foro
2.- Tirar de C y usar la funcion setfont aplicada a los objetos text de las ventanas msginfo, msgyesno, msgnoyes, siempre claro está que pudieramos conocer su handle, etc...

Salu2
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Cambiar tipo de letra en aplicación

Postby cnavarro » Wed Mar 09, 2022 11:13 pm

Recuerda que si usas al principio de tu aplicación
Code: Select all  Expand view

CenterMsgs( .t. )
 


Los mensajes saldrán centrados en la ventana activa y no centrados respecto a las dimensiones del escritorio
Sé que mi respuesta no tiene nada que ver con tu pregunta aparentemente, pero lo que quiero decir es que ojalá tomara por lo menos el font del "contenedor" de referencia que toma en cada caso ( con el CenterMsgs( .t. ) y sin él )
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6548
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Cambiar tipo de letra en aplicación

Postby José Luis Sánchez » Thu Mar 10, 2022 7:42 am

Paquito, precisamente tengo un juego de funciones alternativas a esas funciones, pero es lo que quiero evitar para que tengan el aspecto nativo de los mensajes de Windows.

Cristóbal, no conocía el tema del centrado de mensajes, lo voy a probar a ver si afecta en algo a las fuentes.

Gracias a los dos por contestar :-)

Saludos,
User avatar
José Luis Sánchez
 
Posts: 556
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Adolfredo Martinez and 68 guests