Seite 1 von 2

Schriftart in Programm Includen - How?

Verfasst: 11.08.2007 17:45
von benji
Hey!
Ich habe mal wieder ne verrückte idee:
ich möchte gerne eine Font die im .fon Format vorliegt in mein Programm einbinden. (so, dass diese auch während der runtime zum rendern der Buttons verwendet werden kann)
Meine bisherigen Versuche waren allesamt erfolglos. Und die Suche hat mich auch nicht weiter gebracht (falsche Suchbegriffe?!)
Hoffe ihr könnt mich mal wieder retten :)

gruß, benji

Verfasst: 11.08.2007 17:46
von Fluid Byte
Hoffe ihr könnt mich mal wieder retten
Können wir nicht, aber die Boardsuche ist dein Freund! Bild

Verfasst: 11.08.2007 18:42
von Kaeru Gaman
ich hab keine ahnung von .fon
wird die ebenso im system eingebunden wie .ttf?

...dann musst du die vorab ins %system%\FONTS verzeichnis schreiben,
und in der registry eintragen,
damit PB die per LoadFont laden kann.

Verfasst: 12.08.2007 10:34
von Andreas
Du musst nur noch die Namen und Pfade anpassen !

Code: Alles auswählen

Import "User32.lib"
  ;Windows NT/2000/XP/Vista: Included in Windows 2000 And later.
  ;Windows 95/98/Me: Unsupported.
  AddFontMemResourceEx(pFont,Size,Par,Count)
  RemoveFontMemResourceEx(fHandle)
EndImport

Global fHandle.l,Fonts.l

If OpenWindow(0, #PB_Ignore,#PB_Ignore,640,480, "Mein Font", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  If CreateGadgetList(WindowID(0))
    fHandle = AddFontMemResourceEx(?MyFont,?EndOfMyFont-?MyFont,0,@Fonts)
    LoadFont(1,"Digiface",14)
    ButtonGadget(0, 10,10,80,24,"12345")
    SetGadgetFont(0,FontID(1))
  EndIf
  Repeat
    EventID = WaitWindowEvent()
    Select EventID
    Case #PB_Event_Gadget
      Select EventGadget()
      Case 0:
        RemoveFontMemResourceEx(fHandle)
        SendMessage_(WindowID(0),#WM_CLOSE,0,0)
      EndSelect
    EndSelect
    If EventID = #PB_Event_CloseWindow
      Quit = 1
    EndIf
  Until Quit = 1
EndIf
End

DataSection
  MyFont:
  IncludeBinary "Digiface.ttf"
  EndOfMyFont:
EndDataSection

Verfasst: 13.08.2007 10:39
von bobobo
Können normal eingeschränkte User das ausführen?

Verfasst: 13.08.2007 10:59
von Kaeru Gaman
@Andreas

mal im ernst: bitte nicht unnötig viel API verwenden.
  • #CW_USEDEFAULT
    SendMessage_(GadgetID(0),#WM_SETFONT,FontID(1),1)
    SendMessage_(WindowID(0),#WM_CLOSE,0,0)
was soll der unfug? willst du anfänger beeindrucken?
  • #PB_Ignore
    SetGadgetFont(
    CloseWindow(0)
...wozu der API-Krempel?

Verfasst: 13.08.2007 12:30
von bobobo
immer ruhig

so klappt's auch mit der Demo womöglich

..mein Vorschlag (irgendwo aus dem Forum gemopst)

Code: Alles auswählen

Procedure InstallAdditionalFonts(font$)
AddFontResource_(font$)
SendMessage_(#HWND_BROADCAST,#WM_FONTCHANGE,0,0)
EndProcedure

Procedure DeinstallAdditionalFonts(Font$)
  RemoveFontResource_(font$)
  SendMessage_(#HWND_BROADCAST,#WM_FONTCHANGE,0,0)
EndProcedure

InstallAdditionalFonts("Face Off!.ttf")
LoadFont(0,"Face Off!",76)
OpenWindow(0,0,0,200,200,"juhu")
CreateGadgetList(WindowID(0))
TextGadget(0,0,0,200,200,"")
SetGadgetFont(0,FontID(0))
i=48

Repeat
  event=WaitWindowEvent(5000)
  i+1

  If i=58
    i+65-58
  EndIf

  If i=91
    i+97-91
  EndIf

  SetGadgetText(0,Chr(i))
  SetWindowTitle(0,Str(i))
  ;Delay(50)

  If i>121
    i=48
  EndIf

Until event=#PB_Event_CloseWindow

DeinstallAdditionalFonts("Face Off!.ttf")
achsoja ..unsupported (vermutlich) von allen ausserhalb windoof-Betriebssystemen (also auch kein 95 bis ME)

Verfasst: 13.08.2007 13:56
von gnozal
bobobo hat geschrieben:iachsoja ..unsupported (vermutlich) von allen ausserhalb windoof-Betriebssystemen (also auch kein 95 bis ME)
Seems to work under Win9x-Me :
MSDN hat geschrieben:Requirements for AddFontResource()

Windows NT/2000/XP/Vista: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.

Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000/XP. Also supported by Microsoft Layer for Unicode.
Windows 95/98/Me: AddFontResourceW is supported by the Microsoft Layer for Unicode

Verfasst: 13.08.2007 13:59
von bobobo
na denn :)

als nichtadmin (Gastaccount) geht es wohl auch .(selbsttest)

Verfasst: 13.08.2007 14:45
von Andreas
Kaeru Gaman hat geschrieben:@Andreas

mal im ernst: bitte nicht unnötig viel API verwenden.
  • #CW_USEDEFAULT
    SendMessage_(GadgetID(0),#WM_SETFONT,FontID(1),1)
    SendMessage_(WindowID(0),#WM_CLOSE,0,0)
was soll der unfug? willst du anfänger beeindrucken?
  • #PB_Ignore
    SetGadgetFont(
    CloseWindow(0)
...wozu der API-Krempel?
Ist halt mein Stil zu programmieren.
Die Api-Messages habe ich im Gedächtnis, die von PB nicht so sehr.

Ich werd' mir aber Mühe geben, beim nächsten Mal.

CloseWindow(0) statt SendMessage_(WindowID(0),#WM_CLOSE,0,0) an dieser Stelle, bringt eine Fehlermeldung.