Zeilenumbruch im RichEdit feststellen
-
hi zusammen,
wie der Titel schon sagt, möchte ich feststellen ob in einem RichEdit ein Zeilenumbruch stattgefunden hat. Leider komme ich irgendwie nicht weiter.
als Vorlage habe ich einen Code in Delphi. Dort wird es so geregelt:
[cpp] AktLine:Integer; // welche Zeile bearbeiten wir AktLine:=0; // Testen, ob wir eine neue Zeile erreicht haben, wenn ja, // dann entweder neuer Paragraph oder <br> if AktLine <> SendMessage (Source.Handle, EM_LINEFROMCHAR, Source.SelStart, 0) then begin ..... if Trim(Source.Lines[AktLine])='' then // wenn die nächste Zeile leer ist, dann fügen wir einen neuen Paragraphen // ein, sonst nur ein <br> begin // und nun eine Aktion....[/cpp]in c++ hab ich das so übersetzt:
[cpp]if(AktLine = SendMessage(RichEdit1->Handle, EM_LINEFROMCHAR, RichEdit1->SelStart, 0)) { if(RichEdit1->Lines[AktLine] = "") // hier gehts nicht weiter !!! Auch mit Trim nicht { // mach irgendwas }[/cpp]kann mir jmd mal bitte ein wenig auf die Sprünge helfen?
herzlichen Dank
-
-
Avalon schrieb:
wie der Titel schon sagt, möchte ich feststellen ob in einem RichEdit ein Zeilenumbruch stattgefunden hat.
Wann willst du das feststellen?
-
OldMan00 schrieb:
Hi,
Er meint sicherlich ob ein Zeilenumbruch wie Eingabetaste stattgefunden hat! Es gibt ja auch Texte über zwei oder mehr Zeilen in denen sich nicht ein Zeilenumbruch befindet.
mfg, Micha!
-
Hi,
Er meint sicherlich ob ein Zeilenumbruch wie Eingabetaste stattgefunden hat! Es gibt ja auch Texte über zwei oder mehr Zeilen in denen sich nicht ein Zeilenumbruch befindet.
die Eingabetaste könnte er ja abfragen. Ich vermute eher, daß es ihm darum geht, die automatischen Zeilenumbrüche festzustellen, wenn er am Zeilenende ankommt.
Gruß,
ChristianPS: versuche es mal so:
void __fastcall TForm1::RichEdit1Change(TObject *Sender) { if(RichEdit1->Lines->Count != count) { count = RichEdit1->Lines->Count; ShowMessage("Zeilenumbruch"); } }count ist eine int-Variabel in TForm1.
-
Christian Sonder schrieb:
Hi,
Er meint sicherlich ob ein Zeilenumbruch wie Eingabetaste stattgefunden hat! Es gibt ja auch Texte über zwei oder mehr Zeilen in denen sich nicht ein Zeilenumbruch befindet.
die Eingabetaste könnte er ja abfragen. Ich vermute eher, daß es ihm darum geht, die automatischen Zeilenumbrüche festzustellen, wenn er am Zeilenende ankommt.
Hi,
Dies ist ein Beispieltext in dem es darum geht einen Zeilenumbruch zu suchen. Dieser Text geht über mehrere Zeilen, aber ein Zeilenumbruch findet nicht automatisch am Ende einer Zeile statt, sondern zum Beispiel erst jetzt:
break <<< Da war mein Zeilenumbruch
in den Zeilen vorher war aber keiner, zumindest kein von mir festgelegter 
mfg, Micha!
-
hallo zusammen,
sorry, war gestern nicht am pc.
ich schreibe einen converter um rtf in html umzuwandeln. ich muß also wärend der laufzeit feststellen ob ein zeilenumbruch im text ist und dann ein <br> setzten.
-
Bitte? Ich bin mir nicht nicht sicher, ob ich Dich richtig verstehe. Mein kleiner Codeausschnitt stellt fest, wann beim Tippen im TRichEdit eine neue Zeile angefangen wird. Das ist natürlich dann der Fall, wenn der Benutzer die Return-Taste drückt (bei Dir vor dem break), genauso gut aber, wenn das Zeilenende erreicht wird und die Komponente aus Platzgründen von selbst eine neue Zeile anfängt.
Es stellt sich die Frage, was Avalon will. Die von Dir beschriebenen (harten) Zeilenumbrüche findet er, indem im Text nach "\r\n" sucht, die von mir beschriebenen automatischen findet er wie oben im Code gezeigt.Oops, da war ich aber langsam ...
-
eben, und ohne dir ordentliche Aussage was er denn eigentlich will, kann man da auch nur raten 
@avalon
Um den Tastendruck (Return) zur Laufzeit abzufangen bietet sich das Event OnKeyPress an:if (key == VK_RETURN) { //AddIrgendwo ("<br />"); }mfg, Micha!
-
RandomAccess85 schrieb:
@avalon
Um den Tastendruck (Return) zur Laufzeit abzufangen bietet sich das Event OnKeyPress an:if (key == VK_RETURN) { //AddIrgendwo ("<br />"); }mfg, Micha!
nene, da hast du mich falsch verstanden. ich mache keine eingabe, daher kann OnKeyPress nicht abgefangen werden.
ich versuchs noch mal anders zu erklären:
ich öffne mit dem programm eine rtf datei. die sieht dann z.b. so aus:
zeile 1
zeile 2
und noch eine zeiledas programm soll die einlesen und dann daraus einen html text machen:
zeile 1<br>zeile 2<br>und noch eine zeile
(andere formatierungen berücksichtige ich jetzt nicht)
oben im delphi code wird der Zeilenumbruch so ermittelt:
if Trim(Source.Lines[AktLine])='' then // Source = RichEdit, AktLine = Zeilennummerdies klappt aber nicht in c++. daher meine frage wie man so etwas in c++ ermittelt.
-
for(int loop=0; loop<RichEdit1->Lines->Count; ++loop) { String Line = RichEdit1->Lines->Strings[loop]; // Line kannst Du jetzt weiterverarbeiten und am Ende ein <br> anhängen. }Gruß,
Christian
-
OldMan00 schrieb:
kann mich nur wiederholen.
Lade die Datei in eine TStringList und Du hast jede Zeile einzeln, mit Zugriff von Strings[x].
-
Avalon schrieb:
das programm soll die einlesen und dann daraus einen html text machen:
zeile 1<br>zeile 2<br>und noch eine zeile
(andere formatierungen berücksichtige ich jetzt nicht)
Einfach mit StringReplace in RichEdit::Lines::Text alle '\r\n' durch '<br>' ersetzen.
Diser Ansatz dürfte auch beim Umwandeln der anderen Format-"Tags" hilfreich sein.
-
Hallo,
kann ich anstatt dem "RichEdit" auch eine String-Variable benutzen?
Viele Grüße,
Freddy
-
Na klar.
Wenn der Text nur bearbeitet werden soll, ohne ihn anzuzeigen, dann ist das der zu bevorzugende Weg.
-
Wie muss ich dass dann abändern, ich kann ja nicht einfach in "RichEdit1->Lines->Count" oder "RichEdit1->Lines->Strings[loop]" RichEdit durch eine Variable ersetzen?
Gruß,
Freddy
-
Hallo
Wenn du Zeilenorientiert arbeiten willst nimm TStringList. Brauchst du keine Rücksicht auf Zeilen zu nehmen nimm gleich AnsiString.
bis bald
akari
-
AnsiString Zeile = RichEdit1->Lines->Strings[x];
-
OldMan00 schrieb:
AnsiString Zeile = RichEdit1->Lines->Strings[x];
das ist mit schon klar, aber ich möchte es ja OHNE "RichEdit" machen

Ich habe z.b. meine Daten im string "text" dann die Zeilen in einem string array haben.
Wie funktioniert das dann genau mit der TStringList?
Ich habe leider noch nie in dieser Form mit Texten gearbeitet...Vielen Dank nochmal,
Freddy
-
Hallo
Suchfunktion und Builder-Hilfe benutzen! ]Das zum beispiel ist nur 3 Threads unter deinem
bis bald
akari
-
Im Prinzip verstehe ich es schon, aber ich blick im Moment gar nicht wie ich es zur Zeilentrennung einsetzen kann...
