Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0189: Schriftart anmelden und abmelden

 von 

Beschreibung 

Es ist nicht gewährleistet, daß eine neu in den Schriftartenordner kopierte Schriftart direkt ansprechbar ist. Somit sollte man seine mitgebrachten Fonts temporär registrieren lassen.

Update von Manfred am 19. August 2003: Nun sollte die Schriftart auch in allen Subcontrols funktionieren.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

AddFontResourceA (AddFontResource), RemoveFontResourceA (RemoveFontResource), SendMessageA (SendMessage)

Download:

Download des Beispielprojektes [43,44 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Textfeld "Text1"
' Steuerelement: Schaltfläche "Command1"

Option Explicit

Private Declare Function AddFontResource Lib "gdi32" _
        Alias "AddFontResourceA" (ByVal lpFileName As _
        String) As Long
        
Private Declare Function RemoveFontResource Lib "gdi32" _
        Alias "RemoveFontResourceA" (ByVal lpFileName As _
        String) As Long

Private Declare Function SendMessage Lib "user32" Alias _
        "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As _
        Long, ByVal wParam As Long, lParam As Any) As Long

Private Const HWND_BROADCAST As Long = &HFFFF&
Private Const WM_FONTCHANGE As Long = &H1D&

Private Sub Command1_Click()
    Dim Result As Long
    
    Result = AddFontResource(App.Path & _
        IIf(Right(App.Path, 1) = "\", "", "\") & "marvosym.ttf")
        
    SendMessage HWND_BROADCAST, WM_FONTCHANGE, 0, 0
    Text1.FontName = "MarVoSym"
End Sub

Private Sub Form_Load()
    Text1.Text = "Klicken Sie auf die Schaltflaeche um " _
                & "die neue Schriftart temporaer zu " _
                & "registrieren"
    Text1.FontSize = 16
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Dim Result As Long
    
    Result = RemoveFontResource(App.Path & _
        IIf(Right(App.Path, 1) = "\", "", "\") & "marvosym.ttf")
    
    SendMessage HWND_BROADCAST, WM_FONTCHANGE, 0, 0
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 4 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Matthias Tieben am 21.02.2007 um 07:49

Funktioniert bei mir (VB 6 mit SP 6; WinXP Prof. mit SP 2) nur, wenn ich das SendMessage weglasse. Sonst friert das Programm sowohl in der IDE als auch als EXE ein!

MfG

Matthias Tieben

Kommentar von Norbert Müller am 18.01.2007 um 17:17

Der Code funktioniert wunderbar, aber zu was brauche ich eigentlich die SendMessage Lib?

MfG
N. Müller

Kommentar von Reiner Doerr am 23.05.2005 um 22:43

Die Umsetzung des o.g. Codes hat wunderbar geklappt. Für einen Hinweis darauf, wie ich eine dauerhaufte Einbindung eines Fonts zur Laufzeit in die Registry mittels SaveSettings bewältigen könnte, wäre ich sehr dankbar. Die theoretische Vorgehensweise ist mir dabei schon präsent, mir wäre vor allem an einem Beispiel mit Syntax gelegen.
MfG und herzlichen Dank
Reiner Dörr

Kommentar von SCHASCH am 05.02.2004 um 10:31

Habe die "remove"-Funktion unter win98 getestet und gemerkt daß sie nicht fehlerlos funktioniert.
Ich konnte unter win98 die .ttf-Datei nicht löschen nach aufruf der Function.