Как я могу сделать так, чтобы моя форма изменяла размер более плавно? - PullRequest
20 голосов
/ 21 сентября 2009

При изменении размера формы со многими элементами управления форма выглядит плохо из-за мерцания. Какие советы помогут сделать изменение размера формы более плавным?

Ответы [ 5 ]

16 голосов
/ 21 сентября 2009
procedure TForm1.WMEnterSizeMove(var Message:TWMMove);
begin
  Self.DisableAlign;
end;

procedure TForm1.WMExitSizeMove(var Message:TWMMove);
begin
  Self.EnableAlign;
end;
5 голосов
/ 21 сентября 2009

Сложные формы часто состоят из вложенных панелей, и процесс перекраски может вызвать мерцание. Если это касается вашего проекта, есть два простых решения, которые могут помочь:

  1. Отключить свойство FullRepaint на ваших панелях.
  2. Включите свойство DoubleBuffered в вашей форме. Вы не найдете это свойство в инспекторе объектов, поэтому поместите DoubleBuffered := true; в FormCreate.
5 голосов
/ 21 сентября 2009

Попробуйте использовать WM_SETREDRAW ( не LockWindowUpdate ).

Вы также можете взглянуть на DeferWindowPos .

1 голос
/ 21 сентября 2009

Я обошел это следующим образом:

  1. В событии 'OnResize' формы есть подпрограмма, чтобы скрыть все дочерние элементы управления, а затем запустить таймер с отметкой около 500 мс.
  2. Когда таймер срабатывает, отключите его, а затем установите все дочерние элементы управления на видимые.

Играя с этим заданием, вы получаете форму, которая становится пустой, пока вы ее измеряете, но затем аккуратно заполняется, когда вы «отпускаете».

Bri

0 голосов
/ 23 сентября 2015

Я избегаю мерцания, выравнивая не более 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 элементов.

...