![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 13.09.2008
Сообщений: 3
|
![]()
Дело такое: каждый короткий промежуток времени нужно менять шрифт каждого следующего символа.
Я реализовал это так: на таймере весит событие, которое выбирает каждый следующий символ в RchEdit как SelText и изменяет его атрибуты. Проблема такая: при маленьких интервала таймера (<50 мс) становится очень заметен следующий эффект: строка, в которой находится символ, шрифт которого изменяется в данный момент, мигает. Выходит очень неудоно воспринимать текст. Подскажите пожалуйста способ решения проблемы. |
![]() |
![]() |
![]() |
#2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
50 миллисекунд - это 20 герц, т.е. 20 раз в секунду...
Человеческий глаз не ловит смену кадров при частоте 24 кадра в секунду... Это почти одно и то же. Может, не стоит извращениями заниматься? Или ваша цель - добиться головных болей у юзера? |
![]() |
![]() |
![]() |
#3 |
Регистрация: 13.09.2008
Сообщений: 3
|
![]()
Дело в том, что скорость этого подчеркивания по замыслу должна быть равна скорости чтения текста. Хотите верьте, а хотите - нет, но даже при интервале таймера 50 подчеркивание за мной не успевает... Вероятно, достаточно большое время занимает само выполнение операций - про оптимизацию я слыхом не слыхивал. Что делать не знаю.. Вотъ..
|
![]() |
![]() |
![]() |
#4 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
![]()
Объяснение 1
Дело может быть не совсем в частоте смены кадров. Дело в способе перерисовки. RichEdit, как и все компоненты, перерисовывается кусками. У RichEdit'а, в частности, таким куском является строка. Если даже вы будите вести линию подчеркивания (а я так понял вам нужно именно подчеркивание, но это не важно) со скоросью 1 символ в минуту, то строка будет "мигать" 1 раз в минуту, но вы этого скорее всего никогда не увидите, так как частота смены кадров на мониторе, как правило, более 60 Гц. Получается, что пока ваш глаз считывает один кадр, монитор нарисует их уже более двух кадров. И это мигание потеряется. Я немножко не понял mihali4'а, но думаю он это и имел в виду. Дальше. Когда колличество перерисовок строки увеличивается, увеличивается и плотность "плохих" кадров. И они начинают проявлятся. Объяснение 2 Это только мои предположения, я не силен в таких вопросах, но возможно, что если комп успевает проделать какую-то работу с канвой быстрее, чем происходит прорисовка одного кадра, то результат этой работы выведится сразу целиком, а не по отдельным ее составляющим. Тоесь, система сначало создант рисунок экрана в памяти, а потом его нам показывает. Ведь по сути текст рисуется не целиком, а по буквам. Но на экране весь текст появится целиком. Но если комп не успевает что-то дорисовать в памяти до того, как нужно показывать следующий кадр, он показывает то, что получилось. Так появляется мерцание. Решение Какой бы ни была причина мирцаний, необходимо уменьшить колличество перерисовок до некоторого порога. Его можно определить эксперементально с небольшим запасом, на тот случай, если вашей программе придется работать в "худших" условиях. А скорость подчеркивания можно увеличить подчеркивая за раз не один, а 5-6 символа. Это не даст вам идеального результата, но как видно из приложенного примера, мирцаний стало значительно меньше. P.S.: В приведенном примере вариант 3 наиболее точно отображает скорость подчеркивания и не перерисовывает канву чаще 5 раз в секунду. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
RichEdit обновление текста | N!ckeL | Общие вопросы Delphi | 11 | 05.02.2009 20:47 |
Сохранение текста (RichEdit) без формата | Air | Помощь студентам | 2 | 06.08.2008 17:50 |
Вставка текста в RichEdit | NoName_emaNoN | Компоненты Delphi | 4 | 03.05.2008 12:12 |
Форматирование текста в RichEdit. | Air | Общие вопросы Delphi | 2 | 03.03.2008 15:15 |
поиск и замена текста в RichEdit | Vasya | Помощь студентам | 11 | 16.03.2007 06:48 |