Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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:
ausblenden 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];  //unsauber, ja, ich weiss!

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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:

ausblenden 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(#1608) + 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 375
Erhaltene Danke: 7

XP, W7, W8
Deutschland
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Do 19.02.09 20:41 
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
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...
ausblenden 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:
ausblenden 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:


user profile iconssb-blume hat folgendes geschrieben Zum zitierten Posting springen:
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:

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 19.02.09 21:22 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
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!

Oh, da ist mir wohl ein Fehler unterlaufen. Das bietet sich doch als ganz tolle Übung: Finde den Fehler ;)

(Ich hab ihn schon)

Edit:

user profile iconssb-blume hat folgendes geschrieben Zum zitierten Posting springen:
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

Diese beiden Eigenschaften kenne ich nicht (und es gibt sie auch nicht). (Delphi 2005)
ssb-blume
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 375
Erhaltene Danke: 7

XP, W7, W8
Deutschland
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 20.02.09 21:46 
Jetzt funktioniert es:
ausblenden Delphi-Quelltext
1:
2:
3:
for i := 3 downto 1 do //Die Integers könnte man evtl. noch durch Lines.Count oder so ersetzen
 if not (GetWord(Lines[Lines.Count-i], 1) = 'Text'then
  Lines[Lines.Count-i] := StringOfChar(#1608)+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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 42



BeitragVerfasst: Sa 21.02.09 03:23 
Z.B:
ausblenden Delphi-Quelltext
1:
2:
  RichEdit1.Paragraph.FirstIndent:=10;
  RichEdit1.Paragraph.LeftIndent:=50;
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 21.02.09 11:37 
Eleganter:
ausblenden 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(#91)+' '+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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 21.02.09 13:19 
Noch flexibler und vor allem korrekt, zumindest für meine Zwecke:
ausblenden 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] = #9then
    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!