Delphi: AnimateWindow, как в FireFox - PullRequest
       25

Delphi: AnimateWindow, как в FireFox

5 голосов
/ 24 декабря 2011

У меня есть панель (выровненная снизу) и некоторые элементы управления (выровненные по клиенту).

Для анимации панели я использую:

AnimateWindow(Panel.Handle, 1000, aw_hide or AW_SLIDE OR AW_VER_POSITIVE);
panel.Visible:=false;

В моем случае панель плавно скрывается и толькотогда другие элементы управления занимают место.

Но я хочу, чтобы другие элементы управления двигались плавно и одновременно с панелью вниз.

Например, FireFox использует этот эффект.

Может кто-нибудьпредложить мне что-нибудь полезное?Спасибо!

Ответы [ 2 ]

2 голосов
/ 25 декабря 2011

AnimateWindow - синхронная функция, она не вернется, пока анимация не закончится. Это означает, что в течение времени, указанного в параметре dwTime, код выравнивания не будет выполняться, а выровненные элементы управления 'alClient' будут оставаться на месте до завершения анимации.

Я бы предложил вместо этого использовать таймер. Просто пример:

type
  TForm1 = class(TForm)
    ..
  private
    FPanelHeight: Integer;
    FPanelVisible: Boolean;
..

procedure TForm1.FormCreate(Sender: TObject);
begin
  FPanelHeight := Panel1.Height;
  Timer1.Enabled := False;
  Timer1.Interval := 10;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := True;
  FPanelVisible := not FPanelVisible;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
const
  Diff: array [Boolean] of Integer = (-1, 1);
begin
  Panel1.Height := Panel1.Height - Diff[FPanelVisible];
  Panel1.Visible := Panel1.Height > 0;
  Timer1.Enabled := (Panel1.Height > 0) and (Panel1.Height < FPanelHeight);
end;
0 голосов
/ 11 декабря 2014

Удалить вторую строку

AnimateWindow(Panel.Handle, 1000, aw_hide or AW_SLIDE OR AW_VER_POSITIVE);
panel.Visible:=false;

и оставить только

 AnimateWindow(Panel.Handle, 1000, aw_hide or AW_SLIDE OR AW_VER_POSITIVE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...