Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2010, 12:54   #1
GRIPH
 
Регистрация: 14.05.2010
Сообщений: 3
По умолчанию RichEdit. Подсветка синтаксиса.

Пишу текстовый редактор с подсветкой синтаксиса, никак не могу правильно подсветить комментарии. Помогите пожалуйста.

Код:

unit Unit3;

interface

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

type
  TForm3 = class(TForm)
    RichEdit1: TRichEdit;
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;
  cp:integer;
implementation

{$R *.dfm}
//Выделить фрагмент текста
procedure SelIt(R:TRichEdit;start,len:integer;color:TColor);
//где R - рабочий экземпляр класса,
//start - начальная позиция для выделения
//len - длина выделяемого фрагмента
//color - цвет
begin
  R.SelStart:=start;
  R.SelLength:=len;
  R.SelAttributes.Color:=color;
end;

//Выделение однострочного комментария `//`
procedure SelComment(R:TRichEdit);
//где R - рабочий экземпляр класса
var i,j,c:integer; line:string;
//где i - счётчик линий
//j - счётчик символов внутри линии
//с - счётчик букв в формате RichEdit (нумерация с 0,
//    в конце каждой строки два нечитаемых спецсимвола)
//line - строка из RichEdit
begin
c:=0;
for i:=0 to R.Lines.Count do begin
  line:=R.Lines[i];
  for j:=1 to Length(line)-1 do begin
    if (line[j]='/') and (line[j+1]='/') then SelIt(R,c+j-1,Length(line)-j+1,clGreen);
  end;
  c:=c+Length(line)+2;
end;
end;

//Выделение многострочного комментария `{...}`
procedure SelComment2(R:TRichEdit);
//где R - рабочий экземпляр класса
var i,j,c:integer; line:string; inComment:boolean; startSel,lengthSel:integer;
//где i - счётчик линий
//j - счётчик символов внутри линии
//с - счётчик букв в формате RichEdit (нумерация с 0,
//    в конце каждой строки два нечитаемых спецсимвола)
//line - строка из RichEdit
//inComment - флаг состояния текста `в комментарии`
//startSel - позиция начала многострочного комментария
//lengthSel - длина выделяемого текста
begin
c:=0;
inComment:=false;
startSel:=0;
lengthSel:=0;
for i:=0 to R.Lines.Count do begin
  line:=R.Lines[i];
  for j:=1 to Length(line) do begin
    if inComment then begin
      lengthSel:=lengthSel+1;
    end;
    if line[j]='{' then begin inComment:=true; startSel:=c+j; end;
    if line[j]='}' then begin inComment:=false; SelIt(R,startSel,lengthSel-1,clRed); end;

  end;
  c:=c+Length(line)+2;
end;
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
SelComment(RichEdit1);
SelComment2(RichEdit1);
end;

end.
GRIPH вне форума Ответить с цитированием
Старый 15.05.2010, 13:30   #2
Alex2009
Proger Man
Форумчанин
 
Аватар для Alex2009
 
Регистрация: 07.03.2009
Сообщений: 584
По умолчанию

Вот тебе ссылка и поищи по форуму
ссылка1
ShowMessage('Добро пожаловать!');
Alex2009 вне форума Ответить с цитированием
Старый 15.05.2010, 14:07   #3
GRIPH
 
Регистрация: 14.05.2010
Сообщений: 3
По умолчанию

Спасибо, разобрался
GRIPH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсветка синтаксиса => Патрон Общие вопросы Delphi 21 03.01.2016 11:48
Подсветка синтаксиса Яр|/||< (^_^) Компоненты Delphi 5 15.02.2010 15:44
RichEdit. Подсветка синтаксиса. OPF_Nik Помощь студентам 3 08.02.2010 08:17
Подсветка синтаксиса Simply-Art Общие вопросы Delphi 2 29.05.2007 16:22