Zentrieren von mehrzeiligen Text in einer Box

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
obar
Beiträge: 111
Registriert: 22.11.2007 19:47

Zentrieren von mehrzeiligen Text in einer Box

Beitrag von obar »

Mit dieser procedure können Texte 1-x zeilen, in einer Box zentriert werden.

Bitte kein Gelächter, bin immer noch Anfänger. Ich ich hab mich mal durchgerungen etwas hier reinzuschreiben.

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(800, 600, 32, "")

Procedure C_V_Text_Box(boxX.l, boxY.l, boxW.l, boxH.l, Abstand.l, text.s, r.l, g.l, b.l)
; ************************************************************************************* 
; *  Funktion:  C_V_Text_Box(boxX, boxY, boxW, boxH, Abstand, text, r, g, b)
; ************************************************************************************* 
; *  Beschreibung: Zentriert einen mehrzeiligen Text innerhalb einer Box              
; ************************************************************************************* 
; *  Parameters:    
; *                Abstand   - Abstand zwischen den TextZeilen            
; *                boxX/boxY - Start Position der Box
; *                boxW/boxH - Breite und Höhe der Box
; *                text      - Text -> mit | werden die Zeilen getrennt
; *                
; *************************************************************************************
  Protected cW.l, AP.l, Breite.l, Hoehe.l, i.l, gapy.l  
  DrawingMode(#PB_2DDrawing_Outlined)
  Opt = 1 + CountString(text, "|")
  Box(boxX , boxY, boxW, boxH, RGB(r, g, b))
  For i = 1 To Opt
    Breite = TextWidth(StringField(text, i, "|"))
    Hoehe  = TextHeight(StringField(text, i, "|"))
    
    AP = (boxH-((Opt*Hoehe)+((Opt-1)*Abstand)))/2
    cW = (boxW/2)-(Breite/2)
         
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(boxX+cW,boxY+AP+gapy,StringField(text, i, "|"),RGB(r, g, b)) 
    gapy = (i*(Hoehe+Abstand))
  Next
EndProcedure


Repeat
  ClearScreen(0)
  ExamineKeyboard()
  
  StartDrawing(ScreenOutput())
  
  C_V_Text_Box(250, 150, 300, 300, 10,"Test|für|Forum|geschrieben|am|16.02.2008",255,255,255)
    
  StopDrawing()
  
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@obar
Es ist einfach, aber nützlich :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten