Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TImage vs TPaintBox


salexn ©   (2006-06-30 10:03:00) 

Есть dll, в которой реализован класс, наследник от Thread. В классе есть TBitmap и на нем рисуется графика. Хост приложение должно периодически отрисовывать полученный результат. Использую TPaintBox, в котором на Onpaint это все и делается. Однако замечено, что есть нагрузить компьютер(CPU=100%) и начать переключаться между окнами, получаем белое окно вместо графика.
  imgGraphic - TPaintBox

  GraphicBuilder.Graphic.Canvas.Lock;
   try
     BitBlt(imgGraphic.Canvas.Handle, 0, 0, imgGraphic.Width, imgGraphic.Height, GraphicBuilder.Graphic.Canvas.Handle, 0, 0, SRCCOPY);
   finally
     GraphicBuilder.Graphic.Canvas.UnLock;
   end;

Если же использовать TImage то мерцает при отрисовке

  GraphicBuilder.Graphic.Canvas.Lock;
   try
     imgGraphic.Picture.Bitmap := GraphicBuilder.Graphic;
    //imgGraphic.Picture.Assign(GraphicBuilder.Graphic);
   finally
     GraphicBuilder.Graphic.Canvas.UnLock;
   end;

В чем проблема, как побороть или как правильно сделать?


REA   (2006-06-30 12:52:00) [1]

Lock/Unlock в случае с Bitmap мне кажется можно убрать - там это внутри должно быть. Если рисунок достаточно большой, то и будет мерцать.
У родителя неплохо бы перехватить WM_EraseBackground


salexn   (2006-06-30 12:44:00) [2]

>MBo
Все равно мерцает...


Чапаев   (2006-06-30 12:40:00) [3]


> >Если же использовать TImage то мерцает при отрисовке
> DoubleBuffered установи родителю Timage

А так же Transparent:=False.


MBo   (2006-06-30 12:20:00) [4]

>Если же использовать TImage то мерцает при отрисовке
DoubleBuffered установи родителю Timage


salexn   (2006-06-30 12:10:00) [5]

А кто сказал что в потоке отрисовываю??
В потоке, на TBitmap рисуется графика, а хост приложение просто его считывает... В OnPaint рисуется только результат. Или ты предлагаешь на каждый OnPaint заново переделывать график? Это нереально.


REA   (2006-06-30 12:00:00) [6]

А не надо отрисовывать в потоке. Надо в OnPaint отрисовывать


Desdechado   (2006-06-30 10:45:00) [7]

> есть нагрузить компьютер(CPU=100%)
Ты попробуй ради интереса запустить фотошоп в таком режиме. И попереключаться. Отрисовка просто не успевает.

И не забывай вызывать Application.ProcessMessage


Наверх

Титульная страница Поиск, карта сайта Написать письмо