Рисование и OnPaint

 
0
 
Delphi, Kylix and Pascal
ava
boobie | 20.02.2013, 08:55
Здравствуйте! У меня такой вопрос. "Рисовать" рекомендуется с помощью процедуры OnPaint. Но ведь весь код невозможно засунуть в обработчик этого события. Например, при рисовании мышью. Неужели всю информацию о нарисованных фигурах и закрашенных пикселях нужно сохранять в массивах и т.п., а затем заталкивать в OnPaint, организовывать в нем циклы, для постоянной перерисовки, чтобы при изменении размера окна, или после сворачивания все перерисовывалось? А проще никак?
Ответы (5)
ava
Чучмек | 20.02.2013, 12:29 #
Цитата (boobie @  20.2.2013,  07:55 findReferencedText)
А проще никак? 

Рисуй на TImage.
Или создавай TBitmap, рисуй на нем, а в OnPaint копируй изображение на форму.
ava
Alexeis | 20.02.2013, 12:39 #
  Можно рисовать и в любой момент, особенно если запретить Windows очищать фон и сделать окно слоистым. Обычно проблема в том, что фон может очищаться в некоторый произвольный момент времени и даже если изображение непрерывно обновляется (анимация), то может получиться мерцание. Будут моменты времени когда изображение частично или полностью сотрется. Слоистое окно нужно для того чтобы вышестоящие окна не затирали изображение. В случае слоистого окна Windows рисует окно не сразу на экране, а для каждого окна организует свой слой. В этом случае выше стоящие окна никогда не будут затирать слоистое окно, поскольку Windows сначала отрисует содержимое слоев нижних окон, а затем верхних. 
ava
boobie | 26.02.2013, 11:48 #
Alexeis, можно пример небольшой, или где почитать...
ava
phomm | 27.02.2013, 18:39 #
Вот я объяснял принцип http://forum.vingrad.ru/forum/topic-362730.html хоть там и сишарп, но смысл тот же, на дельфи можно влёт переделать. Если начнёте, но столкнётесь с проблемами при переводе/работе примера - киньте то на чём остановились, доработаю.
Вообще с буфферизацией выводимых изображений в своё время довольно много работал.
ava
Alexeis | 27.02.2013, 18:53 #
Вот например http://forum.vingrad.ru/topic-283111.html . Я рисовал вращающийся треугольник. Если в функции
procedure TForm1.WMEraseBkgnd(var Message: TWMEraseBkgnd); раскоментировать строчку то отключиться перерисовка фона. Чтобы сделать слоистое окно достаточно сделать форме прозрачность 255 единиц (Свойства AlphaBlend, а также AlphaBlendValue) .
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить