Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2009, 02:27   #1
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию DBRichViewEdit - есть непонятный момент

Взялся за этот компонент.
Странное дело - иногда не хочет воспринимать выделенное именно мной.
Так, скажем, выделенному куску текста я спокойно могу присвоить те аттрибуты, которые я назначил, но...
Если я делаю то же самое с анализом текста, выделение "слетает" и аттрибуты применяются ко всему тексту, а не к выделенному куску...
Секрета не делаю - в DFaq хочу сделать форматирование по ключевым словам и комментариям. Всего навсего...
Элементарным сравнением с массивом ключевых слов и т.д.
Но почему-то такая "бяка" получается...
Кто с ним плотно работал и может ответить по делу?
Хэлп там, конечно, оставляет желать лучшего...
mihali4 вне форума Ответить с цитированием
Старый 30.12.2009, 15:05   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

mihali4, я достаточно давно работаю с RichView-контролами, последние проекты только на них и основаны, но, прости конечно, я не понял что означает
Цитата:
Если я делаю то же самое с анализом текста, ...
Твоя прога имеет редактор ? И при выделении слетают атрибуты в выделенном фрагменте ?
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 30.12.2009, 15:52   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Да, DBRichViewEdit и для отображения, и для редактирования.
Аттрибуты не слетают.
Попробую по-другому сформулировать.
Возможно ли для SearchText задать, чтобы поиск происходил только в выделенном мной куске текста?
Или нужно использовать какую-то модификацию SearchText ?
mihali4 вне форума Ответить с цитированием
Старый 30.12.2009, 16:41   #4
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

mihali4, я очень не люблю когда не могу помочь человеку с вопросом, например в данном случае, т.к. не работал с поиском в выделенной области.
Но, т.к. много "лазил" по этим компонентам хочу предположить что можно организовать свой поиск опираясь к примеру на
Код:
procedure GetSelectionBounds(var StartItemNo, StartItemOffs, EndItemNo, EndItemOffs: Integer; Normalize: Boolean);
Эта функция даст начальный и конечный элемент в DBRichViewEdit`е когда произведено выделение, а потом "идти" по элементам (благо для этого есть все рычаги) и искать то что нам нужно.
Или это чушь ? Как думаешь ?
Я еще посмотрю, и спрошу у авторов. Если что напишу здесь же.
Да, кстати, вот тут довольно хорошо все описано (много раз бывал) : http://www.trichview.com/help/index....ionbounds.htmlЧто-то типа online-help
"Заряженному танку в дуло не смотрят" @Dekmer in WoT

Последний раз редактировалось Kotofff; 30.12.2009 в 16:43.
Kotofff вне форума Ответить с цитированием
Старый 30.12.2009, 22:57   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Спасибо. Сейчас вернулся из театра, спектакль был премерзейший - было время подумать.
Пришел к этому же выводу, плюс - в цикле поиска восстанавливать SetSelectionBounds().
Сейчас попробовал - выделяет все ключевые слова, но все равно - не в пределах выделения, а до конца текста...
Иду смотреть по ссылочке.

З.Ы. Спасибо за ссылочку. Так это вроде как хэлп, он у меня есть...

00:44

Выяснилась, однако, любопытная штука.
Ежели выделение не делать - весь текст нормально обрабатывается, все ключевые слова в "болде"...
Но с выделением - какая-то ерунда. Обрабатывается не выделение, а наоборот, только то, что не выделено ! Либо сверху, либо снизу от выделения (в зависимости от наличия [rvseoDown])...

Последний раз редактировалось mihali4; 31.12.2009 в 00:50.
mihali4 вне форума Ответить с цитированием
Старый 31.12.2009, 08:13   #6
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Привет, тут мне ответили авторы компонентов :
Цитата:
1) Используя RVGetSelection из RVLinear.pas, запомнить границы выделения.
2) Поместить каретку в начало выделения:
rve.TopLevelEditor.GetSelectionBoun ds(StartNo, StartOffs, EndNo, EndOffs, True);
rve.TopLevelEditor.SetSelectionBoun ds(StartNo, StartOffs, StartNo, StartOffs);

3) Использовать поиск rve.SearchText. Если найдено, то использовать RVGetSelection, и сравнить с результатами шага 1 (при тестировании посмотрите два вида начального выделения - от начала к концу и от конца к началу). Если не выходит, то можно показать выделенный текст и повторить шаг 3. Если выходит, то можно восстановить исходное выделение. Если не найдено, тоже можно восстановить.
Я сам еще не пробовал. Только что получил письмо и сюда сразу. Напиши если что. Рад если помог!
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 31.12.2009, 13:12   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вот обработчик, вокруг которого я исполняю танец с бубном:
(DBAnswMemo - это DBRichViewEdit)
Код:
if RBCode.Checked then
begin
fmain.DBAnswMemo.GetSelectionBounds(sin,sio,ein,eio,True);
fmain.DBAnswMemo.SetSelectionBounds(sin,sio,sin,sio);//ставим каретку на начало
for i:=0 to Length(keyw)-1 do //проходимся в цикле мо массиву ключевых слов
begin
  while fmain.DBAnswMemo.SearchText(keyw[i], [rvseoDown, rvseoWholeWord]) do
  begin
    fmain.DBAnswMemo.ApplyTextStyle(16);//делаем [Bold], если найдено ключевое
    ok:=True;//флаг изменения
  end;
  fmain.DBAnswMemo.SetSelectionBounds(sin,sio,sin,sio);//ставим каретку на начало
end;
end;
Выделение теперь обрабатывается, но не до конца выделения, а все равно до самого конца текста...
В принципе, у них в хэлпе прописано, что вьюха работает с выделением, а редактор - не ловит конец выделения...
Так что, возможно, танцы не имеют смысла?

З.Ы. Причем первый же проход - до конца текста... Проверил.

З.Ы.Ы. Но все равно - большое спасибо за помощь. И с наступающим.

Последний раз редактировалось mihali4; 31.12.2009 в 19:30.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Параметр классу? Непонятный с++. jojahti Общие вопросы C/C++ 4 16.10.2009 08:55
непонятный баг brain-bras Общие вопросы C/C++ 4 14.10.2009 21:26
Непонятный синтаксис. jojahti Общие вопросы C/C++ 10 14.10.2009 19:05
непонятный компилятор Waleriy Общие вопросы по Java, Java SE, Kotlin 2 11.12.2008 14:16
непонятный код Kostua Помощь студентам 5 27.04.2008 18:17