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

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

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

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

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

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

Написал прогу а теперь нужно в ней разобраться. Я в принципе понял что происходит и что я делаю, но не уверен что это есть верно.

Код делает подсветку ключевых слов для Delphi и Assemblera.

Код:
function TForm1.CheckList(InString: string): boolean;
const
  PasOp: array[1..40] of string=('procedure','function','begin','end;',
  'end','end.','if','then','else','for','to','do','while','repeat','until',
  'and','or','not','var','const','unit','interface','uses','type',
  'class','private','public','implementation','case','string','array',
  'of','in','override','inherited','xor','goto','with','as','asm'); 
 //задается массив ключевых слов Delphi

var
  X: integer;
begin
  Result:=false;
  X:= 1;
  InString:=StringReplace(InString,' ','',[rfReplaceAll]);
//Очищаем InString от пробелов
  InString:=StringReplace(InString,#$A,'',[rfReplaceAll]);
//Очищаем InString от символов перевода коретки
  InString:=StringReplace(InString,#$D,'',[rfReplaceAll]);
//Очищаем InString от символа перехода на следующую строку (Enter)
//Все очищения необходимы что бы получить в InString  чистое слово
//которое может входить в массив PasOp

  while X<High(PasOp)+1 do
    if PasOp[X]=lowercase(InString)
      then
        begin
          Result:=true;
          X:=High(PasOp)+1;
        end
      else
        inc(X);
//Проверяем каждый элемент массива PasOp на совпадение с InString
//у которой все символы переведены в нижний регистр.
//Как только находим CheckList становится true и выходим из цикла
end;

function TForm1.CheckList2(InString: string): boolean;
const
  AsmOp: array[1..175] of string=();
var
  X: integer;
begin
  Result:=false;
  X:= 1;
  InString:=StringReplace(InString,' ','',[rfReplaceAll]);
  InString:=StringReplace(InString,#$A,'',[rfReplaceAll]);
  InString:=StringReplace(InString,#$D,'',[rfReplaceAll]);
  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
  WEnd,WStart,BCount: integer;
  Mark: string;
begin
  if (Key=VK_RETURN)or(Key=VK_BACK)or(Key=VK_SPACE)
//если нажат пробел, enter или бэкспэйс то:
    then
      begin
        if RichEdit1.SelStart>1
          //если позиция курсора не нулевая то:
          then
            begin
              WStart:=0; //задали начало выделения (нулевая позиция)
              WEnd:=RichEdit1.SelStart;
//задали конец выделения(текущая позиция курсора)
              BCount:=WEnd-1;
//задаём счётчик для следующего цикла
              while BCount<>0 do
                begin
                  Mark:=copy(RichEdit1.Text,BCount,1);
                  if (Mark=' ')or(Mark=#$A)
                    then
                      begin
                        WStart := BCount;
                        BCount := 1;
                      end;
                  dec(BCount);
                end;
//данным циклом выделили позиции начала и конца того слова
//которое только что ввели  
              RichEdit1.SelStart:=WEnd-(WEnd-WStart);
              RichEdit1.SelLength:=WEnd-WStart;
//выделил слово которое только что ввели
              if CheckList(RichEdit1.SelText)
//если при выполнении функции CheckList, 
//InString которого = RichEdit1.SelText
//получаем true то:
                then
                  RichEdit1.SelAttributes.Style:=[fsBold];
              if CheckList2(RichEdit1.SelText)
                then
                  begin
                    RichEdit1.SelAttributes.Style:=[fsBold];
                    RichEdit1.SelAttributes.Color:=clBlue;
                  end;
//в общем при выполнении предыдущих If слова из delphi выделяются
//жирным, а асм жирным и синим
              RichEdit1.SelStart:=WEnd;
              RichEdit1.SelAttributes.Color:=clBlack;
              RichEdit1.SelAttributes.Style:=[];
//переместили курсор в конец введённого (проверяемого) слова и
//сделали последующий текст обычным
            end;
      end;
end;
Так же есть процедура для кнопки которая проверяет синтаксис.

Здесь уже ничего комментировать не надо, но... Можете помочь как то усовершенствовать две эти процедуры...

Плюс ко всему как видите у меня здесь не все ключевые слова для Delphi... Может кто подскажет какие ещё надо добавит или где список таких слов можно найти (так же для асм).
Ш.Р.Ю.-программист! йопта!!!
munthrekosh вне форума Ответить с цитированием
Старый 05.03.2012, 11:42   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Цитата:
Сообщение от munthrekosh Посмотреть сообщение
Плюс ко всему как видите у меня здесь не все ключевые слова для Delphi... Может кто подскажет какие ещё надо добавит или где список таких слов можно найти (так же для асм).
http://www.delphikingdom.com/asp/vie...catalogid=1172 дельфи
phomm вне форума Ответить с цитированием
Старый 05.03.2012, 12:07   #3
munthrekosh
Пользователь
 
Аватар для munthrekosh
 
Регистрация: 12.11.2011
Сообщений: 80
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Спасибо


А как на счёт комментирования?
Ш.Р.Ю.-программист! йопта!!!
munthrekosh вне форума Ответить с цитированием
Старый 05.03.2012, 15:08   #4
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Цитата:
Написал прогу а теперь нужно в ней разобраться.
Дожились, называется - сливай воду. Без комментариев.

По теме: не изобретайте велосипед одноколесный и неудобный. За вас придумали CnPack. http://cnpack.org
"ковыряю изнутри" (с)

Последний раз редактировалось 3D Hunter; 05.03.2012 в 15:12.
3D Hunter вне форума Ответить с цитированием
Старый 05.03.2012, 16:34   #5
munthrekosh
Пользователь
 
Аватар для munthrekosh
 
Регистрация: 12.11.2011
Сообщений: 80
По умолчанию

Цитата:
Сообщение от 3D Hunter Посмотреть сообщение
Дожились, называется - сливай воду. Без комментариев.

По теме: не изобретайте велосипед одноколесный и неудобный. За вас придумали CnPack. http://cnpack.org
Вы видать не поняли.... Я просто хочу понять правильно ли я размышляю на счёт работы программы. Мне не нужно её комментировать. Мне нужно понять принцип её работы...
Ш.Р.Ю.-программист! йопта!!!

Последний раз редактировалось munthrekosh; 05.03.2012 в 16:42.
munthrekosh вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
комментирование выделенного текста mosq Общие вопросы Delphi 10 13.11.2009 03:54
Корректное сохранение Ico Nester Общие вопросы Delphi 1 25.12.2008 19:50
Корректное закрытие MessageBox Tan4ik Помощь студентам 4 02.05.2008 01:21