einen String teilen der zu lang ist
Übersicht

DeadMattBetreff: einen String teilen der zu lang ist |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi
Da ich kein e geeignete Funktion gefunden habe eine art "Window" zu erstellen wollt ich mein eigenes machen mit dieser Funktion: Code: [AUSKLAPPEN] Function BuildWin( F_posx#, F_posy#, F_x, F_y, F_text$, F_textheader$)
;Aussen Rahmen Color 255, 255, 255 Rect F_posx#, F_posy#, F_x, F_y, 0 ;Innen fuellen Color 121, 136, 126 Rect F_posx#+1, F_posy#+1, F_x-2, F_y-2, 1 ;Header Rahmen Color 255, 255, 255 Rect F_posx#+1, F_posy#+1, F_x-2, 20, 0 ;Header fuellung Color 100, 113, 105 Rect F_posx#+1, F_posy#+1, F_x-2, 18, 1 ;TextFarbe Color 255, 255, 255 ;HeaderText Text F_posx#+3, F_posy#+3, F_textheader$ If StringWidth(F_text$)<=F_x-5 Then ;MainText Text F_posx#+3, F_posy#+25, F_text$ Else Text F_posx#+3, F_posy#+25, "zu langer Text" EndIf End Function nun, wie man sieht, wird, wenn der Text zu lang ist, etwas anderes hingeschrieben.....ich will aber eigentlich das der dann ne neue Zeile Geginnt...wie geht das? Bei C++ gaeb es moeglichkeint a) \n (geht nen Zeilensprung bei B2D garnich?) und sonst gabs da noch ne str Funktion |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Durchsuche mit einer While-Schleife den Text von hinten nach einem Leerzeichen und prüfe ob der "Reststring" davor unter der max. Länge liegt (StringWidth). Wenn ja mit Mid() den hinteren Teil in einen neuen String kopieren und den vorderen String mit Left() rausschneiden. Bedarfsweise wird das ganze dann für den neuen ehemaligen "Reststring" wiederholt bis nichts mehr überbleibt was zu lang ist ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
In Blitz wäre Chr(10)+chr(13) ein Zeilenumbruch.
Das wird dir jedoch wenig bringen, da der Textzeichnungsbefehl dieses Zeichen nicht interpretiert. Die Zeilenseparierung und Zeichnung im Grafikfenster musst du selbst programmieren (wie in C++ auch) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
DeadMatt |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Hubsi
wie durchsuche ich den nach leerzeichen? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mit For - Next von 1 bis len(einString) und Mid. Das Leerzeichen hat ascii code 32. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
For Len(str$) To 1 Step -1
Von vorne machts nicht soviel Sinn ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
DeadMatt |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich schaffs nu das der die Zeile kuerzt nu soll der aber eine zeile tiefer den rest des eigentlichen textes reinschreiben....ich bastel da schon den ganzen abend dran rum aber ich glaub ich hab da nen Denk fehler......ausserdem meinte nen kolegge von mir es gaebe dafuer nen Befehl in BB....wenn ja, kennt den wer? | ||
![]() |
gameworx |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde zuerst einmal die maximalen Zeilenlänge anhand der Fensterbreite ermitteln - und zwar in Zeichen und nicht in Pixel.
Dann würde ich anhand der errechneten maximalen Zeilenlänge einen temporären String anlegen, welcher aus dem Text kopiert wird: tmp$=left$(F_text$, maximale_Zeilenlänge) Diesen temporären String würde ich nun von hinten nach Leerzeichen "chr$(32)" und Bindestrichen "chr$(45) durchsuchen. Stoße ich auf ein solches Zeichen, dann lösche ich den restlichen Text dahinter. Ggf. kannst du dir so auch einen Zeilenumbruch mit einem anderen Sonderzeichen oder einer Kombination wie "\n" programmieren. Jetzt kopiere ich den temporären String in eine neue Variable (z. B. Zeile$(n)) und lösche aus dem ursprünglichen Text "F_text$" die entsprechenden Zeichen raus, welche in in Zeile$(n) gespeichert habe. Dann prüfe ich, ob noch Zeichen in "F_text$" vorhanden sind bzw. ob die restlichen Zeichen nocheinmal geteilt werden müssen. Wenn dem so ist, wiederhole ich das Prozedere. Nachdem F_text$ nun in - sagen wir - 5 Zeilen aufgeteilt wurde, erfolgt die Darstellung der Variablen Zeile$(0) .. Zeile$(4) mittels For..Next. So würde ich das machen... in der Theorie... ![]() |
||
AMD Athlon II X3 440 (3 GHz), 4GB Ram, ATI Radeon HD 5450, Win 7 |
DeadMatt |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
leider is die Theorie immer leichter ![]() naja hab schonmal bei mir einen grndlegenden Fehler gefunden....hab die Mid Funktion falsch verstanden ^^ dachte der letze parameter waere die position bis welcher er schneidet.... ich habs nu so das er es schneidet, auch passend halt nur nich wie ihr es vorgeschlagen habt das der bei leerzeichen trennt sondern einfach so.......muss da noch bissle dran rumbasteln glaub ich ich versuchs ;D |
||
DeadMatt |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hmpf...aufgegeben das ordentlich zu teilen ![]() ![]() |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Const t$="Überlanger Text mit unglaublich vielen Zeichen der dringlichst umbrochen werden will bei der nächstbesten Gelegenheit..."
Const win_width=300 Type zeilen Field txt$ End Type z.zeilen=New zeilen z\txt$=t$ While StringWidth(z\txt$)>win_width For i=Len(z\txt$) To 1 Step -1 If Mid$(z\txt$,i,1)=Chr(32) If StringWidth(Left$(z\txt$,i-1))<win_width tmp$=z\txt$ z\txt$=Left$(z\txt$,i-1) z.zeilen=New zeilen z\txt$=Mid$(tmp$,i+1) Exit EndIf EndIf Next Wend Color 0,0,255 Rect 10,10,300,250 Color 255,120,0 i=10 For z.zeilen=Each zeilen Text 10,i,z\txt$+" ("+StringWidth(z\txt$)+")" i=i+15 Next WaitKey() End Bedenke dabei das Stringoperationen im Verhältniss nicht gerade schnell sind, man sollte das also nur bei noch nicht geprüften Zeilen anwenden. |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
https://www.blitzforum.de/foru...lenumbruch
Vielleicht Hilft dir das weiter... Komm schon! Aufgeben ist für Schwächlinge ![]() EDIT: Hab jetzt mal meinen Zeilenumbruch so überarbeitet, dass nur ganze Wörter umgebrochen werden. (Zu finden im Link oben.) |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group