Delphi: прокрутка в режиме реального времени

Я реализовал поле прокрутки, которое динамически добавляет TCharts в зависимости от количества каналов, доступных на устройстве ввода. Диаграммы перерисовываются на контуре, чтобы показать значение напряжения в канале, так что на дисплей выводится эффективное представление «в реальном времени» напряжений, подаваемых на каждый канал.

В настоящее время у меня есть функция Application.ProcessMessages, чтобы приложение не зависало во время запуска, но я хотел бы иметь возможность прокручивать окно во время отображения каналов, не нарушая отображение, которое в настоящее время приостанавливается, пока щелкается полоса прокрутки.

Это возможно?


person Alex Heslop    schedule 20.09.2017    source источник
comment
Если упомянутый вами TChart является TeeChart от Steema, возможно, стоит прочитать это: teechart. net/reference/articles/VCLRealtime.pdf   -  person Günther the Beautiful    schedule 20.09.2017
comment
Главное, что вам нужно исправить, это ваш дизайн. Необходимо получить код, связанный с процессором, из потока пользовательского интерфейса.   -  person David Heffernan    schedule 20.09.2017


Ответы (1)


Да, это возможно.

Графики перерисовываются по петле...

Перекрашивание, управляемое собственным циклом, действительно вызывает проблемы с дыханием в системе, что и является причиной необходимости Application.ProcessMessages. Постарайтесь не использовать его. Вместо этого вы должны просто попросить диаграммы перерисовывать себя с помощью Invalidate при поступлении новых данных и позволить системе решить, когда это удобно сделать.

person NGLN    schedule 20.09.2017
comment
Обратите внимание, что Refresh — это вызов Repaint, который представляет собой немедленную отрисовку для оконных элементов управления (UpdateWindow после InvalidateRect, что приводит к WM_PAINT, который обходит очередь сообщений), не сильно отличающийся от дизайна в вопросе. - person Sertac Akyuz; 20.09.2017
comment
@Sertac Да, спасибо за напоминание. Я удалил это из ответа. - person NGLN; 20.09.2017