Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.04.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
azl   (2011-01-16 15:12) [0]

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

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

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

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

Работаю в Delphi XE.

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


 
Palladin ©   (2011-01-16 15:44) [1]

http://tinyurl.com/46j5hjq

интересно, каким образом целые строки отличаются от части текста


 
azl   (2011-01-16 21:25) [2]

А то я бы сам не догадался ввести в гугл? Искал, долго искал. Ничего толкового там нет.
Было бы, я бы не стал здесь писать.
Есть ссылка на конкретный пример, покажите, а ссылки на гугл и я могу давать.


 
Palladin ©   (2011-01-16 21:30) [3]

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

и все же... как же ты так хитро строчки то добавляешь с разным форматированием? средства, предоставляемые объктом, не работают со строками, они работают с частью текста... примеры есть как раз в первой десятке...


 
azl   (2011-01-16 21:50) [4]

Не надо умничать, пожалуйста. Вот возьми хоть один и попробуй. Я перепробовал все. Как ты определил, что работает, если не захотел в дерьме рыться и алмазики выискивать?

Единственный толковый ответ здесь, на похожий вопрос:
http://forum.sources.ru/index.php?s=9b03753932c9b6d580ef12b3d4ed1c43&showtopic=280274

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

RichEdit1.Clear;
     
RichEdit1.SelAttributes.Color := clBlue;
RichEdit1.SelText := "Главный Герой:) ";
RichEdit1.SelAttributes.Color := clBlack;
RichEdit1.SelText := "стрельнул вправо в ";
RichEdit1.SelAttributes.Color := clRed;
RichEdit1.SelText := "Монстр1";
RichEdit1.SelAttributes.Color := clBlack;
RichEdit1.SelText := ", который отошел влево, и промахнулся";
//и т.д.


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


 
Leonid Troyanovsky ©   (2011-01-16 21:50) [5]


> azl   (16.01.11 21:25) [2]

> Было бы, я бы не стал здесь писать.

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

--
Regards, LVT.


 
Palladin ©   (2011-01-16 21:59) [6]


> azl   (16.01.11 21:50) [4]

Если у тебя не проблемы с головой, то с мышлением проблемы точно. Этож надо... присваивать SelText значение и думать что все эти значения в тексте будут в Selection... читаем до просветления

Read SelText to determine the value of the selected text. Set SelText to replace the selected text with a new string. If there is no selection, but the edit control has focus, set SelText to insert a new string into the text at the cursor.

а вот пример на основе ПЕРВОЙ ДЕСЯТКИ РЕЗУЛЬТАТОВ ПОИСКА В ГУГЛЕ !!!111 адин адин адин

procedure RESetTextColor(p_theRE: TRichEdit; p_nColor: TColor;
 p_nFrom, p_nTo: Integer);
var
 n: Integer;
begin
 n := p_theRE.SelStart;
 p_theRE.SelStart := p_nFrom;
 p_theRE.SelLength := abs(p_nFrom - p_nTo) + 1;
 p_theRE.SelAttributes.Color := p_nColor;
 p_theRE.SelStart := n;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 RichEdit1.Text := "Мама мыла раму"#13#10"в раму мама чегото";
 RESetTextColor(RichEdit1, clBlue, 1, 4);
end;


 
azl   (2011-01-16 22:04) [7]

У меня с головой проблем нет, я привел пример, который был выложен на одном из форумов.

За пример, спасибо.


 
Palladin ©   (2011-01-16 22:17) [8]

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


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

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

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

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


 
Palladin ©   (2011-01-16 22:30) [10]

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


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

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


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


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

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


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


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

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


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

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


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


> azl   (17.01.11 00:20) [12]


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

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


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


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

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


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

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


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


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

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


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


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

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


 
Leonid Troyanovsky ©   (2011-01-17 03:35) [18]


> Германн ©   (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 05:22) [19]


> 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
>

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


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


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

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


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

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


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


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

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


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

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

Взял за основу пример из 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.


 
KilkennyCat ©   (2011-01-18 23:37) [22]


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

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


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

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

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


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

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


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


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


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


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

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


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

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


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

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


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


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

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


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

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


 
Palladin ©   (2011-01-20 17:48) [27]


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

))))))))))



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.04.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.004 c
15-1294522195
Юрий
2011-01-09 00:29
2011.04.24
С днем рождения ! 9 января 2011 воскресенье


2-1295504959
Novi4ok1992
2011-01-20 09:29
2011.04.24
Выбор языка интерфейса в программе


15-1294596688
@!!ex
2011-01-09 21:11
2011.04.24
PropSheet не работает под Win 7 x64


2-1295535215
volkafff
2011-01-20 17:53
2011.04.24
Курсор над компонентом и форма компонента Image.


3-1257170221
mom
2009-11-02 16:57
2011.04.24
Ehlib 4.0 порядок следования столбцов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский