![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| boobie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 16.9.2011 Репутация: нет Всего: нет |
Здравствуйте! У меня такой вопрос. "Рисовать" рекомендуется с помощью процедуры OnPaint. Но ведь весь код невозможно засунуть в обработчик этого события. Например, при рисовании мышью. Неужели всю информацию о нарисованных фигурах и закрашенных пикселях нужно сохранять в массивах и т.п., а затем заталкивать в OnPaint, организовывать в нем циклы, для постоянной перерисовки, чтобы при изменении размера окна, или после сворачивания все перерисовывалось? А проще никак?
|
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Рисуй на TImage. Или создавай TBitmap, рисуй на нем, а в OnPaint копируй изображение на форму. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Можно рисовать и в любой момент, особенно если запретить Windows очищать фон и сделать окно слоистым. Обычно проблема в том, что фон может очищаться в некоторый произвольный момент времени и даже если изображение непрерывно обновляется (анимация), то может получиться мерцание. Будут моменты времени когда изображение частично или полностью сотрется. Слоистое окно нужно для того чтобы вышестоящие окна не затирали изображение. В случае слоистого окна Windows рисует окно не сразу на экране, а для каждого окна организует свой слой. В этом случае выше стоящие окна никогда не будут затирать слоистое окно, поскольку Windows сначала отрисует содержимое слоев нижних окон, а затем верхних.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| boobie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 16.9.2011 Репутация: нет Всего: нет |
Alexeis, можно пример небольшой, или где почитать...
|
|||
|
||||
| phomm |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 7.10.2010 Репутация: 1 Всего: 1 |
Вот я объяснял принцип http://forum.vingrad.ru/forum/topic-362730.html хоть там и сишарп, но смысл тот же, на дельфи можно влёт переделать. Если начнёте, но столкнётесь с проблемами при переводе/работе примера - киньте то на чём остановились, доработаю.
Вообще с буфферизацией выводимых изображений в своё время довольно много работал. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Вот например http://forum.vingrad.ru/topic-283111.html . Я рисовал вращающийся треугольник. Если в функции
procedure TForm1.WMEraseBkgnd(var Message: TWMEraseBkgnd); раскоментировать строчку то отключиться перерисовка фона. Чтобы сделать слоистое окно достаточно сделать форме прозрачность 255 единиц (Свойства AlphaBlend, а также AlphaBlendValue) . -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |