При изменении размера формы со многими элементами управления форма выглядит плохо из-за мерцания. Каковы некоторые советы по изменению размера сглаживания?
Как я могу изменить размер формы более плавно?
Ответ 1
procedure TForm1.WMEnterSizeMove(var Message:TWMMove);
begin
Self.DisableAlign;
end;
procedure TForm1.WMExitSizeMove(var Message:TWMMove);
begin
Self.EnableAlign;
end;
Ответ 2
Попробуйте использовать WM_SETREDRAW ( не LockWindowUpdate).
Вы также можете посмотреть DeferWindowPos.
Ответ 3
Сложные формы часто состоят из вложенных панелей, и процесс перекраски может вызвать мерцание. Если это имеет место в вашем проекте, есть два простых решения, которые могут помочь:
- Отключите свойство
FullRepaint
на ваших панелях. - Включить свойство
DoubleBuffered
в вашей форме. Вы не найдете это свойство в инспекторе объектов, поэтому поставьтеDoubleBuffered := true;
в FormCreate.
Ответ 4
У меня есть это:
- В событии 'OnResize' формы, есть подпрограмма, чтобы скрыть все дочерние элементы управления, а затем запустить таймер с тиком около 500 мс.
- Когда таймер срабатывает, отключите его, а затем установите все дочерние элементы управления на видимые.
Играя с этой деятельностью, вы получаете форму, которая пуста, пока вы ее определяете, но затем аккуратно заполняется, когда вы отпускаете.
Бри
Ответ 5
Я избегаю мерцания, выравнивая не более 1 не alClient
компонент на родителя, всегда в паре с alClient
(например, a TPanel
), чтобы содержать все остальные компоненты. Группируйте их в панели без границ.
Предположим, вы хотите выделить три вещи: alLeft
, alTop
и alClient
для основного вида.
Не делайте этого:
Form
alTop
alLeft
alClient // your main view
Вместо этого вставьте их следующим образом:
Form
alTop
alClient // panel to avoid flicker
alLeft
alClient // your main view
Такая же история для вложения нескольких элементов alTop
.