| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > SynUniHighlighter и SynEdit > Подсветить слово "форум" и все слова |
| Автор: PalR 5.4.2005, 19:55 |
| Мне надо подсветить например слово "форум" и все слова где оно является частью слова в тексте, например "форумчанин". Этот компонент мне поможет или нет? А то я весь вечер бьюс. Целые слова выделяет а части нет. |
| Автор: Vitalik 5.4.2005, 20:33 |
| PalR, с текущей реализацией компонента, такого эффекта можно добиться, если добавить символы 'ф', 'о', 'р', 'у', 'м' в список разделителей родительского (в Вашем случае, наверное, корневого) диапазона. Тогда парсер будет останавливаться на этих символах и найдёт лексему 'форум' в слове 'форумчанин'. Я вот думаю, может для правила "ключевое слово" сделать отдельное свойство: разделители, которое отностилось бы только к нему... А то вот в данном случае как-то нехорошо получается изменять так разделители родительского диапазона... Или может свойство сделать для правила "ключевое слово" отдельное свойство: "может быть частью слова"... |
| Автор: PalR 5.4.2005, 21:10 |
| Будь человеком примерчик накидай. ЗЫ:У меня почему то не компилится HglEditor_source. [Fatal Error] HighlightsU.pas(132): File not found: 'SynUniClasses.dcu' D7, synedit-cvs-2005-02-26, unihighlighter не помню какой, вчера качнул. Чего ещё не хватает. Инсталятор бы этим пакетам. Пока поставил .... . |
| Автор: Vitalik 6.4.2005, 15:13 | ||||||
Примерчик накидал, прикрепляю к сообщению. Правда выплыл недостаток: теперь эти символы считаются разделителями слов, то есть если с нажатой клавишей Ctrl бегать курсором влево и вправо, то в словах курсор будет останавливаться на буквах ф, о, р, у, м, а по отдельности он эти буквы за слова считать не будет и не остановится на них. Вот такие дела... В связи с этим вопрос: может тогда отдельно сделать задание символов-разделителей и отдельно символов, на которых нужно останавливаться парсеру... Правда я давно не лез в исходники компонента и уже точно не помню можно ли разделить эти понятия...
У меня тоже Delphi 7 и тоже последний cvs'ный SynEdit. А UniHighlighter ты откуда качал? Это важно, так как для компиляции этого HglEditor_source необходима именно последняя версия UniHighlighter'a (версия 1.8 от 4 ноября). Конечно, при большом желании можешь использовать и старую версию. По идее надо лишь убрать этот SynUniClasses из uses HglEditor'a. Но лучше скачай последнюю версию
Да... Инсталлятор был бы удобен. Но я не предсавляю пока, как его писать. У тебя есть инфа по этому поводу? Или может знаешь как можно написать инсталлятор для пакетов Delphi?.. |
| Автор: PalR 6.4.2005, 18:50 |
| Спасибо. Сейчас попробую. Насчет инсталятора пока помочь не могу. Если будет какая инфа о создании, то отпишусь обязательно. Я недавно ставил большой пакет JVCL. Там вот инсталер несколько своеобразный. Но отработал четко. |
| Автор: PalR 6.4.2005, 21:01 |
| Да версия была не та. Поставил стало компилиться. Только пока не разобрался как динамически загрузить слово "ф", "о", "р", "у", "м". |
| Автор: Vitalik 7.4.2005, 16:42 | ||
Что ты имеешь ввиду под "динамически загрузить слово"? |
| Автор: PalR 7.4.2005, 17:27 |
| Vitalik Ну тоесть в результате работы программы был некий текст. Теперь нужно подсветить слово("форум). Подсветили, посмотрели, оч хорошо. Поделали с прогой чего то, опять сфортировался некий текст, но уже другой. Теперь нужно подсветить слово "привет"(и естественно везде где оно встречается как часть слова "приветливый"). Опять поработали............................подсветить слово "дом" и т.д. Т.е. загружать слова из Edit, например, или ещё откуда, куда ввел пользователь. |
| Автор: PalR 8.4.2005, 11:52 |
| А как добавить свои Delimiters. В конструкторе добавляется. А при компиляции пропадают и ставятся дефолтные. А где дефолтные прописаны. Я бы туда вписал. Метод изменения ещё чего нибудь ещё для сохранения изменений в SynUniSyn не помогает. |
| Автор: Vitalik 10.4.2005, 14:27 | ||
Добавляются свои Delimiters обыкновенно:
Но, странное дело... Добавляться они добавляются, но почему-то ключевые слова подсвечиваются также... Пока что не могу понять почему так происходит... |
| Автор: PalR 15.4.2005, 22:38 |
| Вышел из положения переделав под свою задачу исходник старой версии. Работает так как мне надо. |
| Автор: Vitalik 16.4.2005, 10:17 | ||
А что ты там переделал? |
| Автор: PalR 16.4.2005, 16:58 |
| В делимитеры добавил весь алфавит. |
| Автор: Vitalik 16.4.2005, 18:12 | ||
Оригинально |
| Автор: PalR 17.4.2005, 11:07 | ||
| Главное работает. Тут правда обнаружилось следующее. Объясню на старом примере. Подсветил слово "форум". Посмотрел. Очистил SynEdit. Опять запихал в него текст. Теперь подсветил слово "дом". Всё нормально. Стал прокручивать текст (ну очень он у меня большой) и глядь, а слово "форум" тоже подсветилось. А мне оно не надо. Я так понимаю что где то ещё чего то надо очистить. Делаю как в примере.
Чем отличаются SynUniSyn.MainRules.Reset; и SynUniSyn.MainRules.Clear; С последним лучше. |
| Автор: Vitalik 17.4.2005, 15:15 | ||||||||
Это можно было сделать и без "изменения" кода компонента. Просто после изменения правил (в том числе изменения делимитеров) нужно написать:
Я предлагаю для этой задачи немного другой подход. Создать один раз правило для подсветки вводимого слова, а потом просто изменять свойство этого правила Это мне кажется более логичным, да и не надо каждый раз всё очищать/загружать/перезагружать Вот наваял небольшой примерчик работы такого приложения (файлик прикрепляю). Там кнопка "Добавить делимитеры" - добавляет маленькие русские буквы в список разделителей. Этот код можно поместить на создание твоего приложения Далее вводишь слово и нажимаешь "Подсветить" - программа подсветит слово во всём тексте. Пользуйся на здоровье Кстати, там используется последняя версия компонента (ver 1.8 от 4 ноября 2004), так что настоятельно рекомендую скачать именно её
Reset - разрушает дерево токенов, но сохраняет все правила. Эта продедура вызывается перед созданием дерева токенов при подготовке (Prepare) подсветки для подсветки (извини за тавталогию) Clear - разрушает и дерево токенов и все правила. Т.о. после вызова этой процедуры подсветка не будет содержать ни одного правила Highlight word (source).zip (3k) |
| Автор: Vitalik 17.4.2005, 15:19 |
| А вот исходники вместе с exe (на всякий случай): Highlight word (source+exe).zip (298k) |
| Автор: PalR 17.4.2005, 16:55 | ||
| Спасибо. Попробую. Пора версию 1.81 собирать. Где добавить в ключевых словах "Может быть частью слова".
К тому моменту других рабочих вариантов не было. Что пришло в голову то и реализовал. |
| Автор: Vitalik 15.5.2005, 00:02 | ||
|