![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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