• 0
ader

Рисовать без Repaint

Вопросы

Есть ли возможность рисовать в Paintbox напрямую, без вызова Repaint? Или есть ещё какой-то способ, чтобы выводить плавную анимацию графика поступающих данных? Сначала идёт отрисовка в буфер, а буфер на форму уже выводится в OnPaint через заданные промежутки времени (30-50мс). Картинка временами "залипает" - подозреваю, как раз из-за того, что сообщения на перерисовку, имея низкий приоритет, поступают неравномерно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 ответов на этот вопрос

  • 0


методы beginupdate endupdate   используются ?
если нет, то оно и будет тормозить и залипать ибо при каждом чихе идет перерисовка всей канвы.
 
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

beginupdate endupdate  для какого компонента? для  Paintbox?  и каким образом их использовать?

и зачем.. рисование вообще идёт не в основном потоке, в Paintbox только готовый битмап выводится. Оно не тормозит в общем-то, но как-то неравномерно идёт..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Да почти  для любого "графического" компонента   есть эти методы
 Откройте справку на Paintbox раздел методов - там есть описание обоих .
 Работаем на билдере так
 myPainbox->BeginUpdate();
//... тут код  чо мы там рисуем  - кривые . косые . графики окружности и прочие мегауравнения
myPainbox->EndUpdate();
myPainbox->Repaint();// выводим на экран все что накалякали в буфере

Оно и будет идти неравномерно ибо  вашему приложению система не обязана давать 100% процессорного времени :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

странные советы..  зачем myPainbox->BeginUpdate() , если я рисую не на Paintbox? и вообще рисую в фоне на невизуальном битмапе. В том-то и вопрос, что доступ к канве Painbox-а только через Repaint

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Накидайте просто пример - рисование линии  в одну сторону и в другую по таймеру - ничего никуда не залипает  и не зависает.

Repaint    по таймеру вызывается ? 
Вы бы код приложили ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

в простом примере будет рисовать более-менее плавно. В реальной программе на форме много ещё чего другого рисуется, кроме графика, которому нужна плавность. В VCL проблемы не было - просто выводишь напрямую на канву Paintbox-а, минуя очередь сообщений. Вопрос вполне конкретный: как это сделать в Firemonkey?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

В фмх канвас является общим для формы, а в вцл для каждого компонента свой.

рисовать нужно в методе онпайнт компонента или формы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

в общем, без Repaint вывести ничего нельзя.. печально

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
8 часов назад, ader сказал:

в общем, без Repaint вывести ничего нельзя.. печально

а в чем печаль?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
20 минут назад, wamaco сказал:

а в чем печаль?

вы не чувствуете разницы между "нарисовать немедленно" и "отправить запрос на отрисовку"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, ader сказал:

вы не чувствуете разницы между "нарисовать немедленно" и "отправить запрос на отрисовку"?

А с чего ты взял что контролируешь операционку? Она живёт своей жизнью и поплёвывает на самоуверенных кодеров )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу