Когда использовать TPanel FullRepaint?
Я заметил, что resize flicker
становится намного лучше, когда я поставил TPanel.FullRepaint
to False
. Поскольку свойство существует и является True
по умолчанию для этого должна быть какая-то причина.
как решить, должен ли он быть установлен или нет?
в справке просто говорится:
FullRepaint управляет тем, как панель реагирует при изменении размера. Если fullrepaint имеет значение true, вся панель, включая скошенную границу, перекрашивается при изменении размера. Когда FullRepaint false, перерисовывается только область внутри скошенной границы.
http://docwiki.embarcadero.com/Libraries/XE3/en/Vcl.ExtCtrls.TPanel.FullRepaint
этот текст говорит, что он делает, но не почему ...
2 ответов
эффект отсутствующего Fullrepaint может быть показан, и вы должны будете решить, если вам это нужно или нет.
- поместите панель на форму, установите якоря во всех направлениях
- установите PaintCaption в false или используйте пустой заголовок
- поместите другую панель в форму, чтобы при изменении размера форма, части первой панели будут покрыты второй панелью.
запустить программу и размер формы, иногда границы первая панель не будет обновлена.
Это происходит потому, что в WMWindowPosChanged в случае (FullRepaint или (ShowCaption и (Caption")) будет вызван invalidate, иначе только InvalidateRect(Handle, Rect, True) рект, содержащих только правую и/или нижнюю границу, будут признаны недействительными. (спасибо Sertac Akyuz за исправление)
Как вы упомянули, избегая invalidate уменьшает мерцание и во многих случаях необходимость полного invalidate не дается, поэтому пользователь может решите сами, как действовать дальше.
панели как редко будут использоваться, верхние без Fullrepaint
в предыдущих версиях Windows (не уверен, до какой версии, точно) FullRepaint
был обязан предотвратить графический artefacting на панели границах при изменении размера формы.
Насколько мне известно, это не было проблемой, по крайней мере, с Windows XP.