[gelöst]Wie in LzRichEdit einzel. Buchstaben Farbe zuweisen?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
idefix
Beiträge: 61
Registriert: So 21. Aug 2011, 20:37
OS, Lazarus, FPC: WIN7 /Laz 1,0,8 / FPC 2.6.2/ SVN 40573
CPU-Target: xxBit

[gelöst]Wie in LzRichEdit einzel. Buchstaben Farbe zuweisen?

Beitrag von idefix »

Hallo!

Ich versuche mich wieder an der Farbzuweisung einzelner Buchstaben in einem LzRichEdit.

Ich weiß nicht, warum folgendes Beispiel nicht funktioniert.

Code: Alles auswählen

LzRichEdit1.SelStart := 1; // Am Textanfang
  LzRichEdit1.SelLength := 0; // Länge der Markierung = 0 => Keine Markierung, nur Cursorposition
  LzRichEdit1.SelAttributes.Color := clred; // Farbeinstellung an Markierung, in diesem Fall eben Cursorpos
  LzRichEdit1.SelText := Edit1.Text; // Text einfügen
  LzRichEdit1.SelStart := LzRichedit1.GetTextLen; // Cursor ans Ende des Richedit => Da zuvor leer ans Ende des Textes in Edit1
  LzRichEdit1.SelLength := 0; // Wieder Markierung = 0
  LzRichEdit1.SelAttributes.Color := clblack; // Farbeinstellung
  LzRichEdit1.SelText := Edit2.Text; // Und Text zuweisen
Einer ganzen Zeile Farbe zuweisen funktioniert:

Code: Alles auswählen

  lzRichEdit1.SelAttributes.Color := clred;
  lzRichEdit1.Lines.Add('Edit1.text');
  lzRichEdit1.SelAttributes.Color := clblue;
  lzRichEdit1.Lines.Add('Edit2.text'); 
Beide Beispiele stammen von hier:
http://www.lazarusforum.de/viewtopic.php?f=18&t=5955

Hat einer von Euch ein anderes Beispiel, (von mir aus mit einem anderen Edit), wo er einzelnen Buchstaben Farbe zuweisen kann?

Vielen Dank!

Gruß
idefix
Zuletzt geändert von idefix am Mo 9. Sep 2013, 19:46, insgesamt 1-mal geändert.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Wie in einem LzRichEdit einzelnen Buchstaben Farbe zuwei

Beitrag von Michl »

Ja, habe ich eben mal ausprobiert und habe mal in einem lzRichEdit jedes Zeichen per Zufall eine Farbe vergeben:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  dummy:integer;
begin
  lzRichEdit1.SelStart:=0;
  dummy:=-1;
  while lzRichEdit1.SelStart>dummy do begin
    lzRichEdit1.SelLength:=1;
    lzRichEdit1.SelAttributes.Color:=random($FFFFFF+1);
    dummy:=lzRichEdit1.SelStart;
    lzRichEdit1.SelStart:=lzRichEdit1.SelStart+1;
  end;
end;
Dann habe ich mit einer zweiten Procedure einen Text mit SelText eingefügt:

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
begin
  LzRichEdit1.SelStart := 0; //Textanfang=0 !!!
  LzRichEdit1.SelText := 'Mein Text';
end; 
Und siehe da, sämtliche farbliche Markierungen sind weg!!! Und zwar Formatierungen vor (wenn man SelStart>0 wählt) und nach dem eingefügten Text.

Ist entweder ein Bug oder ein Feature von lzRichEdit, dass durch das Einfügen mit SelText sämtliche Formatierungen gelöscht werden.

Ich selbst habe damit allerdings noch nicht gearbeitet, sondern eben das nur mal ausprobiert, evtl. gibts da einen Trick/Workaround, den jemand anders kennt?!

Selber würde mir nur einfallen, eine Liste selbst zu erstellen, wo alle Positionen/Offsets, Längen und Textattribute gespeichert werden, die nach dem Einfügen mit SetText (um die Länge (utf8Length(SetText)) angepasst wieder neu gesetzt werden.

Achso, ich hatte lzRichEdit von hier (Version 0.1.5) runtergeladen, evtl. gibts ja schon eine neuere Version?!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Wie in einem LzRichEdit einzelnen Buchstaben Farbe zuwei

Beitrag von hde »

was ist denn mit RichMemo 1.0 ??

idefix
Beiträge: 61
Registriert: So 21. Aug 2011, 20:37
OS, Lazarus, FPC: WIN7 /Laz 1,0,8 / FPC 2.6.2/ SVN 40573
CPU-Target: xxBit

Re: Wie in einem LzRichEdit einzelnen Buchstaben Farbe zuwei

Beitrag von idefix »

Hallo Michl!

Hat super geklappt!

Vielen, vielen Dank!

Gruß!
idefix

Antworten