![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Добавление разноцветной форматированной строки в RichEdit
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... производительность гораздо выше