Postupy: Vytvoření soukromé kolekce písem
Třída PrivateFontCollection dědí z FontCollection abstraktní základní třídy. Objekt můžete použít PrivateFontCollection k údržbě sady písem speciálně pro vaši aplikaci. Kolekce privátních písem může obsahovat nainstalovaná systémová písma i písma, která nebyla v počítači nainstalována. Chcete-li přidat soubor písma do soukromé kolekce písem, zavolejte AddFontFile metodu objektu PrivateFontCollection .
Families Vlastnost objektu PrivateFontCollection obsahuje pole FontFamily objektů.
Počet rodin písem v soukromé kolekci písem nemusí být nutně stejný jako počet souborů písem, které byly přidány do kolekce. Předpokládejme například, že do kolekce přidáte soubory ArialBd.tff, Times.tff a TimesBd.tff. V kolekci budou tři soubory, ale jenom dvě rodiny, protože Times.tff a TimesBd.tff patří do stejné rodiny.
Příklad
Následující příklad přidá do objektu PrivateFontCollection následující tři soubory písem:
C:\systemroot\Fonts\Arial.tff (Arial, regular)
C:\systemroot\Fonts\CourBI.tff (Courier New, bold kurzíva)
C:\systemroot\Fonts\TimesBd.tff (Times New Roman, bold)
Kód načte pole FontFamily objektů z Families vlastnosti objektu PrivateFontCollection .
Pro každý FontFamily objekt v kolekci kód volá metodu IsStyleAvailable k určení, zda jsou k dispozici různé styly (běžné, tučné, kurzíva, tučné kurzíva, podtržení a přeškrtnutí). Argumenty předané IsStyleAvailable metodě jsou členy výčtu FontStyle .
Pokud je k dispozici daná kombinace rodiny/stylu, Font objekt se vytvoří pomocí této řady a stylu. Prvním argumentem Font předaný konstruktoru je název rodiny písem (nikoli FontFamily objekt, jako je tomu u jiných variant konstruktoru Font ). Po vytvoření objektu Font se předá DrawString metodě Graphics třídy k zobrazení rodinného jména spolu s názvem stylu.
Výstup následujícího kódu je podobný výstupu uvedenému na následujícím obrázku:
Arial.tff (který byl přidán do privátní kolekce písem v následujícím příkladu kódu) je soubor písma pro běžný styl Arial. Všimněte si však, že výstup programu zobrazuje několik dostupných stylů kromě běžné pro rodinu písem Arial. Je to proto, že GDI+ může simulovat tučné písmo, kurzívu a tučné kurzívu z běžného stylu. GDI+ může také vytvářet podtržení a přeškrtnutí z běžného stylu.
Podobně může GDI+ simulovat tučný kurzívu z tučného stylu nebo kurzívy. Výstup programu ukazuje, že styl tučné kurzívy je k dispozici pro rodinu Times, i když TimesBd.tff (Times New Roman, bold) je jediným souborem Times v kolekci.
// Helper function to print text in a font and style
private float DrawFont(Graphics graphicsObj,
FontFamily family,
FontStyle style,
SolidBrush colorBrush,
PointF location,
string styleName)
{
// The string to print, which contains the family name and style
string familyNameAndStyle = $"{family.Name} {styleName}";
// Create the font object
using (Font fontObject = new Font(family.Name, 16, style, GraphicsUnit.Pixel))
{
// Draw the string
graphicsObj.DrawString(familyNameAndStyle, fontObject, colorBrush, location);
// Return the height of the font
return fontObject.Height;
}
}
// The OnPaint method of a form, which provides the graphics object
protected override void OnPaint(PaintEventArgs e)
{
PointF location = new PointF(10, 0);
SolidBrush solidBrush = new SolidBrush(Color.Black);
FontFamily[] fontFamilies;
PrivateFontCollection privateFontCollection = new PrivateFontCollection(); // Dispose later
// Add three font files to the private collection.
privateFontCollection.AddFontFile(System.Environment.ExpandEnvironmentVariables("%systemroot%\\Fonts\\Arial.ttf"));
privateFontCollection.AddFontFile(System.Environment.ExpandEnvironmentVariables("%systemroot%\\Fonts\\CourBI.ttf"));
privateFontCollection.AddFontFile(System.Environment.ExpandEnvironmentVariables("%systemroot%\\Fonts\\TimesBD.ttf"));
// Get the array of FontFamily objects.
fontFamilies = privateFontCollection.Families;
// Process each font in the collection
for (int i = 0; i < fontFamilies.Length; i++)
{
// Draw the font in every style
// Regular
if (fontFamilies[i].IsStyleAvailable(FontStyle.Regular))
location.Y += DrawFont(e.Graphics, fontFamilies[i], FontStyle.Regular, solidBrush, location, "Regular");
// Bold
if (fontFamilies[i].IsStyleAvailable(FontStyle.Bold))
location.Y += DrawFont(e.Graphics, fontFamilies[i], FontStyle.Bold, solidBrush, location, "Bold");
// Italic
if (fontFamilies[i].IsStyleAvailable(FontStyle.Italic))
location.Y += DrawFont(e.Graphics, fontFamilies[i], FontStyle.Italic, solidBrush, location, "Italic");
// Bold and Italic
if (fontFamilies[i].IsStyleAvailable(FontStyle.Bold) &&
fontFamilies[i].IsStyleAvailable(FontStyle.Italic))
location.Y += DrawFont(e.Graphics, fontFamilies[i], FontStyle.Bold | FontStyle.Italic, solidBrush, location, "BoldItalic");
// Underline
if (fontFamilies[i].IsStyleAvailable(FontStyle.Underline))
location.Y += DrawFont(e.Graphics, fontFamilies[i], FontStyle.Underline, solidBrush, location, "Underline");
// Strikeout
if (fontFamilies[i].IsStyleAvailable(FontStyle.Strikeout))
location.Y += DrawFont(e.Graphics, fontFamilies[i], FontStyle.Strikeout, solidBrush, location, "Strikeout");
// Extra space between font families
location.Y += 10;
}
privateFontCollection.Dispose();
}
' Helper function to print text in a font and style
Private Function DrawFont(graphicsObj As Graphics,
family As FontFamily,
style As FontStyle,
colorBrush As SolidBrush,
location As PointF,
styleName As String) As Single
' The string to print, which contains the family name and style
Dim familyNameAndStyle As String = $"{family.Name} {styleName}"
' Create the font object
Using fontObject As New Font(family.Name, 16, style, GraphicsUnit.Pixel)
' Draw the string
graphicsObj.DrawString(familyNameAndStyle, fontObject, colorBrush, location)
' Return the height of the font
Return fontObject.Height
End Using
End Function
' The OnPaint method of a form, which provides the graphics object
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim location As New PointF(10, 0)
Dim solidBrush As New SolidBrush(Color.Black)
Dim fontFamilies() As FontFamily
Dim privateFontCollection As New PrivateFontCollection() ' Dispose later
' Add three font files to the private collection.
privateFontCollection.AddFontFile(System.Environment.ExpandEnvironmentVariables("%systemroot%\Fonts\Arial.ttf"))
privateFontCollection.AddFontFile(System.Environment.ExpandEnvironmentVariables("%systemroot%\Fonts\CourBI.ttf"))
privateFontCollection.AddFontFile(System.Environment.ExpandEnvironmentVariables("%systemroot%\Fonts\TimesBD.ttf"))
' Get the array of FontFamily objects.
fontFamilies = privateFontCollection.Families
' Process each font in the collection
For i = 0 To fontFamilies.Length - 1
' Draw the font in every style
' Regular
If fontFamilies(i).IsStyleAvailable(FontStyle.Regular) Then
location.Y += DrawFont(e.Graphics, fontFamilies(i), FontStyle.Regular, solidBrush, location, "Regular")
End If
' Bold
If fontFamilies(i).IsStyleAvailable(FontStyle.Bold) Then
location.Y += DrawFont(e.Graphics, fontFamilies(i), FontStyle.Bold, solidBrush, location, "Bold")
End If
' Italic
If fontFamilies(i).IsStyleAvailable(FontStyle.Italic) Then
location.Y += DrawFont(e.Graphics, fontFamilies(i), FontStyle.Italic, solidBrush, location, "Italic")
End If
' Bold and Italic
If fontFamilies(i).IsStyleAvailable(FontStyle.Italic) And
fontFamilies(i).IsStyleAvailable(FontStyle.Italic) Then
location.Y += DrawFont(e.Graphics, fontFamilies(i), FontStyle.Bold Or FontStyle.Italic, solidBrush, location, "BoldItalic")
End If
' Underline
If fontFamilies(i).IsStyleAvailable(FontStyle.Underline) Then
location.Y += DrawFont(e.Graphics, fontFamilies(i), FontStyle.Underline, solidBrush, location, "Underline")
End If
' Strikeout
If fontFamilies(i).IsStyleAvailable(FontStyle.Strikeout) Then
location.Y += DrawFont(e.Graphics, fontFamilies(i), FontStyle.Strikeout, solidBrush, location, "Strikeout")
End If
' Extra space between font families
location.Y += 10
Next
privateFontCollection.Dispose()
End Sub
Probíhá kompilace kódu
Předchozí příklad je určen pro použití s model Windows Forms a vyžaduje PaintEventArgse
, což je parametr PaintEventHandler.
Viz také
.NET Desktop feedback