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

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

Мигает картинка


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


Наверх

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