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

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

Как выделить цветом какое-либо свово в RichEdit'е?


=Sniper= ©   (2004-08-11 22:40:00) 

Не надо меня посылать изучать пример где рисуется 10 строк закрашенных!
Так как мне нужно закрасить это слово где бы оно ни находилось (в RichEdit'e)!


=Sniper=   (2004-08-16 16:31:00) [1]

Да я и не ровняю! Я просто хочу разобраться почему не работает в KOL!!!!


TRUF   (2004-08-16 16:05:00) [2]

А ты не равняй KOL с VCL.


=Sniper=   (2004-08-16 12:13:00) [3]

Не ну почему не работает в KOL, А РАБОТАЕТ В VCL!!!!!


nOvell   (2004-08-15 08:43:00) [4]

Все таки придется тебе доки по формату RTF читать :j


=Sniper=   (2004-08-15 01:40:00) [5]

Вот почему-то в KOL не правильно работает, а в VCL абсолютно правильно!!
Это уже второй способ подсветки который работает неправильно и ИМЕННО В КОЛ!


=Sniper=   (2004-08-14 15:39:00) [6]

2 Мастер: Спасибо! Попытаюсь извлеч пользу! ;-)


Мастер   (2004-08-14 13:42:00) [7]

Хоть и не в КОЛ, но может помочь:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Buttons, ToolWin, ComCtrls, StdCtrls;

type
 TDelim= Set of char;

 TForm1 = class(TForm)
   re: TRichEdit;
   od: TOpenDialog;
   ToolBar1: TToolBar;
   SpeedButton1: TSpeedButton;
   procedure SpeedButton1Click(Sender: TObject);
   procedure reChange(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 Delims: TDelim=[' ','[',']','(',')',':',';','.',#13,#10,#09,'='];
 StartPos: Integer;
implementation

{$R *.dfm}

procedure SetBold(re: TRichEdit;const aPos,aLen: Integer);
begin
 re.SelStart := aPos;
 re.SelLength := aLen;
 re.SelAttributes.Color := clNavy;
 re.SelAttributes.Style := [fsBold];
 re.SelLength := 0;
end;

function isTags(const aSrc: String;aPos,MaxLen: Integer ): Integer;
const aTagsWord: array[0..25] of String=(
    'TYPE','CONST','FUNCTION','STRING','WHILE',
    'VAR','INTEGER','PROCEDURE','BEGIN','END',
    'CLASS','INITIALIZATION','FINALIZATION','UNIT','IMPLEMENTATION',
    'STRING','TRY','FINALLY','EXCEPT','FOR',
    'IF','THEN','ELSE','PROGRAM','USES',
    'CASE'
    );
var
 i: Integer;
 s: String;
 LenTag: Integer;
 LenASrc: Integer;
begin
 Result := 0;
 LenASrc := Length(aSrc);
 for i := 0 to High(aTagsWord) do
 begin
   LenTag := Length(aTagsWord[i]);
   s :=UpperCase(Copy(aSrc,aPos,LenTag));
   if s=aTagsWord[i] then
   begin
     if LenASrc>=aPos+LenTag then
     begin
       if aSrc[aPos+LenTag] in Delims then
       begin
         if aPos>1 then
         begin
           if aSrc[aPos-1] in Delims then
           begin
             Result := LenTag;
             Exit;
           end
           else continue;
         end
         else
         begin
           Result := LenTag;
           Exit;
         end;
       end;
     end;
   end;
 end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
 i: Integer;
 Len,LenStr: Integer;
 s: String;
begin
 if od.Execute then re.Lines.LoadFromFile(od.FileName);
 i := 1;
 s := re.Lines.Text;
 LenStr := Length(s);
 while i<=LenStr do
 begin
   if (s[i] = #13) or (s[i] = #10) then
   begin
     Inc(i);
     continue;
   end;
   Len := isTags(s,i,50);
   if Len<>0 then
   begin
     SetBold(re,i-1,Len);
     Inc(i,Len);
   end
   else Inc(i);
 end;
end;

procedure TForm1.reChange(Sender: TObject);
var
 Pos1: Integer;
 re: TRichEdit;
begin
 re := (Sender as TRichEdit);

 StartPos := re.SelStart;

end;

end.


=Sniper=   (2004-08-14 00:49:00) [8]

Нет мне нужно подсветить обычный текстовый файл например исходник на СИ:
т.е подсветить слова void, int, #include которые читаются в RichEdit


z007   (2004-08-14 00:23:00) [9]

1. Все правильно.
2. Если RTF то на уровне кода.
3. Если не на уровне кода, то это уже не KOL...
4. Или не RTF...

1. Шутка.
2. Вообще, синтаксическая подсветка- это не стандарт для RTF, так что, нао обрабатывать весь текст, чтобы ее получить (на уровне компонента SintaxRTF это, правда, можно автоматизировать).
3. Другие варианты есть. Их примерно столко же, сколько способов перемещения файлов в Explorer'е. Но, боюсь, самый кодоэкономичный- все-таки на уровне кода.
4. Ну, и конечно, подсветку можно сделать по принципам sintaxEdit (см.код.)


nOvell   (2004-08-13 19:49:00) [10]

Можно плясать от этого:
Принцип, вкратце, взять текст из RichEdita в формате RTF и навставлять управляющих символов. Что то типа примера внизу - выделит все вхождения ' ' курсивом.
procedure TForm1.Button1Click(Sender: PObj);
var s: string; i : integer;
begin
s := RichEdit1.RE_Text[reRTF,false];
i := pos(' ',s);
while i <> 0 do
begin
 s := Copy(s,1,i-1)+'\i1 \i0'+CopyEnd(s,i+3);
 i := posex(' ',s,i+9);
end;
RichEdit1.Clear;
RichEdit1.RE_InsertRTF(s);
end;

P.S. Таким способом можно легко получить выдиление курсивом, bold'ом, подчеркивание, и изменить размер шрифта. Но если тебе нужно поменять цвет или шрифт - сразу удавись. У меня есть юнит Html2RTf - его пять человек c VB переписывало :) там есть такая фича.(правдо он дохрена чего не умеет, но основные тэги + цвет + шрифты, он держит) - мне этого хватило. +Я еще туда поддержку иероглифов засандалил :).

Если кто знает иной, кроме форматирования на уровне кода RTF, способ - мне тоже будет интересно узнать.


=Sniper=   (2004-08-13 14:49:00) [11]

Удалено модератором
Примечание: Создание пустых сообщений


=Sniper=   (2004-08-12 21:33:00) [12]

Удалено модератором
Примечание: Создание пустых сообщений


Наверх

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