Seite 1 von 2

Zeilenumbruch mit DrawText()

Verfasst: 10.09.2010 22:51
von Mok
Hallo.
Ist es irgendwie möglich im DrawText()-Befehl einen Zeilenumbruch einzufügen? Ich mache gerade einen Splash-Screen und will während der Ladezeit einen "Tipp des Tages" anzeigen (welche in einem Tips.s() Array gespeichert sind). Da 100% der Texte über die Splash-Breite gehen, müsste ich jedesmal für einen Zeilenabsatz ein neues DrawText() aufrufen.

Gruß, Mok.

Re: Zeilenumbruch mit DrawText()

Verfasst: 10.09.2010 23:02
von X360 Andy
Wenn CHR(10) nicht funktioniert ( weiß ich nicht mehr ob das geht bei DrawText() ) dann wirst du für jede Zeile DrawText() aufrufen müssen... ich glaube das es nur so geht.

Gruß Andreas

Re: Zeilenumbruch mit DrawText()

Verfasst: 10.09.2010 23:08
von c4s
Native funktioniert das (noch) nicht, aber im Grunde genommen sollte dir folgender Code dabei helfen:
http://www.purebasic.fr/english/viewtop ... 12&t=35090

Re: Zeilenumbruch mit DrawText()

Verfasst: 10.09.2010 23:17
von TomS

Code: Alles auswählen

Procedure DrawLBText(image, width, text.s)
    line.s=""
    y=5
    x=5
    
    StartDrawing(ImageOutput(0))
    
    k = CountString(text," ")
    For loop = 1 To k
        
        If TextWidth(line + StringField(text,loop," "))<width
            line = line + StringField(text,loop," ")+" "
        Else
            
            DrawText(x,y,line,$FFFFFF)
            y+30
            line=StringField(text,loop," ")+" "
        EndIf 
    Next 
    
    StopDrawing()
        
        
EndProcedure 

CreateImage(0,300,500)
DrawLBText(0, 200, "Ist es irgendwie möglich im DrawText()-Befehl einen Zeilenumbruch einzufügen? Ich mache gerade einen Splash-Screen und will während der Ladezeit einen 'Tipp des Tages' anzeigen (welche in einem Tips.s() Array gespeichert sind). Da 100% der Texte über die Splash-Breite gehen, müsste ich jedesmal für einen Zeilenabsatz ein neues DrawText() aufrufen.")

OpenWindow(0,0,0,300,500,"DrawText LineBreak",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)

ImageGadget(0,0,0,300,500,ImageID(0))

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow 
Das gleiche Spielchen kannst du mit #LFCR$, #LF$ und #CR$ machen, wenn du den Text selber formatieren möchtest.

Re: Zeilenumbruch mit DrawText()

Verfasst: 11.09.2010 08:24
von #NULL

Re: Zeilenumbruch mit DrawText()

Verfasst: 16.09.2010 23:38
von Häns
Hallo Tom,

danke fürs Teilen, ich konnte dein Code gut gebrauchen. Wenn man bei der Procedure nach der For-Schleife

[quote="TomS"]

Code: Alles auswählen

    For loop = 1 To k
        
        If TextWidth(line + StringField(text,loop," "))<width
            line = line + StringField(text,loop," ")+" "
        Else
            
            DrawText(x,y,line,$FFFFFF)
            y+30
            line=StringField(text,loop," ")+" "
        EndIf 
    Next 
nur noch mit

Code: Alles auswählen

line = line + StringField(text,loop," ")+" "
DrawText(x,y,line,$FFFFFF)
ergänzt, ist alles perfekt! :allright:

Häns

Re: Zeilenumbruch mit DrawText()

Verfasst: 17.09.2010 09:07
von GPI
da ist ein gewaltiger Bug in Code: wie kommst du darauf, das alle Schriften gleich groß sind? Richtig wäre, hier die textheigth()-Funktion zu nutzen.

Re: Zeilenumbruch mit DrawText()

Verfasst: 17.09.2010 16:38
von TomS
@GPI: Hast du eigentlich nen Besen gefressen?
Ich komme überhaupt nicht drauf. Ich hab nur keine Lust eine simple Frage mit 100% ästhetischem Code zu beantworten. Zumal Mok sich beim letzten mal nicht einmal bedankt oder mitgeteilt hat, dass es ihm geholfen hat...
Er wird wohl selber draufkommen, dass was nicht stimmt, wenn er mit seiner Schrift einen Zeilenabstand von 2.5 oder auch von 0.3 bekommt.

Hab's zwar nicht gestestet, aber afair gibt TextHeight die genaue Höhe aus. Das heißt du hast dann gar keinen Zeilenabstand.

Richtig wäre dann TextHeight()+n

Re: Zeilenumbruch mit DrawText()

Verfasst: 17.09.2010 16:41
von GPI
TomS hat geschrieben:@GPI: Hast du eigentlich nen Besen gefressen?
ne ein Clown. Mein Gott nicht immer alles auf die Goldwage legen.
Richtig wäre dann TextHeight()+n
Ich würde dann ein TextHeight()*150/100 (oder sowas, wäre dann die halbe Höhe als Zeilenabstand) einstellen ;) - ist flexibler an der Größe.

Re: Zeilenumbruch mit DrawText()

Verfasst: 17.09.2010 23:08
von Mok
TomS hat geschrieben:Zumal Mok sich beim letzten mal nicht einmal bedankt oder mitgeteilt hat, dass es ihm geholfen hat...
Sofort nachholen...! Danke vielmals, hast mir wieder mal aus der Patsche geholfen :allright: