Schriftart

Anfängerfragen zum Programmieren mit PureBasic.
studroa
Beiträge: 8
Registriert: 16.10.2007 10:23

Schriftart

Beitrag von studroa »

Moin,

ich möchte die Standard-Schrift durch eine andere und größere ersetzen, ich habe das Beispiel aus der Hilfe genommen aber es klappt nicht.
Hat jemand evtl. ein anderes einfach Beispiel?

Danke und einen Schönen Donnerstag
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

Welches Beispiel aus der Hilfe funktioniert nicht?
Dieses z.B. aus der Hilfe zu LoadFont() funktioniert tadellos:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 270, 160, "Loading font...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0)) 
  If LoadFont(1, "Arial", 24) 
    SetGadgetFont(#PB_Default, FontID(1))
    TextGadget(0, 10, 10, 250, 40, "Arial 24") 
  EndIf 
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
EndIf
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

Vielleicht eine fremde, nicht installierte Schriftart?

Das Problem hab ich nämlich auch, dass ich diesen Beispielcode nicht ans funktionieren kriege:

Code: Alles auswählen

Procedure LoadAdditionalFonts(Dir$) 
  ExamineDirectory(#Dir_Font,"Style\","*.TTF") 
  While NextDirectoryEntry(#Dir_Font) 
    AddFontResource_("Style\"+DirectoryEntryName(#Dir_Font)) 
  Wend 
  ExamineDirectory(#Dir_Font,"Style\","*.FON") 
  While NextDirectoryEntry(#Dir_Font) 
    AddFontResource_("Style\"+DirectoryEntryName(#Dir_Font)) 
  Wend 
  SendMessage_(#HWND_BROADCAST,#WM_FONTCHANGE,0,0) 
EndProcedure 

Procedure UnLoadAdditionalFonts(Dir$) 
  ExamineDirectory(#Dir_Font,"Style\","*.TTF") 
  While NextDirectoryEntry(#Dir_Font) 
    RemoveFontResource_("Style\"+DirectoryEntryName(#Dir_Font)) 
  Wend 
  ExamineDirectory(#Dir_Font,"Style\","*.FON") 
  While NextDirectoryEntry(#Dir_Font) 
    RemoveFontResource_("Style\"+DirectoryEntryName(#Dir_Font)) 
  Wend 
  SendMessage_(#HWND_BROADCAST,#WM_FONTCHANGE,0,0) 
EndProcedure
Auch wenn ich Pfade und alles anpasse, will er die Schrift einfach nicht laden, also falls wer ein beispiel hat, wie es geht, wäre ich sehr dankbar.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

>> wenn ich Pfade und alles anpasse
..nur um sicher zu gehen das du nix übersehen hast:
den parameter Dir$ verwendest du nicht. du beziehst dich mit ./style also auf das aktuelle verzeichnis.
außerdem:
Once the enumeration is done, FinishDirectory() must be called to free the resources associated to the listing.
ich weiß jetzt nich ob des reicht es einfach am ende der procs auszuführen, oder ob du die erst die dateiliste erstellen musst, finishdirectory() aufrufen musst, und dann erst die font laden/hinzufügen kannst.



@studroa
für gadgets geht es so wie gezeigt.
für 2ddrawing operationen musst du nach startdrawing() den font mit drawingfont() setzten, ..und das musst du für jeden neu eröffneten startdrawing()/stopdrawing()-block erneut tun.
mir ist nicht bekannt das man dafür mit pb-mitteln auch den standart-font selbst setzten kann.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Lassen wir mal das Rätselraten. Das sind alles nur Vermutungen solange studroa nicht antwortet und explizit formuliert was er will.
studroa hat geschrieben:ich möchte die Standard-Schrift durch eine andere und größere ersetzen
Die Standard-Schrift für was? Gadgets? 2D Drawing? System?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

@gnasen:

Code: Alles auswählen

Procedure LoadAdditionalFonts(Dir$) 
  ExamineDirectory(0,Dir$,"*.TTF") 
  While NextDirectoryEntry(0) 
    AddFontResource_(Dir$+DirectoryEntryName(0)) 
  Wend 
  ExamineDirectory(0,Dir$,"*.FON") 
  While NextDirectoryEntry(0) 
    AddFontResource_(Dir$+DirectoryEntryName(0)) 
  Wend 
  SendMessage_(#HWND_BROADCAST,#WM_FONTCHANGE,0,0) 
EndProcedure
So funktioniert der ... wobei in Dir$ das Verzeichnis der zu ladenen Fonts sein muss ;)

Wichtig beim benutzen der Fonts ist der Name !
Es ist nicht unbedingt der gleiche wie der Filename.

Es ist der Name anzugeben, der erscheint, wenn man einen Font im Fontviewer von windows anzeigen lässt.

bei dem hier z.B.

Bild

muesstest Du


Code: Alles auswählen

LoadFont(1,"7th Service Condensed",YSize[,Flags])
eingeben, egal welchen Filenamen das Teil besitzt. dann sollte es klappen
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

Es ist nicht unbedingt der gleiche wie der Filename.

Es ist der Name anzugeben, der erscheint, wenn man einen Font im Fontviewer von windows anzeigen lässt.
Vielen Dank, das wars was ich falsch gemacht habe. Naja, so kanns gehen.

Andere Frage: Wenn ich jetzt einen Font mit dieser Prozedur hinzufüge, wird der jedesmal neu und zusätzlich registriert, sodass man die Registry versaut, oder passt da Windows von selber auf, ob er den Font schon installiert hat?
Benutzeravatar
Ligatur
Beiträge: 196
Registriert: 09.07.2006 00:41

Beitrag von Ligatur »

Hallo,
mit AddFontRessource versaust du nicht die Registry da dort nichts eingetragen wird.
Außerdem solltest du den Font nach Benutzung sowieso wieder freigenben.
MSDN hat geschrieben: When an application no longer needs a font resource that it loaded by calling the AddFontResource function, it must remove the resource by calling the RemoveFontResource function.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

und wie ist das verhalten, wenn man eine font hinzufügt, die schon vorhanden war, und man sie dann wieder entfernt?. hat man da am ende system verändert? muss man vorher prüfen, ob der/die/das/dö/dumm font schon installiert war?
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Ligatur
Beiträge: 196
Registriert: 09.07.2006 00:41

Beitrag von Ligatur »

AddFontRessource() kopiert (bzw löscht) weder irgendetwas in das Font - Verzeichnis noch verändert diese Funktion die Registry. Der Font wird lediglich in eine interne Datenstruktur eingetragen die beim nächsten Systemstart wieder im Originalzustand ist und den Font gar nicht mehr enthält. Ich denke mal, wenn ein Font hinzugefügt wird wird ein Zähler erhöht und beim entfernen wieder erniedrigt und erst wenn der Zähler 0 ist wird der Font aus der Struktur entfernt, so wird das jedenfalls bei vielen anderen Dingen gemacht um zu verhindern, das etwas gelöscht wird was noch gebraucht wird.
Antworten