Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Сокровищница
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  02:54[Войти] | [Зарегистрироваться]

Обсуждение материала
Компоненты для подсветки синтаксиса. Альтернативное развитие.
Полный текст материала


Другие публикации автора: Вадим Балашов

Цитата или краткий комментарий:

«... Cтатья является продолжением статьи Максима Парфентьева "Компоненты для подсветки синтаксиса. Новый взгляд" ...»


Важно:
  • Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
  • Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
  • При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
  • Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.



Добавить свое мнение.

Результаты голосования
Оценка содержания

  Содержит полезные и(или) интересные сведения
[1]13100%
 
  Ничего особенно нового и интересного
[2]00%
 
  Написано неверно (обязательно укажите почему)
[3]00%
 
Всего проголосовали: 13

Оценка стиля изложения

  Все понятно, материал читается легко
[1]12100%
 
  Есть неясности в изложении
[2]00%
 
  Непонятно написано, трудно читается
[3]00%
 
Всего проголосовали: 12




Смотрите также материалы по темам:
[Подсвеченный синтаксис]

Комментарии жителей
Отслеживать это обсуждение

Всего сообщений: 28

16-08-2009 09:01
Спасибо, за интересный компонент!


28-12-2007 13:33
При подключении компонента в Delphi 7 возникает ошибка "Resourse BOOKMARKS not found". Что это?


14-11-2007 14:05
ну так очень интересно - публикуй! :)


08-11-2007 10:55
Интересный компонент, недавно внедрил в свои проекты, сделал возможность подключать подсветки, пришлось переделать парсинг (был слишком ориентирован на синтаксис pascal/c), поправил несколько ошибок,  сделал DB контрол. Работал с версией без юникода. Сделал подсветки SQL, XML, Pascal. Если интересно, могу поделится своей версией. У кого будет интерес можно продолжить развитие.
atruhin1973(...)mail.ru


31-08-2007 08:43
сообщение от автора материала
Нет, к сожалению, уже не будет.
Тогда для меня это было проектом на интерес, когда было свободное время. В момент написания юникодовой версии времени не стало, поэтому она осталась незаконченной и видимо такой и останется...

Спасибо всем, кто когда-либо проявил интерес...


31-08-2007 03:40
Обновление появилось?)
 inpu


27-12-2006 23:18
Спасибо за хороший компонент.

Наблюдал следующие косячки:
1. При удалении всех строк (Lines.Clear) строчки остаются на экране. Надо вручную вызвать Repaint. Кроме того, не изменяется позиция курсора (т.е. если курсор стоял в 10:5, то эти цифры не изменятся).
2. Не знаю, глюк или нет - но в пустом memo набрать ничего не получается. Надо вставить строку программно, после этого можно что-то набирать.

Мне надо использовать компонент не для подстветки синтаксиса теста на языке программирования, а для подстветки жестко структурированного лога. Соответственно, я решил переопределить ф-цию ParseLine и  ParseLineEx класса TMPSyntaxParser (они кстати объявлены виртуальными). Но не смог подключить свой производный класс к компоненту. Пришлось добавить


TMPSyntaxParserClass = class of TMPSyntaxParser;

TMPCustomSyntaxMemo = class(TCustomControl)
    private
        fSPFactory      : TMPSyntaxParserClass;
....
    property SPFactory : TMPSyntaxParserClass read fSPFactory write fSPFactory;


constructor TMPCustomSyntaxMemo.Create(AOwner: TComponent);
var F: TFont;
begin
    inherited Create(AOwner);

    fSPFactory := TMPSyntaxParser;
....




и все обращения к конструктору делать через fSPFactory. Может конечно я не заметил уже имеющегося способа подключить свой парсер?


09-12-2006 18:54
сообщение от автора материала
Там есть некоторые недоделки, связанные с одной строкой при подобной прокрутке и при нажатии Enter если курсор располагается в последней строке текста, если она последняя на экране. Тогда курсор вообще пропадет.


З.Ы. Еще раз повторюсь, что версия сырая, но времени так и нет - раньше февраля обновление не обещаю =(


09-12-2006 14:45
Как я понимаю, это глюк:

1) Запускаем тестовую программу, разворачиваем на весь экран (Чтобы тестовый пример полностью помещался в окне).
2) Передаем фокус компоненту (например, щелкаем мышью).
3) Нажимаем Alt+Вниз - текст прокручивается вверх (только на одну строку).

Вопрос - Почему прокручивается текст, который целиком помещается в окне?
Если текст и должен прокручиватся, то почему скролбары Disabled и почему только на одну строку? (Например, редактор Delphi позволяет прокручивать текст, который и так помещается в окне)

P.S. Если я немного непонятно написал, то спрашивайте.


24-11-2006 03:50
но будет визуальная реализация для этого компонента?

так она-же имеется уже.

Выбираешь в меню Component, Install component, Into new package, выбираешь этот pas файл, указываешь имя packag'a, OK.

Сессия у меня, курсовик - нет времени дописать =)

Удачи в сессии и значит будем ждать stable version! ;-)


23-11-2006 08:13
Извениете за глупый вопрос - но будет визуальная реализация для этого компонента? (в Disign Time)
Очень бы хотелось увидеть такую реализацию - реализацию ввиде визуального самостоятельного компонента.
 MABP


23-11-2006 04:20
сообщение от автора материала
Сессия у меня, курсовик - нет времени дописать =)

Сейчас версия сырая - есть еще некторые мементы которые нужно исправить и оптимизировать.
Не хотел пока выкладывать, но все-таки сделаю это.

На данный момент компонент требует пакет TNTUnicode (ссылку на сайт "производителя" можно найти на Королевстве). В будущем все необходимые процедуры будут добавлены в сам компонент.

О нововведениях написано в отдельном файле в архиве.

Архив с примером можно найти тут: http://www.sionyx.ru/SyntaxMemoU.zip



23-11-2006 03:50
ждать или не ждать обновленную версию?! :)
Сообщение не подписано


11-11-2006 09:03
Ну когдаааа уже?


06-11-2006 05:22
Пусть "пролежала полгода тихо", но идея хороша.
И доброго здоровья автору (авторам) за то что все же возращаются к этой теме.
Три года использую в своем приложении SynEdit. И постоянно ищу ему замену.
Всем он хорош, только вяло продвигается и масса недоделок. До смешного доходит: нет, например, метода, с помощью которого можно было бы вставлять куски текста в редактируемый текст (не через clipboard - это то есть, конечно). Самому доделывать приходится.
А вот чего нет в обсуждаемом компоненте (насколько я понял, просмотрев исходники) по сравнению с SynEdit, - это возможности так называемого Completion proposal, как в Дельфи, когда при определенных условиях выскакивает окно с перечнем возможных продолжений набираемого кода.
Без этой фичи редактор много теряет, во всяком случае, в моем приложении это используется и очень даже.


02-11-2006 06:46
сообщение от автора материала
Что-то все последнее время заинтересовались компонентом - даже удивительно - полгода пролежал практически тихо =)

На самом деле есть уже обновленная версия, но не опубликованная. Я ее еще разок посмотрю, применю апдейты, которые тут были предложены и опубликую ближайшее время.

Тогда можно будет обсуждать, что еще сделать...


02-11-2006 06:37
Сам не большой спец... Но вот попробовал юзать и...
Есть такой ГЛЮК!
Ставим курсор в нижнюю видимую строку текста, жмем ENTER и ... ужас куда делся курсор???
Может кто таблетку уже написал?
Подскажите.


25-10-2006 08:10
А не могли бы вы здесь подробно описать как можно исспользовать этот компонент в другом проете. А именно:
- как подключить модуль в качестве объекта который бы отображался на тулбаре - ComponentPalete, в дельфе (просто нету ни .dpk не .bpl файлов) и возможно ли это в принципе?
- не помешало бы добавить Функцию PosEx в сам юнит (для тех у кого 6 дельфа - чтоб не мучиться и не искать\добавлять эту функцию отделно)
- и хотелось бы увидеть какой ниб простой текстовый файлик с хелпой - для начинающих программистов (типа меня), который бы прояснил пару скользких моментов - как исспользовать этот компонент в своем проекте.

Извените если написал сообщение не в то место... просто здесь его я надеюсь точно заметят :-)
 MABP


25-10-2006 03:19
Было бы неплохо:
1) иметь возможность отключать работу с брейкпойнтами
2) реализовать Redo (наверное, можно использовать уже имеющийся в компоненте механизм Undo, но заносить новый элемент в список отмен при вызове метода Undo)
3) иметь возможность сохранять данные в буфере в формате CF_RTF или CF_HTML (думаю, будет лучше, если это будет отдельный метод)
4) При увеличении размера шрифта прямоугольник, символизирующий свёрнутость секции, отрисовывается не слишком красиво


16-10-2006 03:47
Думаю, надо по аналигии с MPSyntaxMemo.Range.CanUndo добавить
MPSyntaxMemo.range.CanPaste: Boolean возвращающий true, если есть что вставить из
буфера обмена и данные в нем имеют правильный формат (CF_TEXT или CF_SYNTAX).


10-10-2006 12:31
1)
А компонент та течёт!!!
В TMPSynMemoStrings, производном от TStringList кроме строк также хранятся объекты (Objects[i]),
которые при уничтожении не удаляются.

Solution:

destructor Destroy; override;  

destructor TMPSynMemoStrings.Destroy;
var
  i: Integer;
begin
    for i := Count - 1 downto 0 do
        Objects[i].Free;
  inherited;
end;



2)
Если кто-то видел кроме меня, отзовитесь:
В Windows Vista RC1 при загрузке проекта с TMPSyntaxMemo, а также при запуске приложения
возникает "Range Check Error" - судя по Call Stack в Delphi 2006 где-то внутри системы.
При динамическом создании компонента проблем нет.
Sorry, сейчас у меня нет времени на более глубокое исследование проблемы, но у кого есть Vista проверьте.


19-08-2006 06:31
сообщение от автора материала
В компоненте используется режим, аналогичный "smart tab" в Дельфи. Обычный режим, когда делает смещение на фиксированые расстояния я пока не знаю как сделать, но посмотрю.

Спасибо всем откликнувшимся.

Вскоре постараюсь внести поправки, реализовать некоторые пожелания.

Если у кого-то есть какие-то доработки или пожелания на доработки - присылайте.

Еще вопрос - если кто-то реализовавыл работу с BreakPoints - удобно ли? Может что-то исправить/дополнить?


18-08-2006 05:07
Все понравилось, вот только не хватает "полной" поддержки символов TAB (#9). Т.е. чтобы они правильно отображались (сейчас отображаются как один пробел) и при вводе сохранялись в исходном виде а не заменялись пробелами.


01-08-2006 10:01
По поводу проблемы с отрисовкой предлагаю изменить пару методов:

// Возвращает истину, если строка показывается на экране
function TMPCustomSyntaxMemo.IsLineVisible(const Row: Integer; const PScreenRow: PInteger = nil): Boolean;
var sr: Integer;
begin
    sr := RangeRowToScreenRow(Row);
    Result := InRange(sr, 0, ClientLines - 1);
    // Возвращаем относительный номер строки, даже если она не вида !!!
    if {!!!Result and }Assigned(PScreenRow) then
        PScreenRow^ := sr;
end;



// Помечаем к перерисовки все строки, ниже и равной заданной
procedure TMPCustomSyntaxMemo.NeedReDrawLE(const Row: Integer);
var Index: Integer;
begin
    if Parent = nil then Exit;
    {} {$IFDEF SYNDEBUG}
    {} LogFmt('Memo.NeedRedrawLE %d', [Row]);
    {} {$ENDIF}
    // Только помечаем строки к перерисовке
    // Если строка видна, или она выше первой отображаемой строки,
    // то помечаем к перерисовке все строки ниже её !!!
    if IsLineVisible(Row, @Index) or (Index<0) then
    begin
        if Index<0 then Index := 0;
        while Index <= High(fScreenLines) do begin
            fScreenLines[Index] := True;
            Inc(Index);
        end;
    end;
    // Пробуем перерисовать
    ReDraw;
end;


Кто заинтересован, прошу проверить не отвалилось ли что еще.
Вообще вещь хорошая!
 Cep


27-07-2006 03:41
Как и у компонента-прародителя (см. последнее сообщение в обсуждении http://www.delphikingdom.com/asp/articles_forum.asp?ArticleID=1148)
свойство Color не сохраняет в dfm значение clWindow, из-за чего цвет компонента после запуска программы становится таким же как у его родителя.

Для лечения необходимо опубликовать свойство ParentColor:
    property ParentColor default False;
и внести в конструктор строку:
    ParentColor := False;


28-06-2006 02:02
Установка опции Ovwerwrite не изменяет режима ввода текста


22-06-2006 13:08
Очень хорошая наработка:) Думаю, проект должен и даже обязан развиваться. Можно внести еще ряд полезных нововведений. Автору респект. За переделку отдельный респект:) Подчеркивание волнистой линией - отличное нововведение;) В синэдите такого не видел.


21-06-2006 07:59
Есть еще проблемы с отрисовкой. Иногда она лажает. В чем дело - не очень понятно, глубоко не копал. Пришлось ставить вот такую некрасивую заплатку. Так текст перерисовывается весь.

procedure TMPCustomSyntaxMemo.ReDraw;
var i: Integer;
begin
    if (Parent = nil) or (Lines.UpdateCount > 0) then Exit;
    HideCaret;
    for i := Low(fScreenLines) to High(fScreenLines) do
        // вот тут закомментировать, так как не всегда видимые строки корректно считаются  
        //if fScreenLines[i] then
        begin
            PaintLineEx3(i, FindVisibleRow(OffsetY, i, False));
            fScreenLines[i] := False;
        end;
    ShowCaret;
end;



Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Какой месяц идет после марта?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.

Оценка содержания
 
Содержит полезные и(или) интересные сведения
 
Ничего особенно нового и интересного
 
Написано неверно (обязательно укажите почему)


Оценка стиля изложения
 
Все понятно, материал читается легко
 
Есть неясности в изложении
 
Непонятно написано, трудно читается

Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования