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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2010, 12:52   #1
furstenberg
Форумчанин
 
Регистрация: 08.10.2007
Сообщений: 125
По умолчанию оптимизация алгоритма выделения слов

Здравствуйте. Разработал ПО , в котором применяется выделение определённых слов различными цветами. Компонент для загрузки текста RichEdit. У меня два вопроса:
1)Алгоритм выделения:
-найти слово1 (ф-ция Q_PosText) ;
-выделить его средствами RichEdit с найденой позиции;
-искать все слова1 в тесте (ф-ция Q_PosText) и выделять его средствами RichEdit;
и т.д слово 2,3,4,5,6,7.
Недостатки:
-Всё работает , но при больших объёмах обработка занимает много времени;
-Выделение слов происходит на глазах пользователя, т.е подчеркнув одно слово происходит перемещение курсора из области видимости вниз, потом следующее слово - опять переходит вверх, потом вниз и так скачет во время выделения.
Можно ли как то оптимизировать этот алгоритм?

2)На начальном этапе происходит циклическая фильтрация теста с использованием регулярных выражений, где в цикле найденый текст заменяется на ''.
Так вот на этом этапе происходит зависание программы и чем больше текст, тем больше зависание.
Пробовал:
-в цикл вставлять Application.ProcessMessage- не помогло;
- делать эту обработку в другом потоке- не помогло.
Есть ли возможность как то избавиться от этого?
furstenberg вне форума Ответить с цитированием
Старый 30.01.2010, 13:38   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Почитай статью про твой пункт 1-й - один из способов оптимизации подсветки в RichEdit
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 01.02.2010, 00:41   #3
furstenberg
Форумчанин
 
Регистрация: 08.10.2007
Сообщений: 125
По умолчанию

Спасибо за ответ. Ну а насчёт зависания при обработки регулярного выражения никто не подскажет чего-нибудь умного?
furstenberg вне форума Ответить с цитированием
Старый 01.02.2010, 07:37   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Лапша все это. Я пробовал такой код - раскраска слов идет нормально, но при загрузке текста будут задержки и не малые. Для начала, ограничьте раскраску только тем диапазоном, который виден программисту. Прога большая, но ведь программер ее видит не всю, а только некоторый фрагмент, так зачем стараться и красить, то что программер не смотрит (и возможно, что не будет смотреть).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 01.02.2010, 07:45   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы вообще лучше потратил лишнее время чтоб написать с нуля собственный компонент отрисовки, рассчитанный например на BB-код.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.02.2010, 10:59   #6
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

RichEdit при разрисовки слов перерисовывает весь текст (даже если использовать кусок который видит программист). Следовательно если текст большой, то и время на перерисовку уйдет больше.
Поэтому соглашусь со Stilet'ом, лучше написать свой компонент или использовать сторонний.
psycho-coder вне форума Ответить с цитированием
Старый 01.02.2010, 12:38   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А как вам использование RichView у меня в DFaq-e ?
http://www.programmersforum.ru/attac...5&d=1262695642
База не совсем маленькая, но все очень быстро...
mihali4 вне форума Ответить с цитированием
Старый 01.02.2010, 13:20   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
RichEdit при разрисовки слов перерисовывает весь текст (даже если использовать кусок который видит программист).
Это понятно, но ИМХО, можно добиться и примелимой работы.

Цитата:
Поэтому соглашусь со Stilet'ом, лучше написать свой компонент или использовать сторонний.
Тогда за основу лучше брать Мемо, как это сделано в SynEdit. Корни тормозов RichEdit'а уходят в WinApi. Недавно ковырял его, складывается ощущение, что сначала его хотели использовать для других целей . К примеру там есть режим подсветки URLов.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 01.02.2010, 14:50   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

RichEdit вообще не выполняет того, что заявлено в его описании.
Имхо - абсолютно бесполезный компонент...
mihali4 вне форума Ответить с цитированием
Старый 01.02.2010, 15:50   #10
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Это понятно, но ИМХО, можно добиться и примелимой работы.


Тогда за основу лучше брать Мемо, как это сделано в SynEdit. Корни тормозов RichEdit'а уходят в WinApi. Недавно ковырял его, складывается ощущение, что сначала его хотели использовать для других целей . К примеру там есть режим подсветки URLов.
Тогда уж лучше CustomMemo
Изображения
Тип файла: png richmemo.PNG (8.0 Кб, 68 просмотров)
psycho-coder вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выделения peq Microsoft Office Excel 2 29.12.2009 10:31
Дана строка, состоящая из нескольких слов. Найти количество слов, которые содержат хотя бы одну букву "А" Mashaa Помощь студентам 13 09.12.2009 13:28
Отключение выделения Gromsky HTML и CSS 5 01.12.2009 13:31
по вводу слов в массив и подсчёт введённых слов -ushёl- Общие вопросы C/C++ 4 16.11.2009 00:45
Составить в алфавитном порядке список всех слов, встречающихся в тексте, и количество этих слов. KAPAHDAW Паскаль, Turbo Pascal, PascalABC.NET 2 17.02.2009 01:19