Zeilenumbruch

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Zeilenumbruch

Beitrag von Velindos »

Hallo Leute,
lese meinen Text aus dem GetGadgetText(Editorgadget) und zeichne ihn anschliessend in ein Bild!

Code: Alles auswählen

;-- [FKT] TEXT ins Image zeichnen
; --------------------------
Global Corner_ZeilenZeiger = 199

Global Dim Corner_ZeilenString$(Corner_ZeilenZeiger)
Global Corner_Max_Zeilen         = 0
Global Corner_Anzahl_ZeilenY     = 40
Global Corner_Notiz_String$ = ""
; --------------------------
;                "1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890
; ********************************************************************
; Corner_Notiz_String$ + "Surbraten: Surfleisch ist gebeiztes nicht geräuchertes Fleisch. Da dieses Fleisch schon gewürzt ist, braucht man es nur mehr bei 150° ca. 2h braten." + #CRLF$
; Corner_Notiz_String$ + "Einfach in eine feuerfeste Form geben und ab und an mal mit etwas Wasser untergießen. * 80 dag Surfleisch/Surbraten vom Schweinsschlögel- oder karree."
; ********************************************************************
; Corner_Notiz_String$ + "Wirkung  - Der schwarze Obsidian löst besonders gut Blockaden, Schock, Ängste und Traumata. Er hilft dabei, sich mit vergangenen Erfahrungen auseinander - zusetzen und damit verbundene Schmerzen zu lösen. ... "
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Der schwarze Obsidian fördert zudem ungenutzte Fähigkeiten und verbessert die Wahrnehmung."
; ; --------------------------
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Surbraten: Surfleisch ist gebeiztes nicht geräuchertes Fleisch. Da dieses Fleisch schon gewürzt ist, braucht man es nur mehr bei 150° ca. 2h braten." + #CRLF$
; Corner_Notiz_String$ + "Einfach in eine feuerfeste Form geben und ab und an mal mit etwas Wasser untergießen. * 80 dag Surfleisch/Surbraten vom Schweinsschlögel- oder karree."
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Wirkung  - Der schwarze Obsidian löst besonders gut Blockaden, Schock, Ängste und Traumata. Er hilft dabei, sich mit vergangenen Erfahrungen auseinander - zusetzen und damit verbundene Schmerzen zu lösen. ... "
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Der schwarze Obsidian fördert zudem ungenutzte Fähigkeiten und verbessert die Wahrnehmung."
; ; --------------------------
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Surbraten: Surfleisch ist gebeiztes nicht geräuchertes Fleisch. Da dieses Fleisch schon gewürzt ist, braucht man es nur mehr bei 150° ca. 2h braten." + #CRLF$
; Corner_Notiz_String$ + "Einfach in eine feuerfeste Form geben und ab und an mal mit etwas Wasser untergießen. * 80 dag Surfleisch/Surbraten vom Schweinsschlögel- oder karree."
; ********************************************************************
Corner_Notiz_String$ + "Romell Broom wurde zum Tode verurteilt. 18 Hinrichtungsversuche blieben jedoch ohne Erfolg. Schließlich verstarb der US-Amerikaner an Covid-19."
Corner_Notiz_String$ + "Romell Broom war 24 Jahre lang in der Todeszelle im US-Bundesstaat Ohio, bevor er 2009 hingerichtet werden sollte. Beamten konnten aber keine Vene finden, die die tödliche Injektion aufnehmen würde."
Corner_Notiz_String$ + "Romell Broom entkommt 18 Mal seiner Hinrichtung - Romell Brooms Hinrichtung war für den 15. September 2009 geplant. Als er auf die tödliche Injektion vorbereitet werden sollte, wurde Broom an einen Tisch geschnallt und die Beamten versuchten, eine geeignete Vene zu finden, um ihm die tödliche Mischung aus Pancuroniumbromid, Kaliumchlorid und Midazolam zu verabreichen."
Corner_Notiz_String$ + "Broom versuchte sogar zu helfen, indem er seinen Arm und seine Finger auf und ab bewegte - doch ohne Erfolg. Nach zwei Stunden und 18 Versuchen wurde beschlossen, die Hinrichtung zu verlegen."
Corner_Notiz_String$ + "'Covid Probable List'"
Corner_Notiz_String$ + "Die zweite Hinrichtung von Broom wurde nach langem Hin und Her auf den 16. März 2022 verschoben. Doch dazu kam es nicht, wie unter anderem der Mirror berichtet."
Corner_Notiz_String$ + "Romell Broom verstarb am 28. Dezember 2020. Er war 64 Jahre alt. Die Ärzte haben ihn auf die 'Covid Probable List' der Gefangenen gesetzt, bei denen der Verdacht besteht, dass sie am Coronavirus gestorben sind."
Corner_Notiz_String$ + "Die Verurteilung"
Corner_Notiz_String$ + "Broom hatte 24 Jahre in der Todeszelle von Ohio verbracht, nachdem er wegen Entführung, Vergewaltigung und Ermordung der 14-jährigen Tryna Middleton verurteilt worden war. Er hat immer seine Unschuld beteuert und 2003 einen DNA-Test durchgeführt, bei dem er seine Unschuld jedoch nicht beweisen konnte."
Corner_Notiz_String$ + "Abb. Elektrischer Stuhl"
; ********************************************************************
;}
Global Font_DRW_Corner_Folder

;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- [FKT] Corner_Image_Text
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Corner_Image_Text(Corner_String$,Corner_Schleife)
  Protected Corner_CharacterAnzahl = 40
  Protected Corner_StartPosition = Corner_CharacterAnzahl - 7
  Protected Corner_SuchString$ = Chr(32)
  Protected Corner_Position  = 0
  Protected Corner_CharPos   = 0
  Protected Corner_Zeiger 
  Protected Ergebnis$ = " "
  Protected Ergebnis_Zeiger = 0
  
  Corner_String$ = ReplaceString(Corner_String$,#CRLF$,#CR$,1)
  
  For Corner_Zeiger = 0 To Corner_Schleife
    
    Corner_Position = FindString(Corner_String$,Corner_SuchString$, Corner_StartPosition, #PB_String_NoCase)     
    
    Ergebnis$ = Mid(Corner_String$, 1, Corner_Position)
    
    Corner_CharPos = 0
    Corner_CharPos = FindString(Ergebnis$, #CR$ , 0 , #PB_String_NoCase)
    ;     Debug "Corner_CharPos= "+Corner_CharPos 
    
    If Corner_CharPos > 0 
      
      ;       Debug "Corner_CharPos CR = "+Corner_CharPos 
      Ergebnis$ = Mid(Ergebnis$, 1 , Corner_CharPos - 1)
      
      Corner_ZeilenString$(Ergebnis_Zeiger) = Ergebnis$
      Ergebnis_Zeiger = Ergebnis_Zeiger+1
      
      Corner_ZeilenString$(Ergebnis_Zeiger) = " "
      Ergebnis_Zeiger = Ergebnis_Zeiger+1
      
      Corner_String$ = Mid(Corner_String$, Corner_CharPos +1 , Len(Corner_String$) - 1)
      Corner_CharPos = 0
      
    Else
      
      Corner_ZeilenString$(Ergebnis_Zeiger) = Ergebnis$
      Ergebnis_Zeiger = Ergebnis_Zeiger+1
      Corner_String$ = Mid(Corner_String$, Corner_Position +1 , Len(Corner_String$))
      
      If Len(Corner_String$) < Corner_CharacterAnzahl 
        Corner_ZeilenString$(Ergebnis_Zeiger+1) = Corner_String$
        Corner_Max_Zeilen = Ergebnis_Zeiger + 1
        Break
      EndIf
      
      Corner_CharPos = 0
    EndIf
  Next
EndProcedure

;}
; ResizeGadget(Zoom_I_Bild,Btn_13_GrapXY,SZ_22,Btn_Zoom_Area_GrapXY,Btn_Zoom_Area_GrapXY)

; Corner_Image_Text(Corner_Notiz_String$,Corner_Anzahl_ZeilenY)
Corner_Image_Text(Corner_Notiz_String$,Corner_ZeilenZeiger)

For Corner_Zeiger = 0 To Corner_Max_Zeilen
  Debug "=> "+"xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx"
  Debug "=> " + Corner_ZeilenString$(Corner_Zeiger)
Next

Debug "********************************************************************"
Debug "Corner_Max_Zeilen"+Corner_Max_Zeilen
Debug "********************************************************************"
Funzt nicht immer und zeichnet dann einen längeren Text.

Gruss ... Velindos!

Komme einfach nicht weiter, jemand vielleicht eine Idee?
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Zeilenumbruch

Beitrag von NicTheQuick »

Ich habe deinen Code irgendwie nicht verstanden und kann dir deswegen nicht genau sagen wo dein Fehler liegt. Ich habe aber kurz was ähnliches programmiert, was glaube ich etwas einfacher ist. Es kommt allerdings noch nicht mit Zeilenumbrüchen zurecht. Daran müsstest du also noch arbeiten.

Code: Alles auswählen

EnableExplicit

#LINE_LENGTH = 40

Define Corner_Notiz_String$ = ""
; --------------------------
;                "1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890
; ********************************************************************
; Corner_Notiz_String$ + "Surbraten: Surfleisch ist gebeiztes nicht geräuchertes Fleisch. Da dieses Fleisch schon gewürzt ist, braucht man es nur mehr bei 150° ca. 2h braten." + #CRLF$
; Corner_Notiz_String$ + "Einfach in eine feuerfeste Form geben und ab und an mal mit etwas Wasser untergießen. * 80 dag Surfleisch/Surbraten vom Schweinsschlögel- oder karree."
; ********************************************************************
; Corner_Notiz_String$ + "Wirkung  - Der schwarze Obsidian löst besonders gut Blockaden, Schock, Ängste und Traumata. Er hilft dabei, sich mit vergangenen Erfahrungen auseinander - zusetzen und damit verbundene Schmerzen zu lösen. ... "
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Der schwarze Obsidian fördert zudem ungenutzte Fähigkeiten und verbessert die Wahrnehmung."
; ; --------------------------
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Surbraten: Surfleisch ist gebeiztes nicht geräuchertes Fleisch. Da dieses Fleisch schon gewürzt ist, braucht man es nur mehr bei 150° ca. 2h braten." + #CRLF$
; Corner_Notiz_String$ + "Einfach in eine feuerfeste Form geben und ab und an mal mit etwas Wasser untergießen. * 80 dag Surfleisch/Surbraten vom Schweinsschlögel- oder karree."
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Wirkung  - Der schwarze Obsidian löst besonders gut Blockaden, Schock, Ängste und Traumata. Er hilft dabei, sich mit vergangenen Erfahrungen auseinander - zusetzen und damit verbundene Schmerzen zu lösen. ... "
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Der schwarze Obsidian fördert zudem ungenutzte Fähigkeiten und verbessert die Wahrnehmung."
; ; --------------------------
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Surbraten: Surfleisch ist gebeiztes nicht geräuchertes Fleisch. Da dieses Fleisch schon gewürzt ist, braucht man es nur mehr bei 150° ca. 2h braten." + #CRLF$
; Corner_Notiz_String$ + "Einfach in eine feuerfeste Form geben und ab und an mal mit etwas Wasser untergießen. * 80 dag Surfleisch/Surbraten vom Schweinsschlögel- oder karree."
; ********************************************************************
Corner_Notiz_String$ + "Romell Broom wurde zum Tode verurteilt. 18 Hinrichtungsversuche blieben jedoch ohne Erfolg. Schließlich verstarb der US-Amerikaner an Covid-19."
Corner_Notiz_String$ + "Romell Broom war 24 Jahre lang in der Todeszelle im US-Bundesstaat Ohio, bevor er 2009 hingerichtet werden sollte. Beamten konnten aber keine Vene finden, die die tödliche Injektion aufnehmen würde."
Corner_Notiz_String$ + "Romell Broom entkommt 18 Mal seiner Hinrichtung - Romell Brooms Hinrichtung war für den 15. September 2009 geplant. Als er auf die tödliche Injektion vorbereitet werden sollte, wurde Broom an einen Tisch geschnallt und die Beamten versuchten, eine geeignete Vene zu finden, um ihm die tödliche Mischung aus Pancuroniumbromid, Kaliumchlorid und Midazolam zu verabreichen."
Corner_Notiz_String$ + "Broom versuchte sogar zu helfen, indem er seinen Arm und seine Finger auf und ab bewegte - doch ohne Erfolg. Nach zwei Stunden und 18 Versuchen wurde beschlossen, die Hinrichtung zu verlegen."
Corner_Notiz_String$ + "'Covid Probable List'" + #LF$
Corner_Notiz_String$ + "Die zweite Hinrichtung von Broom wurde nach langem Hin und Her auf den 16. März 2022 verschoben. Doch dazu kam es nicht, wie unter anderem der Mirror berichtet."
Corner_Notiz_String$ + "Romell Broom verstarb am 28.   Dezember 2020. Er war 64 Jahre alt. Die Ärzte haben ihn auf die 'Covid Probable List' der Gefangenen gesetzt, bei denen der Verdacht besteht, dass sie am Coronavirus gestorben sind."
Corner_Notiz_String$ + "Die Verurteilung"
Corner_Notiz_String$ + "Broom hatte 24 Jahre in der Todeszelle von Ohio verbracht, nachdem er wegen Entführung, Vergewaltigung und Ermordung der 14-jährigen Tryna Middleton verurteilt worden war. Er hat immer seine Unschuld beteuert und 2003 einen DNA-Test durchgeführt, bei dem er seine Unschuld jedoch nicht beweisen konnte."
Corner_Notiz_String$ + "Abb. Elektrischer Stuhl"
; ********************************************************************

Procedure wrapWords(text.s, List lines.s(), lineLength.i)
	Protected index.i = 1, indexWordBoundary.i = -1
	Protected nextWord.s
	
	LastElement(lines())
	
	text = ReplaceString(text, #CRLF$, #LF$)
	
	If text = ""
		ProcedureReturn
	EndIf
	
	AddElement(lines())
	
	While indexWordBoundary <> 0
		indexWordBoundary = FindString(text, " ", index)
		
		If indexWordBoundary > 0
			nextWord = Mid(text, index, indexWordBoundary - index)
			index = indexWordBoundary + 1
		Else
			nextWord = Mid(text, index)
		EndIf
		If Trim(nextWord) = ""
			Continue
		EndIf
		
		If Len(lines()) + Len(nextWord) + 1 > lineLength
			AddElement(lines())
			If Len(nextWord) <= lineLength
				lines() = nextWord
			Else
				Protected i.i = 0
				While i < Len(nextWord)
					lines() = Mid(nextWord, i + 1, lineLength)
					AddElement(lines())
					i + lineLength
				Wend
			EndIf
		Else
			If Len(lines()) > 0
				lines() + " "
			EndIf
			lines() + nextWord
		EndIf
		
	Wend		
EndProcedure

NewList lines.s()

wrapWords(Corner_Notiz_String$, lines(), #LINE_LENGTH)

ForEach lines()
	Debug RSet("", #LINE_LENGTH, "#")
	Debug lines()
Next
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Zeilenumbruch

Beitrag von NicTheQuick »

Hab das mit dem Zeilenumbruch doch noch eingebaut:

Code: Alles auswählen

EnableExplicit

#LINE_LENGTH = 40

Define Corner_Notiz_String$ = ""
; --------------------------
;                "1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890
; ********************************************************************
; Corner_Notiz_String$ + "Surbraten: Surfleisch ist gebeiztes nicht geräuchertes Fleisch. Da dieses Fleisch schon gewürzt ist, braucht man es nur mehr bei 150° ca. 2h braten." + #CRLF$
; Corner_Notiz_String$ + "Einfach in eine feuerfeste Form geben und ab und an mal mit etwas Wasser untergießen. * 80 dag Surfleisch/Surbraten vom Schweinsschlögel- oder karree."
; ********************************************************************
; Corner_Notiz_String$ + "Wirkung  - Der schwarze Obsidian löst besonders gut Blockaden, Schock, Ängste und Traumata. Er hilft dabei, sich mit vergangenen Erfahrungen auseinander - zusetzen und damit verbundene Schmerzen zu lösen. ... "
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Der schwarze Obsidian fördert zudem ungenutzte Fähigkeiten und verbessert die Wahrnehmung."
; ; --------------------------
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Surbraten: Surfleisch ist gebeiztes nicht geräuchertes Fleisch. Da dieses Fleisch schon gewürzt ist, braucht man es nur mehr bei 150° ca. 2h braten." + #CRLF$
; Corner_Notiz_String$ + "Einfach in eine feuerfeste Form geben und ab und an mal mit etwas Wasser untergießen. * 80 dag Surfleisch/Surbraten vom Schweinsschlögel- oder karree."
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Wirkung  - Der schwarze Obsidian löst besonders gut Blockaden, Schock, Ängste und Traumata. Er hilft dabei, sich mit vergangenen Erfahrungen auseinander - zusetzen und damit verbundene Schmerzen zu lösen. ... "
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Der schwarze Obsidian fördert zudem ungenutzte Fähigkeiten und verbessert die Wahrnehmung."
; ; --------------------------
; Corner_Notiz_String$ + #CRLF$
; Corner_Notiz_String$ + "Surbraten: Surfleisch ist gebeiztes nicht geräuchertes Fleisch. Da dieses Fleisch schon gewürzt ist, braucht man es nur mehr bei 150° ca. 2h braten." + #CRLF$
; Corner_Notiz_String$ + "Einfach in eine feuerfeste Form geben und ab und an mal mit etwas Wasser untergießen. * 80 dag Surfleisch/Surbraten vom Schweinsschlögel- oder karree."
; ********************************************************************
Corner_Notiz_String$ + ~"Romell\nBroom wurde zum Tode verurteilt. 18 Hinrichtungsversuche\n blieben jedoch ohne Erfolg. Schließlich verstarb der US-Amerikaner an Covid-19."
Corner_Notiz_String$ + "Romell Broom war 24 Jahre lang in der Todeszelle im US-Bundesstaat Ohio, bevor er 2009 hingerichtet werden sollte. Beamten konnten aber keine Vene finden, die die tödliche Injektion aufnehmen würde."
Corner_Notiz_String$ + "Romell Broom entkommt 18 Mal seiner Hinrichtung - Romell Brooms Hinrichtung war für den 15. September 2009 geplant. Als er auf die tödliche Injektion vorbereitet werden sollte, wurde Broom an einen Tisch geschnallt und die Beamten versuchten, eine geeignete Vene zu finden, um ihm die tödliche Mischung aus Pancuroniumbromid, Kaliumchlorid und Midazolam zu verabreichen."
Corner_Notiz_String$ + "Broom versuchte sogar zu helfen, indem er seinen Arm und seine Finger auf und ab bewegte - doch ohne Erfolg. Nach zwei Stunden und 18 Versuchen wurde beschlossen, die Hinrichtung zu verlegen."
Corner_Notiz_String$ + "'Covid Probable List'" + #LF$
Corner_Notiz_String$ + "Die zweite Hinrichtung von Broom wurde nach langem Hin und Her auf den 16. März 2022 verschoben. Doch dazu kam es nicht, wie unter anderem der Mirror berichtet."
Corner_Notiz_String$ + "Romell Broom verstarb am 28.   Dezember 2020. Er war 64 Jahre alt. Die Ärzte haben ihn auf die 'Covid Probable List' der Gefangenen gesetzt, bei denen der Verdacht besteht, dass sie am Coronavirus gestorben sind."
Corner_Notiz_String$ + "Die Verurteilung"
Corner_Notiz_String$ + "Broom hatte 24 Jahre in der Todeszelle von Ohio verbracht, nachdem er wegen Entführung, Vergewaltigung und Ermordung der 14-jährigen Tryna Middleton verurteilt worden war. Er hat immer seine Unschuld beteuert und 2003 einen DNA-Test durchgeführt, bei dem er seine Unschuld jedoch nicht beweisen konnte."
Corner_Notiz_String$ + "Abb. Elektrischer Stuhl"
; ********************************************************************

Procedure wrapWords(text.s, List lines.s(), lineLength.i)
	Protected index.i = 1, indexWordBoundary.i = -1
	Protected nextWord.s, curLineLength.i
	
	LastElement(lines())
	
	text = ReplaceString(text, #CRLF$, #LF$)
	
	If text = ""
		ProcedureReturn
	EndIf
	
	AddElement(lines())
	
	While indexWordBoundary <> 0
		indexWordBoundary = FindString(text, " ", index)
		
		If indexWordBoundary > 0
			nextWord = Mid(text, index, indexWordBoundary - index)
			index = indexWordBoundary + 1
		Else
			nextWord = Mid(text, index)
		EndIf
		If Trim(nextWord) = ""
			Continue
		EndIf

		Protected indexLF.i = 1, indexLFBoundary = -1
		Protected nextWordPart.s
		
		While indexLFBoundary <> 0
			indexLFBoundary = FindString(nextWord, #LF$, indexLF)
			If indexLFBoundary > 0
				nextWordPart = Mid(nextWord, indexLF, indexLFBoundary - indexLF)
				indexLF = indexLFBoundary + 1
			Else
				nextWordPart = Mid(nextWord, indexLF)
			EndIf
			
			If nextWordPart <> nextWord And indexLFBoundary <> 0
				If Trim(nextWordPart) = ""
					AddElement(lines())
					Continue
				EndIf
			EndIf
				
		
			If Len(lines()) + Len(nextWordPart) + 1 > lineLength
				AddElement(lines())
				If Len(nextWordPart) <= lineLength
					lines() = nextWordPart
				Else
					Protected i.i = 0
					While i < Len(nextWordPart)
						lines() = Mid(nextWordPart, i + 1, lineLength)
						AddElement(lines())
						i + lineLength
					Wend
				EndIf
			Else
				If Len(lines()) > 0
					lines() + " "
				EndIf
				lines() + nextWordPart
			EndIf
			
			If nextWordPart <> nextWord And indexLFBoundary <> 0
				AddElement(lines())
			EndIf
		Wend
		
	Wend		
EndProcedure

NewList lines.s()

wrapWords(Corner_Notiz_String$, lines(), #LINE_LENGTH)

ForEach lines()
	Debug RSet("", #LINE_LENGTH, "-")
	Debug lines()
Next
Bild
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Zeilenumbruch

Beitrag von mk-soft »

Ist schon etwas alter (2019)

Link: DrawTextBox and DrawVectorTextBox

Verwende ich öfters ... :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Zeilenumbruch

Beitrag von Velindos »

Hallo NicTheQuick,

Danke für dein Beispiel. Sorry das ich den Aufruf vergessen habe! Also, Corner_Image_Text(Corner_String$, Corner_Schleife) übergebe ich den Corner_String$ und die Schleife(Anzahl wieviel ich Zeilen lesen möchte!), was verwirrt. Schleife ist für die Anzahl der Zeilen was ich Umschlage will, damit ich entscheiden kann wieviel TEXT ins Bild kommt. Sprich somit kann ich kleinere Bilder mit kurzen Text und längere Bilder mit dem Vollen Text aus meinen Velindos gestalten.

Deine Routine läuft ja wie geschmiert, nur wie kann ich jetzt der Routine Sagen das Sie nur 20 Zeilen vom Text lesen soll, obwohl der TEXT länger ist?

Noch ein Problem habe ich, wenn ich der Routine sage das Schleife = 100 ist, muss sie mir Rückmelden wieviel Schleifen(Zeilen) der Text hat! Dies Brauche ich weil ich aus dem die Höhe des nötigen Bildes berechne!

Also der Baustein hat die Funktion nach Vorne und nach Hinten zu gehen. Sprich eine Zeilenanzahl vorzugeben oder eine Zeilenanzahl(Wenn Vorgabe zu gross) zurück zugeben!

Habe die Sache mal so gelöst, Funzt allgemein, kann aber anscheinend gewisse Character nicht, weil ich direkt aus dem Gadget lese mit Getgadgettext?

Code: Alles auswählen

;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;- [FKT] Corner_Image_Text
; eine simple Lösung
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Global Corner_Max_Zeilen    = 199
Global Corner_Max_Character = 40

Global Corner_Zeilen_Max     = 1000
Global Dim Corner_Zeilen_Text.s(Corner_Zeilen_Max)

Global ListZeiger
; ********************************************************************
Gadget_ZeilenString$ + "Romell Broom wurde zum Tode verurteilt. 18 Hinrichtungsversuche blieben jedoch ohne Erfolg. Schließlich verstarb der US-Amerikaner an Covid-19."
Gadget_ZeilenString$ + "Romell Broom war 24 Jahre lang in der Todeszelle im US-Bundesstaat Ohio, bevor er 2009 hingerichtet werden sollte. Beamten konnten aber keine Vene finden, die die tödliche Injektion aufnehmen würde."
Gadget_ZeilenString$ + "Romell Broom entkommt 18 Mal seiner Hinrichtung - Romell Brooms Hinrichtung war für den 15. September 2009 geplant. Als er auf die tödliche Injektion vorbereitet werden sollte, wurde Broom an einen Tisch geschnallt und die Beamten versuchten, eine geeignete Vene zu finden, um ihm die tödliche Mischung aus Pancuroniumbromid, Kaliumchlorid und Midazolam zu verabreichen."
Gadget_ZeilenString$ + "Broom versuchte sogar zu helfen, indem er seinen Arm und seine Finger auf und ab bewegte - doch ohne Erfolg. Nach zwei Stunden und 18 Versuchen wurde beschlossen, die Hinrichtung zu verlegen."
Gadget_ZeilenString$ + "'Covid Probable List'" + #CRLF$
Gadget_ZeilenString$ + "Die zweite Hinrichtung von Broom wurde nach langem Hin und Her auf den 16. März 2022 verschoben. Doch dazu kam es nicht, wie unter anderem der Mirror berichtet."
Gadget_ZeilenString$ + "Romell Broom verstarb am 28. Dezember 2020. Er war 64 Jahre alt. Die Ärzte haben ihn auf die 'Covid Probable List' der Gefangenen gesetzt, bei denen der Verdacht besteht, dass sie am Coronavirus gestorben sind."
Gadget_ZeilenString$ + "Die Verurteilung"
Gadget_ZeilenString$ + "Broom hatte 24 Jahre in der Todeszelle von Ohio verbracht, nachdem er wegen Entführung, Vergewaltigung und Ermordung der 14-jährigen Tryna Middleton verurteilt worden war. Er hat immer seine Unschuld beteuert und 2003 einen DNA-Test durchgeführt, bei dem er seine Unschuld jedoch nicht beweisen konnte."
Gadget_ZeilenString$ + "Abb. Elektrischer Stuhl!"
;  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EnableExplicit
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Corner_Image_Text(Corner_String$, Zeilen_Max, Character_Max)
  ;{ Protected
  Protected Ergebnis_Zeiger   = 0
  Protected Corner_Positions_Zeiger   = 0
  Protected Corner_CharPos    = 0
  Protected Corner_Zeile 
  Protected Ergebnis$         = " "
  Protected X 
  ;}
  ; --------------------------------------------
  Corner_String$ = ReplaceString(Corner_String$,#CRLF$,#CR$,1)
  ; --------------------------------------------
  For Corner_Zeile = 0 To Zeilen_Max
    ; --------------------------------------------
    ; Debug "Corner_Positions_Zeiger => " + Corner_Positions_Zeiger
    Corner_String$ = Mid(Corner_String$, Corner_Positions_Zeiger +1 , Len(Corner_String$))
    ; --------------------------------------------
    Ergebnis$ = Mid(Corner_String$, 0,Character_Max)
    ; --------------------------------------------
    Corner_CharPos = 0
    Corner_CharPos = FindString(Ergebnis$, #CR$ , 0 , #PB_String_NoCase)
    ; --------------------------------------------
    If Corner_CharPos = 0 
      ; --------------------------------------------
      For X = Len(Ergebnis$) To 0 Step -1
        ;{ Von hinten " " finden und Ausschneiden
        Corner_CharPos = 0
        Corner_CharPos = FindString(Ergebnis$, " " , X , #PB_String_NoCase)
        ; --------------------------------------------
        If Len(Ergebnis$) < (Character_Max -3)
          Corner_Zeilen_Text(Corner_Zeile)     = Ergebnis$
          ProcedureReturn Corner_Zeile +1
        EndIf
        ; --------------------------------------------
        If Corner_CharPos > 0
          Corner_Positions_Zeiger                       = Corner_CharPos
          Ergebnis$                             = Mid(Corner_String$,0,Corner_CharPos)
          Corner_Zeilen_Text(Corner_Zeile)     = Ergebnis$
          Corner_Max_Zeilen = Corner_Zeile
          Break 
        EndIf
        ;}
      Next
      ; --------------------------------------------
    Else
      ; --------------------------------------------
      Ergebnis$                                     = Mid(Corner_String$,0,Corner_CharPos)
      Corner_Zeilen_Text(Corner_Zeile)              = Ergebnis$
      Corner_Positions_Zeiger                       = Corner_CharPos + 1
      ; --------------------------------------------
      Corner_Zeile                                  = Corner_Zeile +1
      Corner_Zeilen_Text(Corner_Zeile)              = " "
      ; --------------------------------------------
      Corner_Max_Zeilen = Corner_Zeile + 1
      ; --------------------------------------------
      If Len(Corner_String$) < Character_Max 
        Corner_Zeilen_Text(Ergebnis_Zeiger+1) = Corner_String$
        Corner_Max_Zeilen = Ergebnis_Zeiger + 1
        Break
      EndIf
      ; --------------------------------------------
    EndIf
    ; --------------------------------------------
  Next
  ; --------------------------------------------
  ProcedureReturn Corner_Max_Zeilen
  ; --------------------------------------------
EndProcedure
; --------------------------------------------
; Aufruf
Corner_Max_Zeilen     = 199
Corner_Max_Character  = 40
Corner_Max_Zeilen = Corner_Image_Text(Gadget_ZeilenString$, Corner_Max_Zeilen, Corner_Max_Character)
; --------------------------------------------
; Auslesen für Bild
For ListZeiger = 0 To Corner_Max_Zeilen
  If Corner_Zeilen_Text.s(ListZeiger) = ""
    Break
  Else
    Debug "=> "+"xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx"
    Debug "=> " + Corner_Zeilen_Text.s(ListZeiger)
  EndIf
Next
; --------------------------------------------
Debug "=> "+"xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx"
; Wieviel Zeilen
Debug "Zeilenanzahl des Textes = "+Corner_Max_Zeilen
; --------------------------------------------
End
; --------------------------------------------
Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten