Saltar al contenido

Fuentes .ttf personalizadas para usar en C# windows.Form

Presta atención ya que en este artículo encontrarás la solución que buscas.

Solución:

Este artículo: Cómo incrustar un true type font muestra cómo hacer lo que pides en .NET.

Cómo incrustar una fuente True Type

Algunas aplicaciones, por motivos estéticos o de estilo visual requerido, incrustarán ciertas fuentes poco comunes para que siempre estén disponibles cuando se necesiten, independientemente de si la fuente está realmente instalada en el sistema de destino.

El secreto de esto es doble. Primero, la fuente debe colocarse en los recursos agregándola a la solución y marcándola como un recurso incrustado. En segundo lugar, en tiempo de ejecución, la fuente se carga a través de un flujo y se almacena en un objeto PrivateFontCollection para su uso posterior.

Este ejemplo utiliza una fuente que es poco probable que esté instalada en su sistema. Alpha Dance es una fuente True Type gratuita que está disponible en la colección de fuentes gratuitas. Esta fuente se incrustó en la aplicación agregándola a la solución y seleccionando la acción de compilación “recurso incrustado” en las propiedades.

Figura 1. El archivo de fuente Alpha Dance incrustado en la solución.

Una vez que el archivo se ha incluido correctamente en los recursos, debe proporcionar un objeto PrivateFontCollection para almacenarlo y un método mediante el cual se carga en la colección. El mejor lugar para hacer esto es probablemente la anulación de carga de formulario o el controlador de eventos. El siguiente listado muestra el proceso. Tenga en cuenta cómo se utiliza el método AddMemoryFont. Requiere un puntero a la memoria en la que se guarda la fuente como un array de bytes En C#, podemos usar la palabra clave insegura por conveniencia, pero VB debe usar las capacidades de manejo de memoria no administrada de las clases Marshal. La última opción, por supuesto, está abierta a los programadores de C# a quienes simplemente no les gusta la palabra clave insegura. PrivateFontCollection pfc = new PrivateFontCollection();

private void Form1_Load(object sender, System.EventArgs e)

  Stream fontStream = this.GetType().Assembly.GetManifestResourceStream("embedfont.Alphd___.ttf");

  byte[] fontdata = new byte[fontStream.Length];
  fontStream.Read(fontdata,0,(int)fontStream.Length);
  fontStream.Close();
  unsafe
  
    fixed(byte * pFontData = fontdata)
    
      pfc.AddMemoryFont((System.IntPtr)pFontData,fontdata.Length);
    
  

Las fuentes pueden tener solo ciertos estilos que están disponibles y, lamentablemente, seleccionar un estilo de fuente que no existe generará una excepción. Para superar esto, se puede consultar la fuente para ver qué estilos están disponibles y solo se pueden usar los proporcionados por la fuente. La siguiente lista demuestra cómo se usa la fuente Alpha Dance al verificar los estilos de fuente disponibles y mostrar todos los que existen. Tenga en cuenta que los estilos de subrayado y tachado son pseudoestilos construidos por el motor de representación de fuentes y no se proporcionan en forma de glifo.

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

  bool bold=false;
  bool regular=false;
  bool italic=false;

  e.Graphics.PageUnit=GraphicsUnit.Point;
  SolidBrush b = new SolidBrush(Color.Black);

  float y=5;

  System.Drawing.Font fn;

  foreach(FontFamily ff in pfc.Families)
  
    if(ff.IsStyleAvailable(FontStyle.Regular))
    
      regular=true;
      fn=new Font(ff,18,FontStyle.Regular);
      e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
      fn.Dispose();
      y+=20;
    
    if(ff.IsStyleAvailable(FontStyle.Bold))
    
      bold=true;
      fn=new Font(ff,18,FontStyle.Bold);
      e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
      fn.Dispose();
      y+=20;
    
    if(ff.IsStyleAvailable(FontStyle.Italic))
    
      italic=true;
      fn=new Font(ff,18,FontStyle.Italic);
      e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
      fn.Dispose();
      y+=20;
    
    if(bold  && italic)
     FontStyle.Italic);
      e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
      fn.Dispose();
      y+=20;
    
    fn=new Font(ff,18,FontStyle.Underline);
    e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
    fn.Dispose();
    y+=20;
    fn=new Font(ff,18,FontStyle.Strikeout);
    e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
    fn.Dispose();
  

  b.Dispose();

La Figura 2 muestra la aplicación en acción.

Figura 2. La fuente incrustada Alpha Dance.

Consulte el controlador de eventos Form1_Paint, muestra específicamente cómo configurar el tipo System.Drawing.Font. Se basa en el uso de la clase System.Drawing.Text.PrivateFontCollection.

Espero que esto ayude.

Use la función API AddFontResourceEx a través de p/invoke, pasando FR_PRIVATE para evitar la instalación de una fuente global. Entonces debería poder pasar el nombre de la fuente al constructor de fuentes como de costumbre.

Editar: si usa PrivateFontCollection y carga la fuente desde un archivo externo, ni siquiera necesita esto. Si carga la fuente desde un recurso incrustado, use la solución de Ash.

Puede que le resulte útil un artículo de MSDN Cómo: crear una colección privada de fuentes.

Aquí tienes las comentarios y valoraciones

Si guardas algún titubeo y disposición de aclarar nuestro división puedes añadir una aclaración y con placer lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *