При изменении размера формы с множеством элементов управления форма выглядит плохо из-за мерцания. Какие есть советы по более плавному изменению размера формы?
Как сделать так, чтобы форма менялась более плавно?
Ответы (5)
Попробуйте использовать WM_SETREDRAW (не LockWindowUpdate < / а>).
Вы также можете ознакомиться с DeferWindowPos.
DeferWindowPos()
стоит протестировать для ручного размещения в OnResize
обработчике.
- person mghie; 21.09.2009
Сложные формы часто состоят из вложенных панелей, и процесс перерисовки может вызвать мерцание. Если это так с вашим проектом, есть два простых решения, которые могут помочь:
- Отключите свойство
FullRepaint
на своих панелях. - Включите свойство
DoubleBuffered
в вашей форме. Вы не найдете это свойство в инспекторе объектов, поэтому поместитеDoubleBuffered := true;
в FormCreate.
DoubleBuffered
обменивает меньшее мерцание на более медленную скорость обновления, эффект, который может быть заметен на больших экранах, где изменение размера может стать скачкообразным с большими размерами окон.
- person mghie; 21.09.2009
Я обошел это следующим образом:
- В событии OnResize формы создайте процедуру, чтобы скрыть все дочерние элементы управления, а затем запустить таймер с тиком около 500 мс.
- Когда сработает таймер, отключите его, а затем установите все дочерние элементы управления как видимые.
Играя с этим заданием, вы получаете форму, которая становится пустой, пока вы ее масштабируете, но затем аккуратно заполняется, когда вы «отпускаете».
Bri
Я избегаю мерцания, выравнивая не более 1 компонента, отличного от alClient
, на одного родителя, всегда в паре с alClient
(например, TPanel
), чтобы содержать все остальные компоненты. Сгруппируйте их в панели без границ.
Допустим, вы хотите совместить три элемента: alLeft
, alTop
и alClient
для основного представления. Не делай этого:
Form
alTop
alLeft
alClient // your main view
Но вместо этого вставьте их следующим образом:
Form
alTop
alClient // panel to avoid flicker
alLeft
alClient // your main view
Та же история для встраивания нескольких alTop
элементов.