Schriftart aus Ressource in den Font Ordner kopieren

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von DrVisualBasic.

    Schriftart aus Ressource in den Font Ordner kopieren

    Hallo Zusammen.
    Mein Programm basiert auf der Windows Schriftart Calibri. Leider hat nicht jeder diese Schriftart instaliert. Über die Filesystem.FileExist Methode kann ich prüfen ob die Schriftart instaliert ist. Nur leider kann ich die Schriftart dann nicht instalieren. Der Zugriff ist verweigert. Gibt es eine Simple Methode um Schriftarten mit vb08 zu instalieren?

    LG Max :thumbsup:
    hey,

    ich kenne ein Programm (Smart Install Maker), mit dem man Installationsdateien erstellen kann. Du kannst einstellen, welche Dateien installiert/deinstalliert werden sollen, du kannst einstellen, ob was in die Registry geschrieben werden soll und du kannst einstellen, ob die fertige Installationsdatei auch Schriftarten mitinstalliert! Und noch vieles mehr...
    Ich hatte auch schon oft darüber nachgedacht.. wie is das mit der Schrift? Wie kann man die mitinstallieren?
    Und dieses Programm ist echt super! :thumbup: :thumbup:
    Link: Smart Install Maker - Trial Download

    LG
    Du kannst auch eine Form vor dein eigentliches Programm einfügen, die per Buttonklick die Schrift installiert. Hier der Code:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Dim source As String
    5. Dim destination As String
    6. source = "C:\Users\Administrator\Desktop\Schriftart.ttf" 'Pfad der zu kopierenden Datei
    7. destination = "C:\Windows\Fonts\Schriftart.ttf" 'Pfad des Zielordners
    8. File.Copy(source, destination)
    9. End Sub
    10. End Class

    Hoffe ich konnte helfen
    LG
    Ihr alle wisst schon, dass die Schriftart Calibri nicht unbedingt als "Calibri.ttf" im Fontordner liegt?
    Es verhält sich ähnlich wie mit MP3-Dateien, der Dateiname ist "supertolleslied.mp3", aber in den ID3-Tags steht der richtige Titel. ;)
    Ich habe das Thema nicht so ganz verstanden. Was muss ich jetzt machen das wenn die Schriftart Calibri nicht vorhanden ist zum Ordner Fonts hinzugefügt wird? Bitte über mein programm da es als Exe ausführbar sein soll und der user nichts manuell machen muss. Das Programm soll einfach nur beim start prüfen ob die Schrift da ist und wenn nicht diese Instalieren (was auch immer) so dass die Schrift im Programm Calibri ist:)
    kay. hab das nur nicht so richtig verstanden:
    Ihr alle wisst schon, dass die Schriftart Calibri nicht unbedingt als "Calibri.ttf" im Fontordner liegt?
    Es verhält sich ähnlich wie mit MP3-Dateien, der Dateiname ist "supertolleslied.mp3", aber in den ID3-Tags steht der richtige Titel. ;)

    egal ich weiss ja jetzt was du meintest

    @Tom
    Super guter Post Danke!! :thumbup:
    Der Zweck sollte eigentlich klar sein :D
    Du kannst damit deinen eigenen Font aus der Anwendung heraus verwenden, welchen du vorher in deine Ressourcen gepackt hast. Im Grunde wird der Font durch den Code in den Arbeitsspeicher geladen und bei Bedarf abgerufen.
    "My.Resources.Visitor" war in dem Fall der Font den ich verwendet habe. Bei dir wäre es dann Calibri.

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Imports System.Drawing.Text
    3. Module Module1
    4. Private _pfc As PrivateFontCollection = Nothing
    5. Public ReadOnly Property GetInstance(ByVal Size As Single, ByVal style As FontStyle) As Font ' Size und Fontstyle sollten klar sein
    6. Get
    7. If _pfc Is Nothing Then LoadFont() 'wenn der Font noch nicht im Speicher existiert wird er durch LoadFont eingelesen, quasi beim ersten Aufruf des Moduls
    8. Return New Font(_pfc.Families(0), Size, style)
    9. End Get
    10. End Property
    11. Private Sub LoadFont() 'lädt den Font in den Arbeitsspeicher
    12. Try
    13. _pfc = New PrivateFontCollection
    14. Dim fontMemPointer As IntPtr = Marshal.AllocCoTaskMem(My.Resources.Visitor.Length)
    15. Marshal.Copy(My.Resources.Visitor, 0, fontMemPointer, My.Resources.Visitor.Length)
    16. _pfc.AddMemoryFont(fontMemPointer, My.Resources.Visitor.Length)
    17. Marshal.FreeCoTaskMem(fontMemPointer)
    18. Catch ex As Exception
    19. End Try
    20. End Sub
    21. End Module


    Wenn du nun den Font eines Labels ändern möchtest, tust du das mit folgendem Aufruf:

    VB.NET-Quellcode

    1. Label1.Font = Module1.GetInstance(12, FontStyle.Regular)

    Die "12" ist die Schriftgröße und "Regular" der Fontstyle (kannst du beides bei Bedarf ändern).

    Hast du es denn schonmal ausprobiert?