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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2012, 16:58   #1
munthrekosh
Пользователь
 
Аватар для munthrekosh
 
Регистрация: 12.11.2011
Сообщений: 80
Радость Как можно улучшить код для синтаксической подсветки? (Delphi 7))

Есть следующий код предназначенный для синтаксической подсветки зарезервированных слов ассемблера и паскаля:
Код:
function TForm1.CheckList(InString: string): boolean;
var
  X: integer;
begin
  Result:=false;
  InString:=StringReplace(InString,' ','',[rfReplaceAll]);
  InString:=StringReplace(InString,#$A,'',[rfReplaceAll]);
  InString:=StringReplace(InString,#$D,'',[rfReplaceAll]);
  X:= 0;
  while X<High(PasOp)+1 do
    if PasOp[X]=lowercase(InString)
      then
        begin
          Result:=true;
          X:=High(PasOp)+1;
        end
      else
        inc(X);
end;
 
function TForm1.CheckList2(InString: string): boolean;
var
  X: integer;
begin
  Result:=false;
  InString:=StringReplace(InString,' ','',[rfReplaceAll]);
  InString:=StringReplace(InString,#$A,'',[rfReplaceAll]);
  InString:=StringReplace(InString,#$D,'',[rfReplaceAll]);
  X:= 0;
  while X<High(AsmOp)+1 do
    if AsmOp[X]=lowercase(InString)
      then
        begin
          Result:=true;
          X:=High(AsmOp)+1;
        end
      else
        inc(X);
end;
 
 
procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  NPos,WEnd,WStart,BCount,LText: integer;
  Mark: char;
begin
  NPos:=RichEdit1.SelStart;
  LText:=Length(RichEdit1.Text);
  if (RichEdit1.SelStart>1)and(not((n=0)or(Key=VK_LEFT)or
  (Key=VK_UP)or(Key=VK_RIGHT)or(Key=VK_DOWN)or(Key=VK_F1)or
  (Key=VK_F2)or(Key=VK_F3)or(Key=VK_F4)or(Key=VK_F5)or
  (Key=VK_F6)or(Key=VK_F7)or(Key=VK_F8)or(Key=VK_F9)or
  (Key=VK_F10)or(Key=VK_F11)or(Key=VK_F12)or
  (Key=VK_SHIFT)or(Key=VK_CONTROL)or(Key=VK_MENU)or
  (Key=VK_CAPITAL)or(Key=VK_ESCAPE)or(Key=VK_INSERT)or
  (Key=VK_PRIOR)or(Key=VK_NEXT)or(Key=VK_END)or
  (Key=VK_HOME)or(Key=VK_SNAPSHOT)or(Key=VK_SCROLL)or
  (Key=VK_PAUSE)or(Key=VK_NUMLOCK)))
    then
      begin
        WStart:=0;
        WEnd:=RichEdit1.SelStart;
        BCount:=WEnd-1;
        while BCount<>0 do
          begin
            Mark:=RichEdit1.Text[BCount];
            if (Mark=' ')or(Mark=#$A)
              then
                begin
                  WStart:=BCount;
                  break;
                end;
            dec(BCount);
          end;
        BCount:=RichEdit1.SelStart;
          while BCount<LText do
            begin
              Mark:=RichEdit1.Text[BCount];
              if (Mark=' ')or(Mark=#$A)
                then
                  begin
                    WEnd:=BCount;
                    break;
                  end;
              INC(BCount);
              WEnd:=BCount;
            end;
        RichEdit1.SelStart:=WStart;
        RichEdit1.SelLength:=WEnd-WStart;
        if (CheckList(RichEdit1.SelText))
          then
            begin
              RichEdit1.SelAttributes.Style:=[fsBold];
              RichEdit1.SelAttributes.Color:=clGreen;
            end
          else
            if (CheckList2(RichEdit1.SelText))and(n=2)
              then
                begin
                  RichEdit1.SelAttributes.Style:=[fsBold];
                  RichEdit1.SelAttributes.Color:=clBlue;
                end
              else
                begin
                  RichEdit1.SelAttributes.Style:=[];
                  RichEdit1.SelAttributes.Color:=clBlack;
                end;
        RichEdit1.SelStart:=WEnd;
        RichEdit1.SelAttributes.Color:=clBlack;
        RichEdit1.SelAttributes.Style:=[];
        RichEdit1.SelStart:=NPos;
      end;
 
end;
Код работает... Вроде даже очень хорошо. Но все же хочется услышать мысли умных и хороших форумчан о том, как это чудо можно улучшить?

В данном коде:
  1. PasOp и AsmOp - список зарезервированных слов паскаля и ассемблера соответственно. Заполняются динамически при создании формы путём построчного считывания из текстовых файлов в массив строк.
  2. n - переменная которая принимает значения:
    • 0 - не выбран не один из предложенных типов зарезервированных слов (PasOp и AsmOp)
    • 1 - выбрано PasOp
    • 2 - выбрано AsmOp
Ш.Р.Ю.-программист! йопта!!!
munthrekosh вне форума Ответить с цитированием
Старый 24.03.2012, 05:37   #2
munthrekosh
Пользователь
 
Аватар для munthrekosh
 
Регистрация: 12.11.2011
Сообщений: 80
По умолчанию

Что, прям вообще не каких предложений?
Ш.Р.Ю.-программист! йопта!!!
munthrekosh вне форума Ответить с цитированием
Старый 24.03.2012, 05:56   #3
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

почему же, на сайте delphiexpert.ru есть подствека синтаксиса briliantcode
Кольша вне форума Ответить с цитированием
Старый 24.03.2012, 06:32   #4
munthrekosh
Пользователь
 
Аватар для munthrekosh
 
Регистрация: 12.11.2011
Сообщений: 80
По умолчанию

Цитата:
Сообщение от Кольша Посмотреть сообщение
почему же, на сайте delphiexpert.ru есть подствека синтаксиса briliantcode
А прямую ссыль можно? А то что-то ни как не найду
Ш.Р.Ю.-программист! йопта!!!
munthrekosh вне форума Ответить с цитированием
Старый 24.03.2012, 06:58   #5
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

No problem
Кольша вне форума Ответить с цитированием
Старый 24.03.2012, 08:29   #6
munthrekosh
Пользователь
 
Аватар для munthrekosh
 
Регистрация: 12.11.2011
Сообщений: 80
По умолчанию

Нет, спасибо) Мне такого не надо. Мне нужно улучшить код который я привожу. Я и так исходник подправил, но всё же считаю что можно лучше... Так вот и вопрос. Как можно этот код сделать лучше? Допустим если мне попадётся структура
array[1..67]
array не выделится... Вот как подобное исправить?

Ещё бы хотелось подсветку комментариев, в том числе многострочных. А так же, если возможно, подсветка кавычек... Т.е. если видим что то типо этого 'Всем привет' то подсвечиваем. Подсвечиваем сами кавычки и текст между ними
Ш.Р.Ю.-программист! йопта!!!
munthrekosh вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно вставить код C++ в Delphi 7 Владислав Общие вопросы Delphi 7 20.03.2012 20:05
Как можно улучшить код @ndreiKO Помощь студентам 5 23.08.2011 04:21
Как улучшить код kirza Общие вопросы Delphi 10 19.01.2011 18:14
Вопрос по символьным массивам. Как улучшить код. Aerial Общие вопросы C/C++ 4 13.04.2010 10:54
Как можно улучшить эффективность и качество ПП? Evgenii Помощь студентам 5 29.01.2009 16:22