C# ile Özel Font Kullanımı
Son yaptığım proje için doğan bir ihtiyacımı sizinle paylaşmak isterim. Bu projede resimler üzerine kullanıcının seçeceği font aileleri ve boyutlarda yazı yazmam gerekiyordu. Farklı olan nokta ise sistemde yüklü olmayan fontların da sadece .ttf uzantılı dosyalar verilerek kullanılabilmesinin istenmesiydi. Bu durumda sorduğum soru ise C# ile font dosyalarını okuyup birer FontFamily nesnesi haline getirmenin mümkün olup olmadığı oldu. Araştırmalarım sonucunda karşıma PrivateFontCollection sınıfı çıktı.
System.Drawing.Text isimalanı içerisinde bulunan bu sınıftan alınan bir nesne, içerisinde birden çok FontFamily nesnesini saklayabilir. Ancak koleksiyonun içerisine fontlar ancak AddFontFile metodu ile eklenebilir.
Aşağıdaki uygulamada bir Winforms projesi kullandım. Proje arayüzü sadece bir labeldan oluşmakta. Özel yüklediğmiz fontu bu labelın font değeri olarak atayarak, işlemin başarılı olup olmadığını anlayacağız. Bu amaçla form sınıfında bir LoadCustomFont metodu hazırladım. Bu metot verilen adresteki font dosyasını yükleyip, ona ait olan FontFamily nesnesini geriye döndürecektir. Font dosyası olarak da proje klasörü içerisine koyduğum Insula.ttf kullanılacaktır.
Form1 Design :
using System.Drawing;
using System.Drawing.Text;
using System.Windows.Forms;
namespace OzelFont
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//15 em büyüklüğünde Insula kullanan font nesnesini hazırlayıp, atama
FontFamily aile = LoadCustomFont(@"..\..\Insula.ttf");
lbl_sonuc.Font = new Font(aile, 20);
}
public FontFamily LoadCustomFont(string url)
{
PrivateFontCollection customs = new PrivateFontCollection();
customs.AddFontFile(url); //font dosyasını verilen adresten yükleme
return customs.Families[0]; //yüklenen ilk fontfamily nesnesini döndürür
}
}
}
Yukarıdaki kodlarla oluşturulan proje çalıştırıldığında aşağıdaki ekran görüntüsünde olduğu gibi label üzerinden yazı fontunun değiştiği ve Insula haline geldiği görülecektir.
Son Ekran Görüntüsü :
Yüce ÇELİKEL
MCPD Enterprise Developer