Font auf Stringlänge angleichen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Font auf Stringlänge angleichen

Beitrag von Velindos »

Hallo Leute,
möchte das der TEXT immer Horizontal und Vertikal zentriert ist und im optimalen Font dargestellt wird.

Code: Alles auswählen

#Font_PS_Stichwort = 12
Window_0 = OpenWindow(#PB_Any, 0, 0, 600, 400, "Test von Stringleght", #PB_Window_SystemMenu)
Frame_0 = FrameGadget(#PB_Any, 10, 10, 580, 70, "FELD") 
Text_0 = TextGadget(#PB_Any, 20, 20, 560, 50, "",#PB_Text_Center)
String_0 = StringGadget(#PB_Any, 100, 80, 480, 30, "")
Button_0 = ButtonGadget(#PB_Any, 10, 80, 80, 30, "")

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      Select EventGadget()
        Case Button_0    ; Button "Bunt"
          
            StichwortLaenge =  Len(GetGadgetText(String_0))
            If StichwortLaenge =< 21
              SetGadgetFont(Text_0, LoadFont(#Font_PS_Stichwort, "Verdana", 28, #PB_Font_Bold|#PB_Font_HighQuality))
            ElseIf  StichwortLaenge < 24 And StichwortLaenge > 21
              SetGadgetFont(Text_0, LoadFont(#Font_PS_Stichwort, "Verdana", 24, #PB_Font_Bold|#PB_Font_HighQuality))
            ElseIf StichwortLaenge > 24 And StichwortLaenge < 30
              SetGadgetFont(Text_0, LoadFont(#Font_PS_Stichwort, "Verdana", 20, #PB_Font_Bold|#PB_Font_HighQuality))
            ElseIf StichwortLaenge > 30
              SetGadgetFont(Text_0, LoadFont(#Font_PS_Stichwort, "Verdana", 18, #PB_Font_Bold|#PB_Font_HighQuality))
            EndIf
          
            SetGadgetText(Text_0, GetGadgetText(String_0))
          
      EndSelect
  EndSelect
ForEver
End 
Kann jemanden helfen wie das optimaler Läuft?

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: Font auf Stringlänge angleichen

Beitrag von True29 »

würde erst mal für die Font Anpassung eine neue Prozedur erstellen.
alternativ würde ich eine kleine Standartgröße für alle Buttons nehmen oder magebuttons.

Vielleicht so in der Richtung.

Code: Alles auswählen

Prozedur GET_FONTSIZE(String.s)
protected StichwortLaenge =  Len(GetGadgetText(String_0))
    select 
    case 0 to 20
      prozedurereturn 20
    Endselect
endprozedur
i7,12gb ram , Windows 10 ,Purebasic 5.50
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: Font auf Stringlänge angleichen

Beitrag von man-in-black »

moinsen,

hab jetzt auch keine "ideale" Lösung anzubieten, würde es aber evt. über den Umweg "2D Drawing" machen.
In der Lib gibt's den Befehl TextWidth(), der dir mit vorangestelltem DrawingFont() die Breite deines Textes zurückgibt.
(hab gerade nur die PB4.60 zur Hand - Befehle könnten mittlerweile anders heißen)

Dann brauchst du nurnoch über ne Schleife oder Gleichung die genaue Abstufung der Schrift ermitteln...
(... maximale_Breite <= GadgetWidth() ...)

MFG
MIB
(hab alles, kann alles, weiß alles!!^^)

Bild
Antworten