| Autor |
Beitrag |
galagher
      
Beiträge: 2562
Erhaltene Danke: 46
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 18.02.09 20:23
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!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: 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
      
Beiträge: 375
Erhaltene Danke: 7
XP, W7, W8
Deutschland
|
Verfasst: 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
_________________ Brain: an apparatus with which we think we think.
|
|
galagher 
      
Beiträge: 2562
Erhaltene Danke: 46
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Do 19.02.09 20:41
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 19.02.09 21:22
|
|
ssb-blume
      
Beiträge: 375
Erhaltene Danke: 7
XP, W7, W8
Deutschland
|
Verfasst: 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
_________________ Brain: an apparatus with which we think we think.
|
|
galagher 
      
Beiträge: 2562
Erhaltene Danke: 46
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: 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!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Ydobon
      
Beiträge: 42
|
Verfasst: Sa 21.02.09 03:23
Z.B: Delphi-Quelltext 1: 2:
| RichEdit1.Paragraph.FirstIndent:=10; RichEdit1.Paragraph.LeftIndent:=50; |
|
|
galagher 
      
Beiträge: 2562
Erhaltene Danke: 46
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: 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?
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
galagher 
      
Beiträge: 2562
Erhaltene Danke: 46
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: 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"!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|