Как сделать изменение размера формы более плавным?
Вопрос
При изменении размера формы с большим количеством элементов управления форма выглядит плохо из-за мерцания.Какие советы помогут сделать изменение размера формы более плавным?
Решение
procedure TForm1.WMEnterSizeMove(var Message:TWMMove);
begin
Self.DisableAlign;
end;
procedure TForm1.WMExitSizeMove(var Message:TWMMove);
begin
Self.EnableAlign;
end;
Другие советы
Попробуйте использовать WM_SETREDRAW (нет БлокированиеWindowUpdate).
Вы также можете посмотреть Отложить окноPos.
Сложные формы часто состоят из вложенных панелей, и процесс перерисовки может вызвать мерцание.Если это относится к вашему проекту, есть два простых решения, которые мощь помощь:
- Отключить свойство
FullRepaint
на ваших панелях. - Включить свойство
DoubleBuffered
в вашей форме.Вы не найдете это свойство в инспекторе объектов, поэтому поместитеDoubleBuffered := true;
в ФормеСоздать.
Я обошел это следующим образом:
- В событии формы «OnResize» необходимо скрыть все дочерние элементы управления, а затем запустить таймер с тактом около 500 мс.
- Когда таймер сработает, отключите его, а затем сделайте все дочерние элементы управления видимыми.
Поэкспериментировав с этим действием, вы получите форму, которая становится пустой, пока вы ее изменяете, но затем аккуратно заполняется, когда вы ее отпускаете.
Бри
Я избегаю мерцания, выравнивая не более 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
элементы.