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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсветить слово "форум" и все слова, где оно является частою слова 
:(
    Опции темы
PalR
Дата 5.4.2005, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мне надо подсветить например слово "форум" и все слова где оно является частью слова в тексте, например "форумчанин".
Этот компонент мне поможет или нет? А то я весь вечер бьюс. Целые слова выделяет а части нет.
PM MAIL   Вверх
Vitalik
Дата 5.4.2005, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



PalR, с текущей реализацией компонента, такого эффекта можно добиться, если добавить символы 'ф', 'о', 'р', 'у', 'м' в список разделителей родительского (в Вашем случае, наверное, корневого) диапазона.
Тогда парсер будет останавливаться на этих символах и найдёт лексему 'форум' в слове 'форумчанин'. smile

Я вот думаю, может для правила "ключевое слово" сделать отдельное свойство: разделители, которое отностилось бы только к нему... А то вот в данном случае как-то нехорошо получается изменять так разделители родительского диапазона... Или может свойство сделать для правила "ключевое слово" отдельное свойство: "может быть частью слова"...

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


Новичок



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

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



Будь человеком примерчик накидай.
ЗЫ:У меня почему то не компилится HglEditor_source.
[Fatal Error] HighlightsU.pas(132): File not found: 'SynUniClasses.dcu'
D7, synedit-cvs-2005-02-26, unihighlighter не помню какой, вчера качнул.
Чего ещё не хватает. Инсталятор бы этим пакетам. Пока поставил .... .

Это сообщение отредактировал(а) PalR - 5.4.2005, 21:18
PM MAIL   Вверх
Vitalik
Дата 6.4.2005, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(PalR @ 5.4.2005, 21:10)
Будь человеком примерчик накидай.

Примерчик накидал, прикрепляю к сообщению.
Правда выплыл недостаток: теперь эти символы считаются разделителями слов, то есть если с нажатой клавишей Ctrl бегать курсором влево и вправо, то в словах курсор будет останавливаться на буквах ф, о, р, у, м, а по отдельности он эти буквы за слова считать не будет и не остановится на них.
Вот такие дела...
В связи с этим вопрос: может тогда отдельно сделать задание символов-разделителей и отдельно символов, на которых нужно останавливаться парсеру... Правда я давно не лез в исходники компонента и уже точно не помню можно ли разделить эти понятия... smile

Цитата(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 не помню какой, вчера качнул.

У меня тоже Delphi 7 и тоже последний cvs'ный SynEdit. А UniHighlighter ты откуда качал? Это важно, так как для компиляции этого HglEditor_source необходима именно последняя версия UniHighlighter'a (версия 1.8 от 4 ноября).
Конечно, при большом желании можешь использовать и старую версию. По идее надо лишь убрать этот SynUniClasses из uses HglEditor'a.
Но лучше скачай последнюю версию smile

Цитата(PalR @ 5.4.2005, 21:10)
Чего ещё не хватает. Инсталятор бы этим пакетам. Пока поставил .... .

Да... Инсталлятор был бы удобен. Но я не предсавляю пока, как его писать. У тебя есть инфа по этому поводу? Или может знаешь как можно написать инсталлятор для пакетов Delphi?..

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  Sample.hgl
PM MAIL WWW ICQ YIM   Вверх
PalR
Дата 6.4.2005, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо. Сейчас попробую.
Насчет инсталятора пока помочь не могу. Если будет какая инфа о создании, то отпишусь обязательно.
Я недавно ставил большой пакет JVCL. Там вот инсталер несколько своеобразный. Но отработал четко.

Это сообщение отредактировал(а) PalR - 6.4.2005, 21:31
PM MAIL   Вверх
PalR
Дата 6.4.2005, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да версия была не та. Поставил стало компилиться. Только пока не разобрался как динамически загрузить слово "ф", "о", "р", "у", "м".
PM MAIL   Вверх
Vitalik
Дата 7.4.2005, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(PalR @ 6.4.2005, 21:01)
Только пока не разобрался как динамически загрузить слово "ф", "о", "р", "у", "м".

Что ты имеешь ввиду под "динамически загрузить слово"? smile
PM MAIL WWW ICQ YIM   Вверх
PalR
Дата 7.4.2005, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Vitalik
Ну тоесть в результате работы программы был некий текст. Теперь нужно подсветить слово("форум). Подсветили, посмотрели, оч хорошо. Поделали с прогой чего то, опять сфортировался некий текст, но уже другой. Теперь нужно подсветить слово "привет"(и естественно везде где оно встречается как часть слова "приветливый"). Опять поработали............................подсветить слово "дом" и т.д.
Т.е. загружать слова из Edit, например, или ещё откуда, куда ввел пользователь.
PM MAIL   Вверх
PalR
Дата 8.4.2005, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А как добавить свои Delimiters. В конструкторе добавляется. А при компиляции пропадают и ставятся дефолтные. А где дефолтные прописаны. Я бы туда вписал.
Метод изменения ещё чего нибудь ещё для сохранения изменений в SynUniSyn не помогает.
PM MAIL   Вверх
Vitalik
Дата 10.4.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добавляются свои Delimiters обыкновенно:
Код
  SynUniSyn1.MainRules.TermSymbols :=
    SynUniSyn1.MainRules.TermSymbols + ['ф', 'о', 'р', 'у', 'м'];
  SynEdit1.Repaint();

Но, странное дело... Добавляться они добавляются, но почему-то ключевые слова подсвечиваются также... Пока что не могу понять почему так происходит...

Это сообщение отредактировал(а) Vitalik - 10.4.2005, 14:29
PM MAIL WWW ICQ YIM   Вверх
PalR
Дата 15.4.2005, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вышел из положения переделав под свою задачу исходник старой версии. Работает так как мне надо.
PM MAIL   Вверх
Vitalik
Дата 16.4.2005, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(PalR @ 15.4.2005, 22:38)
Вышел из положения переделав под свою задачу исходник старой версии. Работает так как мне надо.

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


Новичок



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

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



В делимитеры добавил весь алфавит.
PM MAIL   Вверх
Vitalik
Дата 16.4.2005, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(PalR @ 16.4.2005, 16:58)
В делимитеры добавил весь алфавит.

Оригинально smile

Это сообщение отредактировал(а) Vitalik - 16.4.2005, 18:33
PM MAIL WWW ICQ YIM   Вверх
PalR
Дата 17.4.2005, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Главное работает.
Тут правда обнаружилось следующее.
Объясню на старом примере. Подсветил слово "форум". Посмотрел. Очистил SynEdit. Опять запихал в него текст. Теперь подсветил слово "дом". Всё нормально. Стал прокручивать текст (ну очень он у меня большой) и глядь, а слово "форум" тоже подсветилось. А мне оно не надо.
Я так понимаю что где то ещё чего то надо очистить. Делаю как в примере.
Код

    SynUniSyn.MainRules.Reset;
    SynEdit.Highlighter:=nil;
    SynSymbolGroup:=TSynSymbolGroup.Create('',TSynHighlighterAttributes.Create('unknown'));


Чем отличаются
SynUniSyn.MainRules.Reset;
и
SynUniSyn.MainRules.Clear;
С последним лучше.

Это сообщение отредактировал(а) PalR - 17.4.2005, 12:08
PM MAIL   Вверх
Vitalik
Дата 17.4.2005, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(PalR @ 17.4.2005, 11:07)
Главное работает.

Это можно было сделать и без "изменения" кода компонента. Просто после изменения правил (в том числе изменения делимитеров) нужно написать:
Код

  SynUniSyn1.Prepare(); // подсветка должна переформировать дерево токенов
  SynEdit1.Repaint(); // редактор нужно перерисовать, чтобы увидеть изменения


Цитата(PalR @ 17.4.2005, 11:07)
Тут правда обнаружилось следующее.

Я предлагаю для этой задачи немного другой подход. Создать один раз правило для подсветки вводимого слова, а потом просто изменять свойство этого правила smile
Это мне кажется более логичным, да и не надо каждый раз всё очищать/загружать/перезагружать smile

Вот наваял небольшой примерчик работы такого приложения (файлик прикрепляю).
Там кнопка "Добавить делимитеры" - добавляет маленькие русские буквы в список разделителей. Этот код можно поместить на создание твоего приложения smile
Далее вводишь слово и нажимаешь "Подсветить" - программа подсветит слово во всём тексте.
Пользуйся на здоровье smile
Кстати, там используется последняя версия компонента (ver 1.8 от 4 ноября 2004), так что настоятельно рекомендую скачать именно её smile Там и ошибок по меньше, и возможностей по больше smile

Цитата(PalR @ 17.4.2005, 11:07)
Чем отличаются
SynUniSyn.MainRules.Reset;
и
SynUniSyn.MainRules.Clear;

Reset - разрушает дерево токенов, но сохраняет все правила. Эта продедура вызывается перед созданием дерева токенов при подготовке (Prepare) подсветки для подсветки (извини за тавталогию) smile
Clear - разрушает и дерево токенов и все правила. Т.о. после вызова этой процедуры подсветка не будет содержать ни одного правила smile

Highlight word (source).zip (3k)

Это сообщение отредактировал(а) Vitalik - 17.4.2005, 15:17

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  Highlight_word__source_.zip
PM MAIL WWW ICQ YIM   Вверх
Vitalik
Дата 17.4.2005, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А вот исходники вместе с exe (на всякий случай):

Highlight word (source+exe).zip (298k)

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  Highlight_word__source_exe_.zip
PM MAIL WWW ICQ YIM   Вверх
PalR
Дата 17.4.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо. Попробую.
Пора версию 1.81 собирать. Где добавить в ключевых словах "Может быть частью слова".
Цитата(Vitalik @ 17.4.2005, 15:15)
Я предлагаю для этой задачи немного другой подход

К тому моменту других рабочих вариантов не было. Что пришло в голову то и реализовал.
PM MAIL   Вверх
Vitalik
Дата 15.5.2005, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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




 ! 
 
Обсуждение инсталлятора для компонента вынесено в отдельную тему "Инсталлятор для компонента"

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


 




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


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

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