Мне записали старую программу в Borland Паскаль и в Delphi, если я использую Form1. Холст. LineTo и MoveTo функционируют, я получаю мерцающий эффект. Кто-либо может сказать мне, как избавиться от мерцания?
Общая методика уменьшения мерцания в операциях с анимированной графикой называется двойной буферизацией. Идея заключается в том, что вы делаете все отрисовки на растровом изображении вне экрана, а затем, когда вы закончили отрисовку всей сцены, копируете всю растровую картинку на видимый дисплей.
Этот термин также относится к поддерживаемым аппаратным средствам, таким как возможность обмена буфером отображения видео whole с альтернативным буфером, который используется в специализированных системах, таких как консольные видеоигры.
. Попробуйте установить DoubleBuffered
true в Form.OnCreate
.
Хотя использование двойной буферизации обычно является лучшим решением, оно не всегда является правильным и определенно не самым экономичным решением. Однако, если вы рисуете только часть образа, то я бы выбрал и это решение, установив DoubleBuffered
в true
, как упоминалось в других комментариях.
Однако, если вы каждый раз при рисовании будете заполнять область компонентов целиком, то, возможно, захотите выбрать другой подход. Если установить ControlStyle
в csOpaque
, то можно избежать стирания фона компонента и тем самым удалить источник мерцания, не прибегая к двойному буферированию. Это, конечно, требует от вас отрисовки всей области компонентов, так что решение действительно подходит только в этом случае.
В общем случае, если потребление памяти не имеет значения, я бы тоже пошел на двойную буферизацию, я просто хотел предложить вам альтернативу. :)
.