Zeilenumbruch mit DrawText()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Zeilenumbruch mit DrawText()

Beitrag 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.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: Zeilenumbruch mit DrawText()

Beitrag 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
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Zeilenumbruch mit DrawText()

Beitrag 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
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Zeilenumbruch mit DrawText()

Beitrag 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.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Re: Zeilenumbruch mit DrawText()

Beitrag von #NULL »

my pb stuff..
Bild..jedenfalls war das mal so.
Häns
Beiträge: 47
Registriert: 27.10.2007 14:30
Wohnort: Kölle

Re: Zeilenumbruch mit DrawText()

Beitrag 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
PB 5.6
Windows 7 Professional
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Zeilenumbruch mit DrawText()

Beitrag 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.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Zeilenumbruch mit DrawText()

Beitrag 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
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Zeilenumbruch mit DrawText()

Beitrag 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.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Zeilenumbruch mit DrawText()

Beitrag 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:
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Antworten