Seite 1 von 1

Font auf Stringlänge angleichen

Verfasst: 30.10.2014 09:34
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

Re: Font auf Stringlänge angleichen

Verfasst: 30.10.2014 16:56
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

Re: Font auf Stringlänge angleichen

Verfasst: 31.10.2014 23:11
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