Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Добавление разноцветной форматированной строки в RichEdit


Страницы:   1 2

azl ©   (2011-01-16 15:12:00) 

Здравствуйте, уважаемые Мастера.
Подскажите, пожалуйста, каким образом можно добавить строку в RichEdit, чтобы у нее были некоторые слова разного цвета, некоторые выделены жирным?
Например:

Это разноцветная форматированная строкав RichEdit.

Слово "разноцветная" - красного цвета, слово "форматированная" - зеленого цвета, а "RichEdit" - синего.
"форматированная строка" - выделено жирным.

Добавлять каждую новую строку разного цвета - не проблема, а вот как сделать чтобы слова в одной строке были разноцветные, жирные и т.д.?

Работаю в Delphi XE.

Заранее спасибо.


Palladin   (2011-01-20 17:48:00) [1]


> Я что больной? В редактор вставил и посмотрел.

))))))))))


azl   (2011-01-19 17:51:00) [2]

Сейчас понял в чем проблема была. Я пробовал проделать это с RxRichEdit.


azl   (2011-01-19 17:47:00) [3]


> Ну разумеется...

О, чудо. Попробовал еще раз на XE, все работает. )))


azl   (2011-01-19 17:39:00) [4]


> коряво очень.

Та понятно, все такие умные, только никто ничего более толкового не предложил.


> не устал считать буковки?

Я что больной? В редактор вставил и посмотрел.


> Ну разумеется...

Пример, который я привел был проверен на Delphi7, Turbo Delphi и Delphi 2009. Везде работает корректно. На Delphi XE не работает.


Студент   (2011-01-18 23:47:00) [5]

RichEdit в делфи устаревший... Импортируйте RichBox из ActiveX... Тогда будет доступ к самим RTF-тегам...
Хотя может и лишнее...)


> Выводится ', который отошел влево, и промахнулся' без всякого
> форматирования.


Ну разумеется... Где ж RichEdit1.SelLength:=0;после каждого SelAttributes?


KilkennyCat   (2011-01-18 23:37:00) [6]


> Взял за основу пример из JVCL с JvRichEdit. там есть пример
> мессенджера, он -то мне и помог.

все это описано в справке. причем очень доступно. нафига какието джедаевские примеры...


> может, кому-то пригодиться.
>

извиняюсь, но только идиоту.
коряво очень.
особенно прикольнуло
'форматированная ', 16

не устал считать буковки?


azl   (2011-01-18 19:29:00) [7]

Вот, таки, получилось у меня реализовать поставленную задачу, может, кому-то пригодиться.

Взял за основу пример из JVCL с JvRichEdit. там есть пример мессенджера, он -то мне и помог.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, JvExStdCtrls, JvRichEdit, RxRichEd;

type
 TForm1 = class(TForm)
   Button1: TButton;
   RxRichEdit1: TRxRichEdit;
   procedure Button1Click(Sender: TObject);
   procedure InsertFormatText(Index: Integer; const S: string; const AFont: TFont = nil);
 private
   { Private declarations }
   FHeaderFont: TFont;
 public
   { Public declarations }
   constructor Create(AOwner: TComponent); override;
   procedure AddTextToRichEdit(P: PChar; const ALength: Integer; AFont: TFont);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.InsertFormatText(Index: Integer; const S: string; const AFont: TFont = nil);
var
 ASelStart, ASelLength: Integer;
begin
 if S = '' then
   Exit;
 ASelStart := RxRichEdit1.SelStart;
 ASelLength := RxRichEdit1.SelLength;
 try
   if Index > -1 then
     RxRichEdit1.SelStart := Index;
   RxRichEdit1.SelLength := 0;
   if AFont <> nil then
     RxRichEdit1.SelAttributes.Assign(AFont);
   RxRichEdit1.SelText := S;
 finally
   RxRichEdit1.SelStart := ASelStart;
   RxRichEdit1.SelLength := ASelLength;
 end;
end;

procedure TForm1.AddTextToRichEdit(P: PChar; const ALength: Integer; AFont: TFont);
var
 S: string;
begin
 if ALength < 0 then
   Exit;
 SetString(S, P, ALength);
 InsertFormatText(-1, S, AFont);
 { Move cursor }
 with RxRichEdit1.GetSelection do
   RxRichEdit1.SetSelection(cpMin + ALength, cpMin + ALength, False);
end;

constructor TForm1.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FHeaderFont := TFont.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 RxRichEdit1.SetSelection(MaxInt, MaxInt, False);
 AddTextToRichEdit('Это ', 4, FHeaderFont);

 FHeaderFont.Color := clRed;
 AddTextToRichEdit('разноцветная ', 13, FHeaderFont);

 FHeaderFont.Color := clGreen; FHeaderFont.Style := [fsBold];
 AddTextToRichEdit('форматированная ', 16, FHeaderFont);

 FHeaderFont.Color := clBlack;
 AddTextToRichEdit('строка ', 7, FHeaderFont);

 FHeaderFont.Style := FHeaderFont.Style - [fsBold];
 AddTextToRichEdit('в ', 2, FHeaderFont);

 FHeaderFont.Color := clBlue;
 AddTextToRichEdit('RichEdit', 9, FHeaderFont);

 RxRichEdit1.SetFocus;
end;

end.


azl   (2011-01-17 09:56:00) [8]


> все таки у тебя проблемы с головой...

Проблемы, видимо, у тебя, это я уже понял. Геморрой, может, мучат, покоя не дает?


> KilkennyCat ©   (17.01.11 02:16) [16]

Ну в данном случае особых трудностей нет.


> Германн ©   (17.01.11 01:23) [15]


> Leonid Troyanovsky ©   (17.01.11 03:35) [18]

Спасибо, буду разбираться.


Германн   (2011-01-17 05:22:00) [9]


> Leonid Troyanovsky ©   (17.01.11 03:35) [18]
>
>
> > Германн ©   (17.01.11 01:23) [15]
>
> > Не парься. Нет способов добавить в РичЭдит заранее отформатированную
> > строку.
>
> http://groups.google.com/group/fido7.ru.delphi.chainik/msg/c4a1742be94427c7
>

Это не ко мне, Леонид.
Это к ТС, если он поймёт.
Но всё равно спасибо за ссылку. Может когда и пригодится.


Leonid Troyanovsky   (2011-01-17 03:35:00) [10]


> Германн ©   (17.01.11 01:23) [15]

> Не парься. Нет способов добавить в РичЭдит заранее отформатированную
> строку.

http://groups.google.com/group/fido7.ru.delphi.chainik/msg/c4a1742be94427c7

See also:
http://bellsouthpwp2.net/r/e/rediv/Yacs.html

--
Regards, LVT.


Германн   (2011-01-17 02:34:00) [11]


> KilkennyCat ©   (17.01.11 02:16) [16]
>
>
> > Правда, там для Си. Но в переводе на Delphi не работает.
>

А там и для Си нет того когда, который алчет автор-троешник.


KilkennyCat   (2011-01-17 02:16:00) [12]


> Правда, там для Си. Но в переводе на Delphi не работает.

Не представляю, как может сочетаться знание двух основных языков и умение переводить с одного на другой со всем выше написанным. С одно стороны должен быть нехилый ум, а с другой получается примитивный тупой быдлохам.


Германн   (2011-01-17 01:23:00) [13]


> azl   (17.01.11 00:20) [12]
>
>
> > средства, предоставляемые объктом, не работают со строками
>
> Ага, а как же Lines.Add? Уж не добавить ли новую строку?
>
>

Не парься. Нет способов добавить в РичЭдит заранееотформатированную строку. Либо добавляй строку "кусками" (каждый кусок со своим цветом). Либо форматируй строку/строки после добавления.


> Эх, что за манера общаться? Был бы ты в техподдержке какой-
> либо, вышвырнули бы в 2 счета.

Эх, что за вопросы? Обратился бы ты ко мне в техподдержку, я бы тебе сказал...
Не надо упоминать тут про техподдержку. Тут многие её знают не понаслышке!
:)


Palladin   (2011-01-17 01:06:00) [14]


> azl   (17.01.11 00:20) [12]


> Ага, а как же Lines.Add?

все таки у тебя проблемы с головой...
найми программиста


Servy   (2011-01-17 00:50:00) [15]


> Был бы ты в техподдержке какой-либо, вышвырнули бы в 2 счета.

Был бы в техподдержке, ему б зарплату за это платили. А нахаляву правило "клиент всегда прав" не работает :).


> Он наглядно демонстрирует, что можно раскрасить текст с
> определенной позиции и указать сколько символов.
> А если до этого в RichEdit было уже много текста и добавляемый
> текст может отличаться?

Вам даны все карты в руки. Можно узнать и общее количество текста в RichEdit, и строка "Андрей"/"Александр" тоже у вас очевидно где-то хранится, а значит вы можете узнать ее длину. Решений множество, но придется что-то написать самому, скопипастить все с форумов не выйдет, такие дела.


azl   (2011-01-17 00:20:00) [16]


> средства, предоставляемые объктом, не работают со строками

Ага, а как же Lines.Add? Уж не добавить ли новую строку?


azl   (2011-01-17 00:08:00) [17]

Эх, что за манера общаться? Был бы ты в техподдержке какой-либо, вышвырнули бы в 2 счета.
Баба не дала, что ли?
Не хочешь отвечать, не отвечай. Нахрена кому нужны твои недовольные высказывания? Не зря ведь написал в соответствующем форуме.


Palladin   (2011-01-16 22:30:00) [18]

о господи... ну уж местоположение слов в тексте сам научись искать...
ппц, скоро коллапс наступит...


azl   (2011-01-16 22:24:00) [19]

Кстати, вышеуказанные пример не совсем подходит. Он наглядно демонстрирует, что можно раскрасить текст с определенной позиции и указать сколько символов.
А если до этого в RichEdit было уже много текста и добавляемый текст может отличаться? Например:

бла-бла-бла
бла-бла-бла
Андрей, Вы успешно выполнили задание.

Вместо Андрея может быть Александр и т.д.


Palladin   (2011-01-16 22:17:00) [20]

ну и уж пошла такая пляска, не рекомендую RichEdit использовать для подобных логов... лучше THtmlLite... производительность гораздо выше


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо