Модераторы: Vitalik

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсветка парных скобок, Есть ли такая фича? Как в Delphi 8 
:(
    Опции темы
Kordub
  Дата 21.2.2005, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 21.2.2005

Репутация: нет
Всего: нет



В общем, поюзал Delphi 8 и обнаружил там классную новую подсветку - когда курсор расположен возле одной из парных скобок, обе скобки выделены голубым бэкграундом. Сильно упрощает чтение выражений со скобками. Реализовано ли это у вас а если нет, то можно ли сделать?
PM MAIL   Вверх
Vitalik
Дата 22.2.2005, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



Сделать можно. Вот пример кода:
Код
var
 // позиция скобок при предыдущем выделении цветом
 PrevPos1, PrevPos2: TBufferCoord;

const
 BracketSet = ['{', '[', '(', '}', ']', ')', '<', '>'];
 OpenChars: array[0..3] of Char = ('{', '[', '(', '<');
 CloseChars: array[0..3] of Char = ('}', ']', ')', '>');
 BgColorHighlight = clAqua; // фоновый цвет выделения
 FgColorHighlight = $FFFFFF - BgColorHighlight; // цвет шрифта выделения
 needHighlightBrackets = True; // Флаг - нужно ли подсвечивать скобки

function GetOppositeBracket(C: Char): Char;
// Поиск соответствующей скобки
var
 i: integer;
begin
 Result := #0;
 for i := 0 to High(OpenChars) do
   if C = OpenChars[i] then begin
     Result := CloseChars[i];
     Exit;
   end;
 for i := 0 to High(CloseChars) do
   if C = CloseChars[i] then begin
     Result := OpenChars[i];
     Exit;
   end;
end;

procedure TForm1.SynEditPaintTransient(Sender: TObject; Canvas: TCanvas;
 TransientType: TTransientType);
// Процедура для рисования на канве редактора
var
 Pos1, Pos2: TBufferCoord; // позиции парных скобок
 P1, P2: TPoint; // координаты скобок на канве Canvas
 Token: string;
 Bracket1, Bracket2: Char; // символы скобок
 Attri: TSynHighlighterAttributes; // атрибуты скобки (из подсветки)
 Rect1, Rect2: TRect; // прямоугольник скобки на канве Canvas
begin
 if (not needHighlightBrackets) or (SynEdit.Highlighter = nil) then
   Exit;
 Pos1 := SynEdit.CaretXY;
 SynEdit.GetHighlighterAttriAtRowCol(Pos1, Token, Attri);
 Pos2 := SynEdit.GetMatchingBracketEx(Pos1); // поиск парной скобки

 if (Pos1.char > 1) and (Pos2.char = 0) then begin
   // если не найдена парная скобка
   Dec(Pos1.char); // проверить для предыдущего символа
   SynEdit.GetHighlighterAttriAtRowCol(Pos1, Token, Attri);
   Pos2 := SynEdit.GetMatchingBracketEx(Pos1);
 end;

 if (PrevPos1.char <> Pos1.char) or (PrevPos1.line <> Pos1.line) or
    (PrevPos2.char <> Pos2.char) or (PrevPos2.line <> Pos2.line) then
 begin // если позиция подсвечиваемой скобки изменилась, то перерисовать
   SynEdit.InvalidateLine(PrevPos1.line);
   PrevPos1 := Pos1;
   SynEdit.InvalidateLine(PrevPos2.line);
   PrevPos2 := Pos2;
 end;
 
 if ((Pos2.char = 0) and (Pos2.line = 0)) or SynEdit.SelAvail or
   (Length(Token) <> 1) then
     Exit;

 Bracket1 := Token[1];
 if Bracket1 in BracketSet then begin
   Bracket2 := GetOppositeBracket(Bracket1); // парная скобка
   // получение для скобок экранных координат на канве
   P1 := SynEdit.RowColumnToPixels(SynEdit.BufferToDisplayPos(Pos1));
   P2 := SynEdit.RowColumnToPixels(SynEdit.BufferToDisplayPos(Pos2));
   // установка свойств шрифта для рисования скобки
   with Canvas do begin
     Font.Assign(SynEdit.Font);
     Font.Style := Attri.Style;
     Font.Color := FgColorHighlight;
     Brush.Color := BgColorHighlight;
   end;

   // рисование подсвеченной скобки
   Rect1.Top := P1.Y;
   Rect1.Left := P1.X;
   Rect1.Bottom := Rect1.Top + Canvas.TextHeight(Bracket1);
   Rect1.Right := Rect1.Left + Canvas.TextWidth(Bracket1);
   Canvas.FillRect(Rect1);
   Canvas.TextOut(P1.X, P1.Y, Bracket1); // была опечатка

   // рисование парной подсвеченной скобки
   Rect2.Top := P2.Y;
   Rect2.Left := P2.X;
   Rect2.Bottom := Rect2.Top + Canvas.TextHeight(Bracket2);
   Rect2.Right := Rect2.Left + Canvas.TextWidth(Bracket2);
   Canvas.FillRect(Rect2);
   Canvas.TextOut(P2.X, P2.Y, Bracket2); // была опечатка
 end;
end;

Если есть вопросы по коду - задавай! smile

P.S. Была небольшая опечатка в коде, только что исправил.

Это сообщение отредактировал(а) Vitalik - 23.2.2005, 00:12
PM MAIL WWW ICQ YIM   Вверх
Kordub
Дата 2.3.2005, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 21.2.2005

Репутация: нет
Всего: нет



Не работает, так как не может найти парную скобку. Не работает почему-то GetMatchingBracketEx - все время возвращает нулевую позицию. Pos2 = (0,0) и обработчик события завершается по условию
Код
 if ((Pos2.char = 0) and (Pos2.line = 0)) or SynEdit1.SelAvail or
   (Length(Token) <> 1) then
     Exit;


PM MAIL   Вверх
Vitalik
Дата 3.3.2005, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



Странно...

А у тебя какая подсветка для SynEdit'а выбрана?
PM MAIL WWW ICQ YIM   Вверх
Kordub
Дата 4.3.2005, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 21.2.2005

Репутация: нет
Всего: нет



SynUniSyn
PM MAIL   Вверх
Vitalik
Дата 4.3.2005, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



В правилах этой подсветки есть список ключевых слов, в которых присутствуют скобки? Если нет - создай такое правило --Resize_Images_Alt_Text--

PM MAIL WWW ICQ YIM   Вверх
Quadr0
Дата 10.5.2005, 21:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 14.7.2011, 20:13
  Вверх
Vitalik
Дата 11.5.2005, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



Quadr0, добро пожаловать к нам на огонёк! (я про форум)
Очень рад новому участнику! smile

Цитата(Quadr0 @ 10.5.2005, 21:27)
procedure TMainForm.FindBracketExecute(Sender: TObject);
...

Эта процедура только найдёт парную скобку, а Kordub просил сделать подсветку парной скобки при попадании на неё курсора smile
Но всё равно спасибо за попытку помочь!
PM MAIL WWW ICQ YIM   Вверх
Quadr0
Дата 11.5.2005, 20:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 14.7.2011, 20:15
  Вверх
Vitalik
Дата 12.5.2005, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



Цитата(Quadr0 @ 11.5.2005, 20:42)
Тогда ему прямая дорога в сэмплы SynEdut 2.0b. Там лежит дэмка PaintTransient которая этим как раз и занимается.

А чем не устраивает приведённый мной код? smile
А за демку - спасибо, не замечал её до селе... smile
PM MAIL WWW ICQ YIM   Вверх
Coriolis
Дата 16.9.2005, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: 1
Всего: 1



Нефигасебе здоровый код! Чтобы реализовать эту удобственность...
В смысле это вообще в синэдите не предусмотрено... А ведь такая удобная весчь!
Странно.
PM MAIL   Вверх
Coriolis
Дата 16.9.2005, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: 1
Всего: 1



Добавлю, что код Vitalik работает, а из демки - нет.
PM MAIL   Вверх
ActioN
Дата 16.9.2005, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 12.4.2005

Репутация: нет
Всего: нет



Quadr0, Vitalik, а у вас случайно нету готового рабочего кода на C++ Builder'e для реализации этой функции?
PM MAIL WWW   Вверх
miksayer
Дата 16.9.2005, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 21.11.2004

Репутация: нет
Всего: 1



угу, у меня тот же вопрос. Не могу перевести
PM MAIL   Вверх
Coriolis
Дата 28.10.2005, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: 1
Всего: 1



Вот, вернулся к проекту, возникла трябла.
В ключевых словах у меня прописаны операторы.
Существуют и переменные с именем оператора.
Поэтому возникает ситуация: переменная подсвечивается как оператор.
Чтобы избежать этого я начал извращаться: в ключевых словах к операторам добавляю символы, например
Операторы:
B
S
M
B:
M:
S:

Вот, и ещё создал набор KeyWords, с названием NOToperators, и цветом как обычные символы:
B=
B,
B)
M=
M,
M)
S=
S,
S)
т.е. операторы не могут встречаться в тексте рядом с такими символами.
Но вот проблема: код для подсветки парных скобок, который привёл Vitalic, не видет такой скобки. Не могу понять - почему.
пример:
s a=$$abc^abc(1,2,s)
Первую скобку видит, а последнюю - нет. Игнорирует.
PM MAIL   Вверх
Vitalik
Дата 29.10.2005, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



Coriolis, извини, что не ответил вчера. Сейчас немного не хватает времени... Плюс я немного приболел smile

Цитата(Coriolis @ 28.10.2005, 18:44)
Существуют и переменные с именем оператора.

А что это за язык такой, если не секрет? smile
Можешь также прислать мне свою подсветку для него? Пиши на highlighters[at]gmail.com smile

Цитата(Coriolis @ 28.10.2005, 18:44)
Поэтому возникает ситуация: переменная подсвечивается как оператор.

Гм... А по каким правилам определяется является слово переменной или оператором?..

Цитата(Coriolis @ 28.10.2005, 18:44)
Но вот проблема: код для подсветки парных скобок, который привёл Vitalik, не видет такой скобки. Не могу понять - почему.

А это всё из-за того, что в приведённом алгоритме скобки будут подсвечиваются только если они в тексте являются отдельными лексемами... (или что-то вроде того)
Цитата
var
  ...
  Token: string;
  ...
begin

  ...
  Pos1 := SynEdit.CaretXY;
  SynEdit.GetHighlighterAttriAtRowCol(Pos1, Token, Attri);
  Pos2 := SynEdit.GetMatchingBracketEx(Pos1); // поиск парной скобки
  if (Pos1.char > 1) and (Pos2.char = 0) then begin
    // если не найдена парная скобка
    Dec(Pos1.char); // проверить для предыдущего символа
    SynEdit.GetHighlighterAttriAtRowCol(Pos1, Token, Attri);
    Pos2 := SynEdit.GetMatchingBracketEx(Pos1);
  end;
  ...
 
  if ((Pos2.char = 0) and (Pos2.line = 0)) or SynEdit.SelAvail or (Length(Token) <> 1) then
      Exit;
  Bracket1 := Token[1];
  ...

В принципе можешь удалить эти строчки и проверку... Но тогда получай Bracket1 другим способом...
PM MAIL WWW ICQ YIM   Вверх
Coriolis
Дата 29.10.2005, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: 1
Всего: 1



Цитата(Vitalik @ 29.10.2005, 21:02)
Coriolis, извини, что не ответил вчера. Сейчас немного не хватает времени... Плюс я немного прибол

Да брось - не за что. Выздоравливай. smile


Цитата(Vitalik @ 29.10.2005, 21:02)
А что это за язык такой, если не секрет?

Язык - M, процедурный, идёт вместе с БД. Интерпретируется, программы хранятся на сервере.
Чё ещё сказать? О! Cashe - это потомок эМа, просто прикрутили (как кто-то сказал - за уши) объекты. А так - cashe тот же эМ.
Конкретно - для СУБД MSM (Micronetic Systems M кажется).

а чем переменные отличаются - это от контекста зависит. Для экономии памяти принято сокращать операторы до одной буквы, напр оператор SET (аналог в васике - LET) - s, GOTO - g, DO (аналог в вdвасике GOSUB) - d.
вот, напр
s s=13
переменной s присваевается значение 13, т.е.
SET s=13
Поэтому если перед и после s стоит пробел - это оператор.
Если после/перед s запятая или скобка - это переменная (например её передали как параметр)
Вот пример кода:
; функция find - чего-то там ищет в файле
find(fstr)
n str,findfl
s findfl=""
f d q:((findfl)!($zc))
.s str=$$read()
.q:str=""
.;s str=$zzup($zzdsp(str,5))
.s:str[fstr findfl=1
q:$zc ""
q str
(табуляция в начале строки, кста -обязат)

Цитата(Vitalik @ 29.10.2005, 21:02)
Можешь также прислать мне свою подсветку для него? Пиши на highlighters[at]gmail.com

Не понял - куда слать?
PM MAIL   Вверх
Vitalik
Дата 29.10.2005, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



Цитата(Coriolis @ 29.10.2005, 21:45)
Для экономии памяти принято сокращать операторы до одной буквы, напр оператор SET (аналог в васике - LET) - s, GOTO - g, DO (аналог в вdвасике GOSUB) - d.

Ничего себе smile Бывает же такое! smile
По-моему читабельность программы от этого сильно падает smile

Цитата(Coriolis @ 29.10.2005, 21:45)
(табуляция в начале строки, кста -обязат)

Это там надо считать, что вместо точек стоит табуляция? smile

Цитата(Coriolis @ 29.10.2005, 21:45)
Не понял - куда слать?

Шли на мыло: highlighters (собачка) gmail.com smile
Или можешь прикрепить здесь к своему сообщению (этот вариант более желателен) smile
PM MAIL WWW ICQ YIM   Вверх
Coriolis
Дата 30.10.2005, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: 1
Всего: 1



Цитата(Vitalik @ 29.10.2005, 21:56)
Ничего себе  Бывает же такое!

Ага, я тоже так подумал - когда знакомился с языком.
Но это позволяет уменьшить память, т.к. текст интерпретируется.

Цитата(Vitalik @ 29.10.2005, 21:56)
По-моему читабельность программы от этого сильно падает

Да не, быстро привыкаешь и без проблем читаешь исходняк, поверь мне. smile

Цитата(Vitalik @ 29.10.2005, 21:56)
Это там надо считать, что вместо точек стоит табуляция?

Нет-нет, точки - это часть синтаксиса, это аналок {} в сях или begin end в паскале - уровень обозначают. А табуляция - именно #9.

Сейчас прикреплю, но учти - сырой файл, т.к. "в процессе".
Тяяяяк. Не вижу кнопки прикрепит файл. Мож я маленький есчё?
Тада шлю на мыло.
PM MAIL   Вверх
GORI
Дата 31.10.2005, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 29.10.2005
Где: Ukraine, Kharkov

Репутация: нет
Всего: нет



Если использовать SynPHPSyn1 то все работает, а если SynUni и подгрузить лайтер для PHP то нет.

В чем причина?
PM MAIL WWW ICQ MSN   Вверх
Vitalik
Дата 31.10.2005, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



Цитата(Coriolis @ 30.10.2005, 19:43)
Тяяяяк. Не вижу кнопки прикрепит файл. Мож я маленький есчё?

Эта кнопка должна появляться после предварительного просмотра сообщения smile


Цитата(GORI @ 31.10.2005, 09:44)
Если использовать SynPHPSyn1 то все работает, а если SynUni и подгрузить лайтер для PHP то нет.
В чем причина?

Значится так...
Coriolis и GORI, можете модифицировать код следующим образом:
Цитата
  ... // всё, что выше - оставляем без изменений

  if ((Pos2.char = 0) and (Pos2.line = 0)) or SynEdit.SelAvail {or (Length(Token) <> 1)} then
    Exit;

  Bracket1 := SynEdit.Lines[Pos1.Line-1][Pos1.Char];
  if Bracket1 in BracketSet then begin
    ...

Теперь скобки будут подсвечиваться абсолютно везде, где будут найдены smile
Потому как теперь мы будет отталкиваться не от найденной лексемы (Token), а от реальных симоволов в тексте (Lines) smile
Добавлено @ 17:32
Цитата(Coriolis @ 30.10.2005, 19:43)
Тада шлю на мыло.

Да, письмо получил smile
Когда подсветка будет готова можешь выложить её на сайте www.unihighlighter.com smile
PM MAIL WWW ICQ YIM   Вверх
Coriolis
Дата 31.10.2005, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: 1
Всего: 1



Ой, не в ту тему написал! сорри.

Это сообщение отредактировал(а) Coriolis - 31.10.2005, 19:22
PM MAIL   Вверх
GORI
Дата 1.11.2005, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 29.10.2005
Где: Ukraine, Kharkov

Репутация: нет
Всего: нет



Блин smile Ну не работает оно с UniHighlighter... Можете примерчик простенький набросать? чтоб именно с загрузкой лайтера из файла...

smile Виталик самый щедрый на примеры smile smile
PM MAIL WWW ICQ MSN   Вверх
Vitalik
Дата 1.11.2005, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



Заказывали примерчик? smile


Присоединённый файл ( Кол-во скачиваний: 38 )
Присоединённый файл  HighlightBrackets.zip 2,89 Kb
PM MAIL WWW ICQ YIM   Вверх
Vitalik
Дата 1.11.2005, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



А вот вместе с EXE smile
(жаль нельзя к одному сообщению несколько файлов прикрепить)

Присоединённый файл ( Кол-во скачиваний: 57 )
Присоединённый файл  HighlightBrackets_exe.zip 370,59 Kb
PM MAIL WWW ICQ YIM   Вверх
Coriolis
Дата 1.11.2005, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: 1
Всего: 1



Ок, спасибо за пример. Я его только поправил - чтобы не светилась скобка, которая находится за перед курсором.

Тут мне Snowy указал на глюк: алгоритм подсветки НЕ игнорирует скобки внутри кавычек.
Чего-то не пойму, как это профиксить...
PM MAIL   Вверх
Vitalik
Дата 2.11.2005, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



Цитата(Coriolis @ 1.11.2005, 12:43)
Тут мне Snowy указал на глюк: алгоритм подсветки НЕ игнорирует скобки внутри кавычек.
Чего-то не пойму, как это профиксить...

Гм... Так сходу ничего и получается... smile

Есть как минимум два пути:

1. Переписать метод SynEdit.GetMatchingBracketEx под свои нужды. Например, вставить нужные фильтры. Как то, игнорирование скобок во всех диапазонах или в диапазонах с определёнными именнами или еще что-нить smile

2. Сделать возможность в компоненте задавать свойство StringAttribute (которое объявлено только для чтения у потомка всех подсветок TCustomHighlighter). Просто в реализации метода SynEdit.GetMatchingBracketEx уже есть фильтрация диапазонов строки и комментария. Нужно лишь реализовать возможность в нашем компоненте задавать какие именно диапазоны (а точнее их атрибуты) являются диапазонами "строки" и "комментария" smile
PM MAIL WWW ICQ YIM   Вверх
zvyagaaa
Дата 1.6.2009, 05:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.1.2008

Репутация: нет
Всего: нет



а можно ли как-то сделать, чтобы парные скобки выделялись бы еще и разными цветами.? Как в экселе в строке формул?
поясню, к примеру (((1/2)*2)-2)

Это сообщение отредактировал(а) zvyagaaa - 1.6.2009, 05:18
PM MAIL   Вверх
Coriolis
Дата 2.6.2012, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 22.8.2005

Репутация: 1
Всего: 1



Кстати да, крутая штука. 
zvyagaaa, ты если реализовал - поделись пожалуйста)
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | SynUniHighlighter и SynEdit | Следующая тема »


 




[ Время генерации скрипта: 0.1943 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.