Маркеры изменений SynEdit (желтая или зеленая линия на желобе)

Кто-нибудь знает, как добавить в SynEdit функцию «метки изменения»? Я имею в виду эти строки, зеленые для измененных и сохраненных, желтые для измененных и несохраненных частей документа... вот пример из другого редактора: http://img222.imageshack.us/img222/6474/editori.jpg


person migajek    schedule 12.08.2009    source источник
comment
Вы имеете в виду добавление кода в элемент управления SynEdit для этого или добавление функциональности в ваше приложение с помощью событий SynEdit?   -  person mghie    schedule 12.08.2009
comment
Я предполагаю, что для того, чтобы нарисовать его между желобом и контентом, требуется модифицировать SynEdit. Но если есть возможность, лучше сделать это самостоятельно, используя события synedit. Мне не нравится модифицировать сторонние компоненты, так как это требует дополнительной работы при обновлении разработчиками.   -  person migajek    schedule 13.08.2009


Ответы (1)


Да, я добавил его в свою копию SynEdit. Изначально я взял код из другого проекта.

Он разбит на (как минимум) два разных блока IIRC.

Вам необходимо изменить SynEditTextBuffer.pas, а также SynEdit.pas.

Код довольно сложен, потому что вам нужно изменить несколько мест в SynEditTextBuffer.pas, а также 1 или 2 места в SynEdit.pas.

Первоначальный проект, из которого я взял код, был очень амбициозным, поскольку они также пытались разработать свертывание кода и блокировку строк (как показано на вашем изображении).

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

Название этого проекта — SynEditSudio, оно взято с китайского веб-сайта, но я считаю, что плагины-переводчики для Firefox отлично справляются с его преобразованием.

РЕДАКТИРОВАТЬ: свяжитесь со мной напрямую, если вы хотите получить копию моих изменений.

ХТХ Райан.

person Vivian Mills    schedule 12.08.2009
comment
Правильно ли этот код справляется с отменой/повтором? т.е. он удаляет строки, когда изменения отменяются? - person mghie; 12.08.2009
comment
У меня был очень плохой опыт с модификацией synedit для свертывания кода, однако я использовал версию Mystix (см. SourceForge) ... к сожалению, обе версии, похоже, уже мертвы. Думаю, я свяжусь с вами, если мне не удастся изменить SynEditStudio самостоятельно... Однако мне бы хотелось увидеть какой-нибудь плагин, который не требует глубокого изменения исходного кода SynEdit это :/ - person migajek; 12.08.2009
comment
@mghie - Да, отмена/повтор работает. В настоящее время я использую его в небольшом коммерческом продукте. Моя версия SynEdit сильно изменена, но все еще соответствует последнему официальному выпуску проекта SynEdit. У меня есть такие вещи, как перенос по правому полю, выделение всех текущих экземпляров токенов, индикаторы измененных строк, сопоставление токенов, последовательные номера строк (а-ля Delphi IDE), выделение текущей строки, а также настраиваемый диалог параметров. - person Vivian Mills; 12.08.2009
comment
@michal - SynEdit на sourceforge все еще находится в разработке. Он (ведущий разработчик) работает над веткой, которая называется крайне нестабильной, и он все еще довольно активен в ней. По большей части SynEdit довольно стабилен и не требует особого обслуживания. Для улучшения функций вам нужно сделать что-то вроде добавления их самостоятельно или позаимствовать их из других проектов, таких как SynEditStudio. Взгляните на мой предыдущий комментарий, чтобы увидеть, что моя версия содержит/может сделать. - person Vivian Mills; 12.08.2009
comment
@mghie & michal - Как бы я ни любил SynEdit, моя коммерческая разработка почти подошла к концу. Есть такие вещи, как свертывание кода, которые я хочу поддерживать, и не существует текущего решения (работающего). Я пытался иногда реализовать это сам, и я думаю, что это должно быть возможно, это нетривиальная модификация. Другой мод — это поддержка пропорциональных шрифтов, и я не могу обеспечить это с помощью SynEdit в его нынешнем виде. Я не согласен с этим, но это то, что хотят клиенты. К вашему сведению: я использовал E-Controls Syntax Editor SDK, вы можете взглянуть на него. - person Vivian Mills; 12.08.2009
comment
@Ryan: Спасибо за комментарии, они очень интересны для меня, так как я когда-то поддерживал SynEdit, но полностью потерял с ним связь. Я все еще использую 1.03 FWIW. Недавно я обдумывал идею проверить UniSynEdit для Delphi 2009, но то, что вы пишете, наводит меня на мысль, что многие фундаментальные проблемы с SynEdit не решены. Я, вероятно, сначала исследую использование элемента управления Scintilla. У вас случайно нет опыта работы с ним в Delphi? - person mghie; 13.08.2009
comment
@ Райан, к сожалению, я понятия не имею, как с тобой связаться. Форма электронной почты на вашем сайте говорит, что она не может отправить мое письмо прямо сейчас. Я хотел бы как-нибудь связаться с вами, пожалуйста, попробуйте написать мне на gmail.com. Имя моей учетной записи - migajek (я не публикую весь адрес электронной почты по понятным причинам ;)) - person migajek; 13.08.2009
comment
@mghie У меня был некоторый опыт работы с Scintilla в Delphi. Я считаю, что в настоящее время это лучший выбор, если вы ищете бесплатное решение, в нем есть все, что вам нужно — Unicode, Code Folding и так далее. Однако, что касается моего случая, в нем отсутствует расширенный маркер для веб-языков, поэтому я все еще использую SynEdit. Если вы хотите что-нибудь, свяжитесь со мной по моей электронной почте (см. комментарий выше) - person migajek; 13.08.2009
comment
@mghie - я посмотрел на Scintilla, но у меня недостаточно опыта работы с C, чтобы попытаться скомпилировать его в объектные файлы для включения в мое приложение Delphi без внешней ссылки на DLL. Думаю, я немного забавен в этом смысле, я бы предпочел, чтобы внешние требования к файлам (DLL) были небольшими или вообще отсутствовали. У меня не так уж много проблем с SynEdit, не поймите меня неправильно, он мне очень нравится. Но есть определенные вещи, такие как свертывание кода, которые он просто не поддерживает, и мне бы очень хотелось их иметь. Из того, что я нашел в своем исследовании, я думаю, что scintilla требует некоторого изменения мышления для разработчиков Delphi. - person Vivian Mills; 13.08.2009
comment
@michal - я отправил вам электронное письмо. - person Vivian Mills; 13.08.2009
comment
@Ryan, как вы знаете, для Scintilla есть оболочка, которая реализует вполне стандартный компонент и делает все, что связано с общением с DLL, самостоятельно. Я также не люблю отправлять какие-либо dll, но иногда это неизбежно;) - person migajek; 13.08.2009
comment
@ Райан, я написал тебе ответ ... ты понял? - person migajek; 13.08.2009
comment
@michal - я знаю об обертке Scintilla. Но я решил использовать компонент EControl. Похоже, он лучше подходит для моих существующих проектов. - person Vivian Mills; 13.08.2009