Форум 3DNews
Вернуться   Форум 3DNews > Программирование > Программирование

Ответ Создать новую тему
Опции темы Опции просмотра
Непрочитано 20.06.2007, 22:17   [включить плавающее окно]   #1
santeys
Мужской Новенький
Автор темы
 
Регистрация: 31.03.2007
Как устранить мерцание при рисовании TLabel на Graphics::TBitmap

Проблема такая.

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

Например,

Код:
Ansistring NameGraphic;

//функция рисования графика
void TForm::PaintGraphic()
{
   //Здесь мы выполням множество операций связанных с рисованием на канве BitMap, а далее копируем все на канву формы..................................................................................................................
   BitBlt(Canvas->Handle,0,0,Width,Height,BitMap->Canvas->Handle,0,0,cmSrcCopy);   //копируем изображение с графиками на канву формы 
}

//перерисовываем изображение в том, случае, если меняется размер формы или же перекрывается другими окнами
void __fastcall TFormMain::FormPaint(TObject *Sender)            
{
   PaingGraphic();                        //рисуем график
} 

//При нажатии кнопки рисуем график на канве формы, а далее выводим название графика
void __fastcall TFormMain::ButtonClick(TObject *Sender)
{
   PaintGraphic();                         //рисуем график
   Label->Caption=NameGraphic;  //обновляем надпись
}
santeys вне форума  
Ответить с цитированием
Непрочитано 23.06.2007, 18:45   [включить плавающее окно]   #2
Корсар
Мужской Новенький
 
Регистрация: 08.06.2007
santeys
Не хочу показаться умником, который думает, что всё знает)))) Но вроде спец компоненты есть для вывода графиков, например, Chart ... там и надпись можно задать для графика. А-а-а-а кстать, по какой среде вопрос С++Builder?
Корсар вне форума  
Ответить с цитированием
Непрочитано 25.06.2007, 14:00   [включить плавающее окно]   #3
Phodopus
Мужской Продвинутый
 
Регистрация: 05.10.2005
Адрес: Санкт-Петербург
Скорее всего мерцание возникает в результате изменения текста метки что влечет за собой необходимость сначала стереть фон под меткой а затем нарисовать на подготовленном месте новый текст. Фон за меткой в данном случае не простой - он является частью картинки графика, поэтому фактически процесс стирания фона превращается в процесс рисования всего графика целиком из которого лишь часть находящаяся под меткой будет выведена на экран. Возможны несколько вариантов решения задачи: рисование метки непосредственно на Bitmap, запоминание фона или ускорение процесса вывода части графика. Для начала попробуй убрать PaintGraphic(); в ButtonClick, IMHO в нем не должно быть необходимости. Потом посмотри на скорость еще раз и если она неудовлетворительная - прими одно из решений
Phodopus вне форума  
Ответить с цитированием
Ответ Создать новую тему

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 07:10. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 2000-2017 3DNews. All Rights Reserved.
Администрация 3DNews требует соблюдения на форуме правил и законов РФ
Серверы размещены в Hostkey