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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2008, 18:24   #1
Melevir
 
Регистрация: 13.09.2008
Сообщений: 3
По умолчанию Мигание текста в RichEdit

Дело такое: каждый короткий промежуток времени нужно менять шрифт каждого следующего символа.
Я реализовал это так: на таймере весит событие, которое выбирает каждый следующий символ в RchEdit как SelText и изменяет его атрибуты.
Проблема такая: при маленьких интервала таймера (<50 мс) становится очень заметен следующий эффект: строка, в которой находится символ, шрифт которого изменяется в данный момент, мигает. Выходит очень неудоно воспринимать текст.
Подскажите пожалуйста способ решения проблемы.
Melevir вне форума Ответить с цитированием
Старый 26.09.2008, 21:04   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

50 миллисекунд - это 20 герц, т.е. 20 раз в секунду...
Человеческий глаз не ловит смену кадров при частоте 24 кадра в секунду... Это почти одно и то же.
Может, не стоит извращениями заниматься?
Или ваша цель - добиться головных болей у юзера?
mihali4 вне форума Ответить с цитированием
Старый 28.09.2008, 16:15   #3
Melevir
 
Регистрация: 13.09.2008
Сообщений: 3
По умолчанию

Дело в том, что скорость этого подчеркивания по замыслу должна быть равна скорости чтения текста. Хотите верьте, а хотите - нет, но даже при интервале таймера 50 подчеркивание за мной не успевает... Вероятно, достаточно большое время занимает само выполнение операций - про оптимизацию я слыхом не слыхивал. Что делать не знаю.. Вотъ..
Melevir вне форума Ответить с цитированием
Старый 28.09.2008, 22:05   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Объяснение 1
Дело может быть не совсем в частоте смены кадров. Дело в способе перерисовки. RichEdit, как и все компоненты, перерисовывается кусками. У RichEdit'а, в частности, таким куском является строка. Если даже вы будите вести линию подчеркивания (а я так понял вам нужно именно подчеркивание, но это не важно) со скоросью 1 символ в минуту, то строка будет "мигать" 1 раз в минуту, но вы этого скорее всего никогда не увидите, так как частота смены кадров на мониторе, как правило, более 60 Гц. Получается, что пока ваш глаз считывает один кадр, монитор нарисует их уже более двух кадров. И это мигание потеряется. Я немножко не понял mihali4'а, но думаю он это и имел в виду.
Дальше. Когда колличество перерисовок строки увеличивается, увеличивается и плотность "плохих" кадров. И они начинают проявлятся.
Объяснение 2
Это только мои предположения, я не силен в таких вопросах, но возможно, что если комп успевает проделать какую-то работу с канвой быстрее, чем происходит прорисовка одного кадра, то результат этой работы выведится сразу целиком, а не по отдельным ее составляющим. Тоесь, система сначало создант рисунок экрана в памяти, а потом его нам показывает. Ведь по сути текст рисуется не целиком, а по буквам. Но на экране весь текст появится целиком. Но если комп не успевает что-то дорисовать в памяти до того, как нужно показывать следующий кадр, он показывает то, что получилось. Так появляется мерцание.

Решение
Какой бы ни была причина мирцаний, необходимо уменьшить колличество перерисовок до некоторого порога. Его можно определить эксперементально с небольшим запасом, на тот случай, если вашей программе придется работать в "худших" условиях. А скорость подчеркивания можно увеличить подчеркивая за раз не один, а 5-6 символа.
Это не даст вам идеального результата, но как видно из приложенного примера, мирцаний стало значительно меньше.

P.S.: В приведенном примере вариант 3 наиболее точно отображает скорость подчеркивания и не перерисовывает канву чаще 5 раз в секунду.
Вложения
Тип файла: zip Подчеркивание в RichEdit.zip (2.1 Кб, 35 просмотров)
Sibedir вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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