Entwickler-Ecke
Sonstiges (Delphi) - Angepasstes WordWrap
galagher - Mi 18.02.09 20:23
Titel: Angepasstes WordWrap
Hallo!
Es geht um WordWrap, genauer, ich brauche eine angepasste Variante des WordWrap-Zeilenumbruchs. Hier ein Beispieltext, wie es normalerweise aussieht:
Delphi-Quelltext
1: 2: 3:
| Text: Das ist ein Beispieltext. Hier an dieser Stelle <- wird der Text umgebrochen. Und hier a dieser Stelle <- wieder. |
Ich brauche aber:
Delphi-Quelltext
1: 2: 3:
| Text: Das ist ein Beispieltext. Hier an dieser Stelle <- wird der Text umgebrochen. Und hier a dieser <- Stelle wieder. |
Es soll also automatisch um eine gewisse Anzahl an Leerzeichen eingerückt werden, egal, über wie viele Zeilen sich der Text erstreckt.
Meine momentane Lösung sieht so aus und funktioniert nur bei zwei Zeilen, also wenn der Text 1x umgebrochen wird:
Delphi-Quelltext
1: 2: 3:
| with RichEdit1 do if not (GetWord(Lines[Lines.Count-1], 1) = 'Text') then Lines[Lines.Count-1] := #160#160#160#160#160#160#160#160+Lines[Lines.Count-1]; |
Ich musste #160 verwenden, da es mit Leerzeichen nicht klappt!
Yogu - Mi 18.02.09 21:34
Hallo,
du hast ja schon fast den kompletten Code. Baue noch eine Schleife ein, und gehe dadurch alle Zeilen durch, die nicht mit "Text" beginnen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var i: Integer; begin for i := 0 to RichEdit1.Lines.Count-1 do if not (GetWord(RichEdit1.Lines[i], 1) = 'Text') then Lines[RichEdit1.Lines.Count-1] := StringOfChar(#160, 8) + RichEdit1.Lines[i]; end; |
StringOfChar erstellt eine Zeichenkette aus einem beliebigen Zeichen, das n-mal aneinandergereiht wird. Ich hoffe mal, die Parameterfolge stimmt.
Sonst habe ich nur die Schleife hinzugefügt, und das
with entfernt - das ist in diesem Fall sinnlos und deshalb nur verwirren.d
Grüße,
Yogu
ssb-blume - Do 19.02.09 10:54
Hallo,
Schau mal in die Dokumentation von Richedit, PARAFORMAT, StartIndent!
Dieser Wert ist der Einzug der 1. Zeile. Wenn er negativ ist, dann werden
folgende Zeilen eingerückt (alle Angaben in Twips!).
Hansi
galagher - Do 19.02.09 20:41
Yogu hat folgendes geschrieben : |
| du hast ja schon fast den kompletten Code. Baue noch eine Schleife ein, und gehe dadurch alle Zeilen durch, die nicht mit "Text" beginnen: |
Das funktioniert nicht! Beispielcode, wie es aussieht...
Delphi-Quelltext
1: 2: 3: 4:
| Text: Das ist ein Beispieltext. Hier an dieser Stelle <- wird der Text umgebrochen. Und hier an dieser <- Stelle wieder. Text: Das ist ein Beispieltext. Hier an dieser Stelle |
... und wie es aussehen soll:
Delphi-Quelltext
1: 2: 3: 4: 5:
| Text: Das ist ein Beispieltext. Hier an dieser Stelle <- wird der Text umgebrochen. Und hier an dieser <- Stelle wieder. Das ist ein Beispieltext. Hier an dieser Stelle Text: |
ssb-blume hat folgendes geschrieben : |
Hallo,
Schau mal in die Dokumentation von Richedit, PARAFORMAT, StartIndent!
Dieser Wert ist der Einzug der 1. Zeile. Wenn er negativ ist, dann werden
folgende Zeilen eingerückt (alle Angaben in Twips!).
Hansi |
Was bitte ist: PARAFORMAT, StartIndent, alle Angaben in Twips? :nixweiss:
ssb-blume - Fr 20.02.09 10:50
Pardon!!!
Tut mir leid, aber ich kann nicht dafür, dass wesentliche Bestandteile von Richedit nicht mehr
veröffentlicht werden. Es gab früher eine Unit in Delphi unter ..SOURCE\RTL\WIN \richedit.pas,
da war noch alles drin. Unter .Net sieht das natürlich anders aus..
Sorry
galagher - Fr 20.02.09 21:46
Jetzt funktioniert es:
Delphi-Quelltext
1: 2: 3:
| for i := 3 downto 1 do if not (GetWord(Lines[Lines.Count-i], 1) = 'Text') then Lines[Lines.Count-i] := StringOfChar(#160, 8)+Lines[Lines.Count-i]; |
Danke!
Ydobon - Sa 21.02.09 03:23
Z.B:
Delphi-Quelltext
1: 2:
| RichEdit1.Paragraph.FirstIndent:=10; RichEdit1.Paragraph.LeftIndent:=50; |
galagher - Sa 21.02.09 11:37
Eleganter:
Delphi-Quelltext
1: 2: 3:
| for i := 3 downto 1 do if not (GetWord(Lines[Lines.Count-i], 1) = 'Text') then Lines[Lines.Count-i] := StringOfChar(#9, 1)+' '+Lines[Lines.Count-i]; |
Allerdings stellt sich hier die Frage, ob #9 immer exakt 8 Leerzeichen (bei Schriftart Courier New) entspricht oder ob man mit Windows die Tabulatorzeichen-"Länge" verändern kann! Hat hierzu jemand eine Antwort?
galagher - Sa 21.02.09 13:19
Noch flexibler und vor allem korrekt, zumindest für meine Zwecke:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| c := 5; if Lines.Count > c-1 then for i := c downto 1 do if not (GetWord(Lines[Lines.Count-i], 1) = 'Test') and not (Lines[Lines.Count-i][1] = #9) then Lines[Lines.Count-i] := #9+' '+Lines[Lines.Count-i]; |
Bleibt die Frage nach der "Tab-Länge"!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!