« ☆DBGridのDrawCell | トップページ | ☆TRichEditでハイパーリンク »

☆AnimateWindowを使う。

よくあるタスクトレイの上から「にゅーっ」と現れて、「にゅーっ」と消えていくフォームのサンプルです。
未だVISTAではなくXPがメインの私は、UIのデザインセンスもきっと古いんでしょうね(笑)

メインフォーム
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Form2.Close;
end;

end.



サブフォーム(このフォームが現れたり、消えたりします。)
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons;

type
  TForm2 = class(TForm)
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
    procedure WMNCHitTest(var message: TWMNCHitTest); message WM_NCHitTest;
  public
    { Public 宣言 }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

uses
  ShellAPI;

procedure TForm2.WMNCHitTest(var message: TWMNCHitTest);
begin
  inherited;
  // キャプションバー上のマウス操作を無効にします。
  // フォームを移動させないため
  if message.Result = HTCaption then
    message.Result := 0;
end;


procedure TForm2.FormCreate(Sender: TObject);
begin
  BorderStyle := bsToolWindow;
end;

procedure TForm2.FormShow(Sender: TObject);

  function GetTaskBarPos: TRect;
  var
    apbData : TAPPBARDATA;
  begin
    apbData.cbSize := SizeOf(TAPPBARDATA);
    SHAppBarMessage(ABM_GETTASKBARPOS, apbData);
    with Result do
    begin
      Left   := apbData.rc.Left;
      Right  := apbData.rc.Right;
      Top    := apbData.rc.Top;
      Bottom := apbData.rc.Bottom;
    end;
  end;

var
  Rect: TRect;
  I: Integer;
begin
  Rect := GetTaskBarPos;

  // タスクバーの高さ
  if (Rect.Top <> 0) then
    I := Rect.Bottom-Rect.Top
  else
    I := 0;

  // フォームの表示位置を設定します。
  Left := Screen.Width - Width;
  Top  := Screen.Height - Height -I;

  // ぼわーんと表示する場合
  //AnimateWindow(WindowHandle, 1000, AW_ACTIVATE + AW_BLEND);

  // 下からにゅーと表示する場合
  AnimateWindow(Handle,1000, AW_SLIDE + AW_VER_NEGATIVE);
end;

procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  // ぼわーんと終了させる場合
  //AnimateWindow(WindowHandle,1000, AW_HIDE + AW_BLEND);

  // 下からにゅーと終了させる場合
  AnimateWindow(Handle,1000, AW_HIDE + AW_SLIDE + AW_VER_POSITIVE);
end;

end.




MSDN
AnimateWindow
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_animatewindow.asp

|

« ☆DBGridのDrawCell | トップページ | ☆TRichEditでハイパーリンク »