![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Мигает картинка
alexdn © (2013-05-27 14:06:00)Рисование идёт на Tpaintbox событие onpaint, при этом рисование вынесено в отдельную процедуру
DrawPicture(PaintBox1.Canvas);
кода там много, так вот, при перемещении ползунка формы картинка начинает мигать (перерисовываться). Можно ли тут что то сделать, или это уже не хватает времени на перерисовку?
вот картинка - http://s018.radikal.ru/i520/1305/59/9a83a38a644f.png
скрин может не совсем правильно передаёт мигание, но думаю будет понятно, красное окно сверху прорисовывается отдельно, оно активно.
alexdn (2013-06-02 13:50:00) [1]brother © я тебе в аську черкнул, хорошо бы пообщаться.
brother (2013-06-02 08:59:00) [2]откажись от PaintBox1 и [3]
alexdn (2013-06-01 21:19:00) [3]Т.е. выполнение самого рисования длится 75 мил сек, т.е. если его ставить в OnPaint, то заикаться начинает..
alexdn (2013-06-01 20:42:00) [4]Видимо просто сам метод не тянет, попробовал на аналогичной программе поставить задержку на 75 миллисекунд, получилось почти то же самое, т.е DrawPicture(bitmap_mem.Canvas); видимо всё тянет..
robt5 (2013-06-01 20:18:00) [5]
> рисование в памяти видимо не выход..
более чем уверен, что у тебя, как обычно, все происходит через Jo
alexdn (2013-06-01 18:47:00) [6]Ну да, bitblt(PaintBox1.canvas.Handle,0,0,PaintBox1.width,PaintBox1.height,bitmap_mem.C anvas.Handle,0,0,srcCopy);
но всё равно, мигать стало не чуть не меньше, если даже не больше, так что рисование в памяти видимо не выход..
alexdn (2013-06-01 18:20:00) [7]> MBo © (01.06.13 17:26) [8]
Это какой это спутан?
MBo (2013-06-01 17:26:00) [8]>говорят она быстрее..
преувеличивают
>bitblt видимо не работает
она-то работает, если параметры не путать
alexdn (2013-06-01 16:20:00) [9]Вот, попробовал в памяти -
bitmap_mem.width:=PaintBox1.Width;
bitmap_mem.height:=PaintBox1.Height;
DrawPicture(bitmap_mem.Canvas);
//PaintBox1.Canvas.Draw(0, 0, bitmap_mem);
bitblt(bitmap_mem.canvas.Handle,0,0,bitmap_mem.width,bitmap_mem.height,PaintBox1 .Canvas.Handle,0,0,srcCopy);
bitblt видимо не работает.. что не так? если раскрыть Draw, то тогда работает. Но хотелось бы именно через bitblt, говорят она быстрее..
robt5 (2013-05-27 15:47:00) [10]
> кстати можно
не можно а нужно, рисовать в памяти
sniknik (2013-05-27 15:19:00) [11]кстати можно и по "аналогии"... рисовать на отдельном битмапе, можно в фоне, а не прямо в событии паинта, в паинте только копировать нужное.
sniknik (2013-05-27 15:13:00) [12]> DoubleBuffered начинается в WinControl, PaintBox1 не наследник WinControl
у формы/панели на которой лежит.
brother (2013-05-27 15:10:00) [13]используй canvas формы...
"Добрый Сок" (2013-05-27 15:08:00) [14]
> sniknik ©
DoubleBuffered начинается в WinControl, PaintBox1 не наследник WinControl
sniknik (2013-05-27 14:35:00) [15]попробуй включить DoubleBuffered