[gelöst] Einsatz von Fonts in Formular klappt nicht richtig

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Qnode
Beiträge: 81
Registriert: 19.07.2018 20:41
Computerausstattung: i5, 16GB RAM, Win10, PureBasic 6.00 (Windows - x64)

[gelöst] Einsatz von Fonts in Formular klappt nicht richtig

Beitrag von Qnode »

Hey,
ich versuche seit einiger Zeit, Fonts gezielt in Formularen einzusetzen. Dabei komme ich an einem Punkt nicht mehr weiter und auch die entsprechenden Hilfe-Einträge haben mir keine Lösung gebracht.

Im Prinzip geht es einerseits darum, in einem Formular verschiedene Schriftgrößen einzusetzen (z.B. für Überschriften). Das kriege ich hin. Aber ich wollte auch unabhängig davon sein, welche Fonts auf dem Rechner installiert sind (im Prinzip geht es dabei auch darum, dass man ein Stück weit unabhängig vom Betriebssystem wird). Habe ich mir also einen OpenSource-Font (DejaVu) runtergeladen und ins Verzeichnis meines kleines Testprogramms gepackt. Er wird auch mit RegisterFont registriert und dann mit LoadFont ohne Fehler verwendet... aber er bewirkt nix. In der Anzeige sehe ich meiner Meinung nach immer, dass letztlich die Systemschrift verwendet wird.
Ich vermute, das liegt am Font-Mapper von Windows (ich arbeite auf Win10/64bit). Aber ich habe keine Peilung, was ich falsch mache. Bitte schaut euch das mal an.
Hier mein Code:

Code: Alles auswählen

OpenWindow(#PB_Any, 0, 0, 300, 200, "Font ändern", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
ButtonGadget(0, 10,150, 100, 20, "Font ändern")
#AKTUELLER_FONT = 0
FontGroesse.i = 10
Groesser.i = #True
If RegisterFontFile("DejaVuSerif.ttf")
  Debug "Font wurde registriert."
EndIf
LoadFont(#AKTUELLER_FONT, "Arial", 10)
TextGadget(1, 10,10, 280, 180, "Beispieltext")
SetGadgetFont(1, FontID(#AKTUELLER_FONT))
Repeat
  Event = WaitWindowEvent()
  If Event = #PB_Event_Gadget
    If Groesser = #True
      If FontGroesse > 50
        Groesser = #False
      EndIf
      FontGroesse = FontGroesse + 10
    Else    ; Groesser ist nicht True
      If FontGroesse < 20
        Groesser = #True
      EndIf
      FontGroesse = FontGroesse - 10
    EndIf    
    LoadFont(#AKTUELLER_FONT, "Arial", FontGroesse)
    SetGadgetFont(1,FontID(#AKTUELLER_FONT))
    Debug GetGadgetFont(0)
  EndIf
  
Until Event = #PB_Event_CloseWindow
… habe dazu auch zwei Screenshots erstellt (einmal mit Arial, einmal mit DejaVu) wo man sieht, dass die Schrift immer gleich ist. Aber ich finde hier keinen Button, mit dem man Dateien hochladen kann. Bin ich selbst dafür zu blöd oder ist das hier nicht vorgesehen?
Zuletzt geändert von Qnode am 24.12.2018 14:36, insgesamt 1-mal geändert.
Benutzeravatar
Bisonte
Beiträge: 2430
Registriert: 01.04.2007 20:18

Re: Einsatz von Fonts in Formular klappt nicht richtig

Beitrag von Bisonte »

Ein Link zu dem Font wäre hilfreich gewesen.

Aber nichtsdestotrotz :

1. Der Fontname bei LoadFont() MUSS EXAKT mit dem Namen übereinstimmen, der mit dem Fontanzeigeprogramm für Windows angezeigt wird... (Wenn man auf das Fontfile doppelklickt!)

2. PB ist da auf Windows etwas eingeschränkt. Loadfont sowie Registerfont geben immer #True zurück, egal ob ein Font geladen/registriert wurde oder nicht. Das liegt an Windows, weil der Fontmapper versucht einen "ähnlichen" Font zu nehmen, wenn der gewünschte nicht da ist.
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
Qnode
Beiträge: 81
Registriert: 19.07.2018 20:41
Computerausstattung: i5, 16GB RAM, Win10, PureBasic 6.00 (Windows - x64)

Re: Einsatz von Fonts in Formular klappt nicht richtig

Beitrag von Qnode »

Jetzt funktioniert es :D . Der entscheidende Tip war der Doppelklick auf den Fontfile! In meinem Programm hatte ich "DejaVuSerif" geschrieben, aber es muss "DejaVu Serif" heißen. Es fehlte nur ein lächerliches Leerzeichen.
Vielen Dank, ich habe Tage lang versucht, es selbst hinzubekommen!

Der Link zum Font (falls das noch jemand interessiert) ist hier: https://dejavu-fonts.github.io/
Antworten