подсветка текста определенным образом в Richedit'e

Тема в разделе "Delphi - Система", создана пользователем vital, 16 июл 2006.

  1. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    вобсчем нуна разукрасить текст примерно в таком формате
    текст [цвет$ текст] текст (почти как в форуме :) )

    причем сообщение идет с сокета, но это уже мелочи..

    Я пробовал делать примерно так
    Код (Text):
    var
    j:integer;
    msg:string;
    clr:tcolor;
    ...
    msg:=socket.receivetext;
    clr:=richedit.font.color;

    for j:=0 to length(msg) -1 do
    begin
    if msg[j]='[' then
    begin
    richedit.selstart;
    if copy(msg,j,pos('$',msg)='clred' then
    begin
    richedit.selattributes.color:=clred;
    end;
    end
    else if msg[j]=']' then
    begin
    richedit.selattributes.color:=clr;
    end;
    end;
    richedit.text:=richedit.text+msg[j];
    писал сейчас руками поэтому возможны опечатки и небольшие несоответствия тому как делал в коде.
    ЗЫ.
    что-то мне подсказывает что запостил тему я не там..
     
  2. Barmutik

    Barmutik Гость

    Я подсвечивал вот так:

    Код (Text):
    RichEdit.Range(DocumentWords.higlight_absolute_positions[i] and $00FFFFFF,
    DocumentWords.higlight_absolute_positions[i] and $00FFFFFF +
    DocumentWords.higlight_absolute_positions[i] shr 24).Font.BackColor :=
    HighlightBackgroundColor;
    Указвается в рэйндже с какого по какой символ и потом меняется цвет фона...
     
  3. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    хм..ложу на форму TRichEdit. Ставлю кнопку. В онклике кнопки вставляю из буфера вышенаписанный код.
    И..
    Такое ощущение, что мы о разных richedit'ах говорим..
     
  4. Barmutik

    Barmutik Гость

    Ой .. извините у меня свой ричэдит в котором имплеменчены дополнительно интферфейсы.. IRichEditOLECallback, ITextLinks... они позволяют осуществлять доп операции с ричэдитом .. как то рэйнджи .. перехват линков и т.д...
     
  5. Zakus

    Zakus Гость

    для стандартного РичЭдита, из 7ой дельфи...

    RichEdit1: TRichEdit;

    //выделяете текст который нужно "подсветить"
    RichEdit1.SelStart := 2; //начало выделения
    RichEdit1.SelLength := 3; //длинна выдиления

    RichEdit1.SelAttributes.Color := clRed; //устанавливаете для выделенного текста цвет


    всё...

    можете покопаться в RichEdit1.SelAttributes, может кроме цвета что интересное для себя найдёте...

    Для: vital
    стоп, сейчас прочитал... и увидел что вы юзаете всё что я описал, так в чём вопрос??? ваш код не работает? или что?
     
  6. Zakus

    Zakus Гость

    Для: vital
    о как всё запущено...

    ща код ваш розгребу... сделаю рабочим

    но, вы вкурсе что у stringa первая буква не тут msg[0] а тут msg[1] =)))
     
  7. Zakus

    Zakus Гость

    Код (Text):
    var
    j:integer;
    msg:string;
    clr:tcolor;
    begin

    msg:= '[clBlue$ Test]';
    clr:= clRed;

    for j:=1 to length(msg) do
    begin
    if msg[j]='[' then
    begin
    if copy(msg,j+1,pos('$',msg)-2) ='clBlue' then
    begin
    clr := clBlue;
    end;
    end
    else if msg[j]=']' then
    begin


    richedit1.text:=richedit1.text + copy(msg,pos('$',msg)+1, j- pos('$',msg) -1);


    richedit1.SelStart := length(richedit1.text) -  length(copy(msg,pos('$',msg)+1, j- pos('$',msg) -1));
    richedit1.SelLength := length(copy(msg,pos('$',msg)+1, j- pos('$',msg) -1));

    richedit1.SelAttributes.Color := clr




    end;
    end;
    что то такое) но правда всё равное не совсем хорошо работает
     
  8. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    2zakus

    строки бывают разные B)


    2Barmutik

    ну-ка поподробнее..

    ==================
    недавно родилось вот это..

    Код (Text):
    var
    msg,txt:string;
    j,q:integer;
    memo1:trichedit; //это у меня глюки такие..

    msg:=socket.ReceiveText;
    form5.memo1.Text:=form5.memo1.Text+#13#10;

    for j:=1 to pos('[',msg)-1 do   //тут все понятно
    begin
    form5.memo1.Text:=form5.memo1.Text+msg[j];
    end;

    if copy(msg,pos('[',msg)+1,pos('$',msg)-pos('[',msg))='clred$' then {если текст скопированный начиная с символо после '[' до символа $ равен ='clred$'(ну почти так)}
    begin
    txt:=copy(msg,pos('$',msg)+1,pos(']',msg)-(pos('$',msg)+1)); //присваиваем переменной текст от $ до ]
    form5.memo1.SelStart:=length(form5.memo1.text); // выделяем с последнего символа
    form5.memo1.SelAttributes.Color:=clred; //делаем красный цвет
    form5.memo1.SelText:=txt; //вставляем текст
    end;

    for q:=pos(']',msg)+1 to length(msg) do //тут тоже все понятно..
    begin
    form5.memo1.Text:=form5.memo1.Text+msg[q];
    end;
     
  9. Barmutik

    Barmutik Гость

    Для: vital

    ЧТо конкретно поподробнее .. в Дельфийском РичЭдите не реализована половина возможностей микрософтовского РичЭдита...
     
  10. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    2all

    А как вставить RTF текст({rtf\ansi..) в RichEdit?
    если
    Код (Text):
    msg:='ртф взятый из другого ричэдита';

    richedit1.plaintext:=false;
    richedit1.text:=msg;
    то вставляется всё..

    2Barmutik
    подробнее про имплементацию IRichEditOLECallback в RichEdit. Понятия про этот интерфейс не имею..Так как его добавить?
     
Загрузка...

Поделиться этой страницей