Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Нюанс в TRichEdit…


Автор: TBeginner 17.5.2005, 19:16
Здравствуйте мастера!
Помогите, пожалуйста, мне решить, одну проблему. Я не совсем по поводу программирования, я по ээ-э-ээ ну, в общем, читайте ниже…

Пишется программа (своими руками) в ней используется такой компонент как TRichEdit, но вот проблема: при работе с текстом (ну с другой стороны, с чем же ещё smile), во время ввода происходит мерцание текста находящегося в текущей строке smile. Это как-нибудь можно излечить?

Автор: Poseidon 17.5.2005, 20:42
Используй двойную буферизацию (Double Buffered).

Цитата
Double Buffered определяет, будет ли изображение компонента рисоваться непосредственно в окне (при DoubleBuffered = false), или сначала заноситься в битовую матрицу в памяти. Последнее уменьшает эффекты мерцания при перерисовке изображения, но требует дополнительных затрат памяти

Автор: s-mike 17.5.2005, 23:19
1. Используй RichEdit.Lines.BeginUpdate/EndUpdate
2. http://forum.vingrad.ru/index.php?showtopic=40286&st=0&#entry309869

Автор: TBeginner 18.5.2005, 21:45
Нет, это не подходит (может просто не так использовал, напишите как правильно нужно, плиз), есть ли другой способ?

Автор: s-mike 19.5.2005, 00:13
Цитата(TBeginner @ 18.5.2005, 21:45)
Нет, это не подходит

Что именно? smile И как мы узнаем, правильно или неправильно ты что-либо использовал, если не видели твоего кода?

Автор: RA 19.5.2005, 00:37
TBeginner По идее такого быть не должно, может у тебя в обработчике событий от Рича лежит нечто?

Автор: TBeginner 20.5.2005, 22:10
Объясните пожалуйста, я ведь новичок, как использовать тот самый Double Buffered где его прописывать, на какое событие smile

Автор: <Spawn> 21.5.2005, 05:00
TBeginner Допустим в OnCreate формы, если ты хочешь получить постоянство этого эффекта во время жизни твоего приложения smile (Разумеется, если ни где больше не будешь менять его значение), т.е.

Код

procedure TForm1.FormCreate(Sender: TObject);
begin
  RichEdit1.DoubleBuffered := True;
end;

Автор: Akella 21.5.2005, 09:28
Цитата(Poseidon @ 17.5.2005, 20:42)
Используй двойную буферизацию (Double Buffered).

НЕ ПОМОГАЕТ
У меня такая же проблема
Добавлено @ 09:31
Кроме того, что моргает, он еще и медленно прокручивает (листает) текст
http://forum.vingrad.ru/index.php?showtopic=46230&hl=richedit

Автор: TBeginner 21.5.2005, 16:21
Вот попробовал как советовал <Spawn>, и ничего… smile
Да, текст действительно не мерцает, но и не отображается вовсе smile вернее он есть, но его цвет таков же как и фон поля для ввода текста.

Может есть другой способ, или компонент на базе TRichEdita, в котором нем мерцания?

Автор: Akella 21.5.2005, 16:26
Цитата(TBeginner @ 21.5.2005, 16:21)
Да, текст действительно не мерцает, но и не отображается вовсе

аналогичная проблема с удвоением буфера, текст не отображается, пришлось отключить двойную буферизацию smile

Автор: <Spawn> 21.5.2005, 17:30
TBeginner Кстати, не поглядел совсем - попробуй как сказал s-mike сделать, т.е.:

Код

  with RichEdit1.Lines do
  try
    BeginUpdate;
    //тут работаешь со строками
  finally
    EndUpdate;
  end;

Автор: TBeginner 22.5.2005, 19:58
<Spawn> в OnChange?

Автор: <Spawn> 23.5.2005, 04:36
TBeginner Там где ты ведешь работу со строками RichEdit - а. Если опять не будет понятно, то приведи код.

Автор: TBeginner 23.5.2005, 17:17
<Spawn> да нету особого кода, просто я жаждую это мерцание нафиг устранить, а какими способами - не важно. Приведи пример, если не сложно. У меня просто пустой проект, ничего ещё не писал, думал начать с устранения этой "нездоровины".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)