Comunidad de diseño web y desarrollo en internet online

¿Cómo listar las fuentes de sistemas y las embebidas?

Haciendo referencia a mi anterior tip de embeber fuentes, ahora pasaremos a listar las fuentes que tenemos instaladas en el sistema y, por separado, las fuentes que tenemos embebidas. Nos valdremos del componente ComboBox para poder tenerlo ordenado.

Para eso utilizamos el método enumerateFonts de la clase Font, que nos pide como parámetro un Boolean, que de estar en true, nos lista las fuentes del sistema y las embebidas, y de estar en false, nos muestra sólo las embebidas.

Abrimos flash y colocamos el siguiente código:

Código :

var allFonts:Array = Font.enumerateFonts(true);


Y para listar, lo hacemos en un for...in extrayendo la propiedad fontName

Código :

for (var i in allFonts) {
   trace( (allFonts[i] as Font).fontName );
}


Veremos en la ventana del output la relación de fuentes de nuestro computador, ahora lo agregaremos a un comboBox, quedando el código así:

Código :

var allFonts:Array = Font.enumerateFonts(true);
for (var i in allFonts) {
   comboFont.addItem({label:(allFonts[i] as Font).fontName, data:i} );
}


Y para poder interactuar un poco, le agregamos un listener.

Código :

comboFont.addEventListener(Event.CHANGE, cambiarFuentesSistema);
function cambiarFuentesSistema(event:Event):void {
   cambiarFuente(ComboBox(event.target).selectedItem.label, false);
}


Crearemos una función llamada cambiarFuente, donde modificaremos el TextFormat y cambiaremos la fuente para poder ver la diferencia. A esta función le pasaremos la fuente seleccionada.

Código :

function cambiarFuente(fuente:String, embed:Boolean):void{
   txt_fmt.font=fuente;   
   campo.autoSize=TextFieldAutoSize.CENTER;
   campo.defaultTextFormat=txt_fmt;
   campo.embedFonts=embed;
   campo.text="esta es una prueba";
   if(embed)
      campo.rotation = 45;
   else
      campo.rotation = 0;
}

Fuentes Embebidas



El proceso es el mismo, solo cambia el false por el true en el método enumerateFonts:

Código :

var embeddedFonts:Array = Font.enumerateFonts(false);
embeddedFonts.sortOn(Font2, Array.CASEINSENSITIVE);

for (i in embeddedFonts) {
   trace((embeddedFonts[i] as Font).fontName)
}


Tranquilamente lo ponemos en otro combo box y tenemos el siguiente resultado



Entonces ya podemos jugar un poco con esto ;)

El código completo es:

Código :

import fl.events.*;


campo.x = 100;
campo.y = 50;
campo.selectable=false;
//
var txt_fmt:TextFormat=new TextFormat();
txt_fmt.size=24;
//
//
//Fuentes del sistema
var allFonts:Array = Font.enumerateFonts(true);
for (var i in allFonts) {
   comboFont.addItem({label:(allFonts[i] as Font).fontName, data:i} );
}
//
//
//Fuentes embebidas
var embeddedFonts:Array = Font.enumerateFonts(false);
for (i in embeddedFonts) {
   comboFont2.addItem({label:(embeddedFonts[i] as Font).fontName, data:i} );
}
//
//
//listener
comboFont.addEventListener(Event.CHANGE, cambiarFuentesSistema);
comboFont2.addEventListener(Event.CHANGE, cambiarFuentesEmbebidas);
//
//
//
function cambiarFuentesSistema(event:Event):void {
   cambiarFuente(ComboBox(event.target).selectedItem.label, false);
}
function cambiarFuentesEmbebidas(event:Event):void {
   cambiarFuente(ComboBox(event.target).selectedItem.label, true);
}
function cambiarFuente(fuente:String, embed:Boolean):void{
   txt_fmt.font=fuente;   
   campo.autoSize=TextFieldAutoSize.CENTER;
   campo.defaultTextFormat=txt_fmt;
   campo.embedFonts=embed;
   campo.text="esta es una prueba";
   if(embed)
      campo.rotation = 45;
   else
      campo.rotation = 0;
}


Archivos del tip

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate