Forum > RichMemo

TRichMemo - add line by line

(1/2) > >>

mdalacu:
Hi, i need a simple example or a hint regarding adding lines in a TRichMemo with different styles or colors.
I have tried everyting..it is such a simple task and i can't do it.. :'(
I need something like this (pseudocode):
 RichMemo.Lines.Clear;
 RichMemo1.SetTextAttributes(style1);
 RichMemo.Lines.('Sample text 1');
 RichMemo1.SetTextAttributes(style2);
 RichMemo.Lines.('Sample text 2');
 .. and so on...

Thank you!

Arbee:
I have not used Richmemo very often, but this (in my eyes terribly dirty) coding works to get lines in different colors:


--- Code: ---  with Richmemo1 do begin
     clear;
     SetRangeColor(0,1000,clRed);
     Append('Line in red');
     SelStart := 999999;
     SetRangeColor(SelStart,1000,clBlue);
     Append('Line in blue');
     SelStart := 999999;
     SetRangeColor(SelStart,1000,clGreen);
     Append('Line in green');
   end;

--- End code ---

mdalacu:
Thank you for your replay, it works. :D
 I have updated the example a bit, it's a little bit faster:

--- Code: ---    with RichMemo1 do
      begin
        Clear;
        Lines.Add('Line in red');
        SetRangeColor(Length(RichMemo1.Lines.Text)-Length(RichMemo1.Lines[RichMemo1.Lines.Count-1])-RichMemo1.Lines.Count-1,Length(RichMemo1.Lines[RichMemo1.Lines.Count-1]),clRed);

        Lines.Add('Line in black ');
        SetRangeColor(Length(RichMemo1.Lines.Text)-Length(RichMemo1.Lines[RichMemo1.Lines.Count-1])-RichMemo1.Lines.Count-1,Length(RichMemo1.Lines[RichMemo1.Lines.Count-1]),clBlack);

        Lines.Add('Line in blue ');
        SetRangeColor(Length(RichMemo1.Lines.Text)-Length(RichMemo1.Lines[RichMemo1.Lines.Count-1])-RichMemo1.Lines.Count-1,Length(RichMemo1.Lines[RichMemo1.Lines.Count-1]),clBlue);

        Lines.Add('Line in green ');
        SetRangeColor(Length(RichMemo1.Lines.Text)-Length(RichMemo1.Lines[RichMemo1.Lines.Count-1])-RichMemo1.Lines.Count-1,Length(RichMemo1.Lines[RichMemo1.Lines.Count-1]),clGreen);

        Lines.Add('Line in yellow ');
        SetRangeColor(Length(RichMemo1.Lines.Text)-Length(RichMemo1.Lines[RichMemo1.Lines.Count-1])-RichMemo1.Lines.Count-1,Length(RichMemo1.Lines[RichMemo1.Lines.Count-1]),clYellow);

        Lines.Add('Normal line.');
        Lines.Add('Normal line.');
        Lines.Add('Line in gray');
        SetRangeColor(Length(RichMemo1.Lines.Text)-Length(RichMemo1.Lines[RichMemo1.Lines.Count-1])-RichMemo1.Lines.Count-1,Length(RichMemo1.Lines[RichMemo1.Lines.Count-1]),clGray);
      end;
--- End code ---

User137:
Just a sidenote, you have the whole code in "with RichMemo1 do", so you don't need to call RichMemo1 inside it  :)

If you only need to color 10 or less lines with the code its fast enough, but overuse of length() should be avoided. You can use variables to save last index position.

mdalacu:
you are right, here is the updated example:

--- Code: ---with RichMemo1 do
      begin
        Clear;
        Lines.Add('Line in red');
        SetRangeColor(Length(Lines.Text)-Length(Lines[Lines.Count-1])-Lines.Count-1,Length(Lines[Lines.Count-1]),clRed);

        Lines.Add('Line in black ');
        SetRangeColor(Length(Lines.Text)-Length(Lines[Lines.Count-1])-Lines.Count-1,Length(Lines[Lines.Count-1]),clBlack);

        Lines.Add('Line in blue ');
        SetRangeColor(Length(Lines.Text)-Length(Lines[Lines.Count-1])-Lines.Count-1,Length(Lines[Lines.Count-1]),clBlue);

        Lines.Add('Line in green ');
        SetRangeColor(Length(Lines.Text)-Length(Lines[Lines.Count-1])-Lines.Count-1,Length(Lines[Lines.Count-1]),clGreen);

        Lines.Add('Line in yellow ');
        SetRangeColor(Length(Lines.Text)-Length(Lines[Lines.Count-1])-Lines.Count-1,Length(Lines[Lines.Count-1]),clYellow);

        Lines.Add('Normal line.');
        Lines.Add('Normal line.');
        Lines.Add('Line in gray');
        SetRangeColor(Length(Lines.Text)-Length(Lines[Lines.Count-1])-Lines.Count-1,Length(Lines[Lines.Count-1]),clGray);
      end;             
--- End code ---

For Linux you have to modify the line like this:

--- Code: ---SetRangeColor(Length(Lines.Text)-Length(Lines[Lines.Count-1])-1,Length(Lines[Lines.Count-1]),clYellow);
--- End code ---
And also for the component to compile under Ubuntu you have to replace gtk2richmemo with the one attached.

Anyway, Lazarus really needs an updated component capable of displaying formatted text.

Navigation

[0] Message Index

[#] Next page

Go to full version