Schriftart in Programm Includen - How?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
benji
Beiträge: 124
Registriert: 01.11.2006 20:23

Schriftart in Programm Includen - How?

Beitrag 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
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Hoffe ihr könnt mich mal wieder retten
Können wir nicht, aber die Boardsuche ist dein Freund! Bild
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag 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
Zuletzt geändert von Andreas am 13.08.2007 14:46, insgesamt 1-mal geändert.
Gruss Andreas
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

Können normal eingeschränkte User das ausführen?
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
gnozal
Beiträge: 219
Registriert: 04.12.2004 13:01
Wohnort: Frankreich (67)
Kontaktdaten:

Beitrag 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
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

na denn :)

als nichtadmin (Gastaccount) geht es wohl auch .(selbsttest)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag 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.
Zuletzt geändert von Andreas am 13.08.2007 14:49, insgesamt 1-mal geändert.
Gruss Andreas
Antworten