Форум: "Начинающим";
Текущий архив: 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