Schriftart in VB nutzen, ohne diese zu installieren

  • Allgemein

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von SpaceyX.

    Schriftart in VB nutzen, ohne diese zu installieren

    Hey,

    bin schon wieder erfolglos am googlen gewesen... ahh... :pinch:

    gibt es die möglichkeit eine schriftart in vb zu nutzen ohne das diese auf dem pc installiert wird.

    die schriftart würde dann im web liegen oder im ordner mit dem tool :thumbsup:

    geht das in vb, bei websites kann man dies ja durchaus nutzen.



    freue mich auf eure antworten.
    habe es eingebaut wie auf folgendem link:
    msdn.microsoft.com/de-de/library/vstudio/y505zzfw.aspx
    (in einem panel, und es funktioniert)

    aber wie kann ich das allgemein machen, sodass die schriftart z.b. für eine ganze form übernommen wird.

    VB.NET-Quellcode

    1. Private Sub Panel1_Paint(sender As Object, e As PaintEventArgs) Handles Panel1.Paint
    2. Dim pointF As New PointF(10, 0)
    3. Dim solidBrush As New SolidBrush(Color.Black)
    4. Dim count As Integer = 0
    5. Dim familyName As String = ""
    6. Dim familyNameAndStyle As String
    7. Dim fontFamilies() As FontFamily
    8. Dim privateFontCollection As New PrivateFontCollection()
    9. ' Add three font files to the private collection.
    10. privateFontCollection.AddFontFile("C:\test\test\Ubuntu-L.ttf")
    11. ' Get the array of FontFamily objects.
    12. fontFamilies = privateFontCollection.Families
    13. ' How many objects in the fontFamilies array?
    14. count = fontFamilies.Length
    15. ' Display the name of each font family in the private collection
    16. ' along with the available styles for that font family.
    17. Dim j As Integer
    18. While j < count
    19. ' Get the font family name.
    20. familyName = fontFamilies(j).Name
    21. If fontFamilies(j).IsStyleAvailable(FontStyle.Regular) Then
    22. familyNameAndStyle = ""
    23. familyNameAndStyle = familyNameAndStyle & familyName
    24. familyNameAndStyle = familyNameAndStyle '& " Regular"
    25. Dim regFont As New Font( _
    26. familyName, _
    27. 25, _
    28. FontStyle.Regular, _
    29. GraphicsUnit.Pixel)
    30. e.Graphics.DrawString(familyNameAndStyle, regFont, solidBrush, pointF)
    31. pointF.Y += regFont.Height
    32. j += 1
    33. End If
    34. pointF.Y += 10
    35. End While
    36. End Sub
    Wenn Du die Font der Form-Instanz zuweist, dann übernehmen alle ChildControls diese Font. Somit ist das in 1 Zeile Code erledigt.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SpaceyX“ ()

    hab da noch ein paar probleme :pinch:

    ich habe jetzt das beispiel in " Form1_Paint ", geschrieben, soweit
    alles gut, nun habe ich die font von form1 mit "Form1.Font = regFont" geändert.
    bis dahin kein Problem, aber nun, habe ich viele Panels & Tabpages dadrin,
    bei den ändert sich die Schriftart leider nicht. ;(

    Eine Lösung wäre es mit,

    VB.NET-Quellcode

    1. For Each tb As Control In Panel1.Controls
    2. If TypeOf tb Is Label Then
    3. DirectCast(tb, Label).Font = regFont1
    4. End If
    5. Next

    zu machen, aber es gibt bestimmt noch eine besser lösung :?: :!:
    Hey @Azu393:,

    ich weiß ja nicht, was Du machst. Jedoch wirkt sich eine Änderung der Font-Property auf alle ChildControls des jeweiligen Containers aus. Intern wird hier eine LayoutTransaction angestossen, sobald die Property gesetzt wird.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim f As New System.Drawing.Text.PrivateFontCollection()
    4. f.AddFontFile("test.ttf")
    5. Me.Font = New Font(f.Families(0), 10)
    6. End Sub
    7. End Class


    Ändere die Font Deiner Form und sie wird sich auf alle anderen Controls auswirken, egal wie verschachtelt sie sind.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    VB.NET-Quellcode

    1. Imports System.Drawing.Text
    2. Public Class Form10
    3. Dim pointF As New PointF(10, 0)
    4. Dim solidBrush As New SolidBrush(Color.Black)
    5. Dim count As Integer = 0
    6. Dim familyName As String = ""
    7. Dim familyNameAndStyle As String
    8. Dim fontFamilies() As FontFamily
    9. Dim privateFontCollection As New PrivateFontCollection()
    10. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
    11. Dim pointF As New PointF(10, 0)
    12. Dim solidBrush As New SolidBrush(Color.Black)
    13. Dim count As Integer = 0
    14. Dim familyName As String = ""
    15. Dim familyNameAndStyle As String
    16. Dim fontFamilies() As FontFamily
    17. Dim privateFontCollection As New PrivateFontCollection()
    18. privateFontCollection.AddFontFile("C:\test\font\Ubuntu-L.ttf")
    19. fontFamilies = privateFontCollection.Families
    20. count = fontFamilies.Length
    21. Dim j As Integer
    22. familyName = fontFamilies(j).Name
    23. If fontFamilies(j).IsStyleAvailable(FontStyle.Regular) Then
    24. familyNameAndStyle = ""
    25. familyNameAndStyle = familyNameAndStyle & familyName
    26. Dim regFont As New Font(familyName, 10, FontStyle.Regular, GraphicsUnit.Pixel)
    27. Form1.Font = regFont
    28. e.Graphics.DrawString(familyNameAndStyle, regFont, solidBrush, pointF)
    29. pointF.Y += regFont.Height
    30. End If
    31. pointF.Y += 10
    32. End Sub
    33. Private Sub Form10_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    34. Dim f As New System.Drawing.Text.PrivateFontCollection()
    35. f.AddFontFile("C:\test\font\Ubuntu-L.ttf")
    36. Me.Font = New Font(f.Families(0), 10)
    37. End Sub
    38. Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    39. Dim f As New System.Drawing.Text.PrivateFontCollection()
    40. f.AddFontFile("C:\test\font\Ubuntu-L.ttf")
    41. Me.Font = New Font(f.Families(0), 10)
    42. End Sub
    @Azu393:

    Das ist wieder ein Paradebeispiel, was es einem einbringt, wenn man irgendwo Code kopiert, ohne ihn zu verstehen. Erklär mir mal mit eigenen Worten, was der Code im Paint-EventHandler macht? Kannst Du nicht, oder?

    Also. Entferne den gesamten Paint-EventHandler, das ist vollkommen unnötig. Es reicht, die Font-Property im Load-EventHandler zu setzen, noch besser im Konstruktor nach dem InitializeCompenents-Aufruf.

    Deklariere nur eine globale Instanz der Collection, das genügt.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Dein Code sollte so aussehen:

    VB.NET-Quellcode

    1. Public Class Form1
    2. 'Globale Instanz, für den Zugriff aus der ganzen Klasse heraus.
    3. Private _fontCollection As New System.Drawing.Text.PrivateFontCollection()
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. _fontCollection.AddFontFile("test.ttf")
    6. Me.Font = New Font(_fontCollection.Families(0), 10)
    7. End Sub
    8. End Class


    Ich empfehle die Aneignung von Grundlagen, wenn Du ernsthaft vor hast, mit dem Programmieren weiter zu machen. Durch das Abgreifen von Code hat noch niemand was gelernt. Von meiner Seite aus war es das.

    Good luck!
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    danke für deine zeit und hilfe, jedoch möchte ich ernsthaft darauf hinweisen das wir hier im bereich der grundlagen sind :P


    ps.
    bei deiner lösung ändert sich lediglich die schrift in der "form1", aber leider nicht im label oder in der textbox welche sich auf der "form1" befinden.


    pps.
    thema hat sich erledigt, andere lösung eingebaut :thumbsup:

    Azu393 schrieb:

    jedoch möchte ich ernsthaft darauf hinweisen das wir hier im bereich der grundlagen sind
    Was aber nicht bedeutet, dass wir dir alles Vorkauen müssen/werden. Ebensowenig ist das ein Freifahrschein für dich, einfach alles als "zu schwer" abzutun und uns arbeiten zu lassen.
    Wenn du etwas nicht verstehst, dann ist es deine Aufgabe, uns genau danach zu fragen oder andere Informationsquellen zu Rate zu ziehen. Entweder das, oder du lässt es eben, aber nach Code betteln ist nunmal nicht.

    Und falls sich das jetzt in irgend ner Weise unverschämt anhört, ist überhaupt nicht böse gemeint, ich will dir nur klar machen, wies so zuläuft (im übrigen ist das nicht nur hier, sondern quasi überall so).

    Es wäre übrigens auch nett, wenn du deine Lösung hier posten könntest.
    Um es nochmal deutlich zu sagen. Eine Änderung der .Font-Property wirkt sich auf alle ChildControls aus. Ich hab 0 Plan, was Du da veranstaltest, jedoch ist es falsch.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o