5

パネル (下揃え) といくつかのコントロール (クライアント揃え) があります。

私が使用するパネルをアニメーション化するには:

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

私の場合、パネルはスムーズに非表示になり、他のコントロールがそのスペースを占有します。

しかし、他のコントロールがスムーズに、同時にパネルが下に移動することを望んでいます。

たとえば、FireFox はこの効果を使用します。

誰かが私に何か役に立つことを提案できますか? ありがとう!

4

2 に答える 2

2

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;
于 2011-12-25T03:29:55.553 に答える