unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    chkEnableAlpha: TCheckBox;
    GroupBox1: TGroupBox;
    tbAlpha: TTrackBar;
    lblCurAlpha: TLabel;
    GroupBox2: TGroupBox;
    cmbHideAndShow: TButton;
    Timer1: TTimer;
    procedure chkEnableAlphaClick(Sender: TObject);
    procedure tbAlphaChange(Sender: TObject);
    procedure cmbHideAndShowClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  isInc: Boolean;  //Если True, то значение AlphaBlend формы увеличивается,
                   //если False, то уменьшается (форма скрывается)

{$R *.dfm}

procedure TForm1.chkEnableAlphaClick(Sender: TObject);
begin
  AlphaBlendValue := tbAlpha.Position;
  AlphaBlend := chkEnableAlpha.Checked;
end;

procedure TForm1.tbAlphaChange(Sender: TObject);
var
  pos, perc: Integer;
begin
  pos := tbAlpha.Position;
  //Новое значение прозрачности
  AlphaBlendValue := pos;
  //Обновим подпись по ползунком
  perc := pos * 100 div 255;
  lblCurAlpha.Caption := IntToStr(pos) + ' из 255 (' + IntToStr(perc) + '%)';
end;

procedure TForm1.cmbHideAndShowClick(Sender: TObject);
var
  a: Integer;
begin
  if AlphaBlend then chkEnableAlpha.Checked := False;
  //Включаем прозрачность (подготовка к плавному скрытию)
  AlphaBlendValue := 255;
  AlphaBlend := True;
  Refresh;

  //Запускаем процесс скрытия формы
  isInc := False;
  Timer1.Enabled := True;

  cmbHideAndShow.Enabled := False;
  tbAlpha.Enabled := False;
  chkEnableAlpha.Enabled := False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var val: Integer;
begin
  if not isInc then
  begin
    //"Растворение" окна
    val := AlphaBlendValue;
    Dec(val, 10);
    if val <= 0 then
    begin
      //Окно полностью прозрачно
      val := 0;
      isInc := True;
    end
  end
  else begin
    //Появление окна
    val := AlphaBlendValue;
    Inc(val, 10);
    if val >= 255 then
    begin
      //Окно полностью непрозрачно
      val := 255;
      Timer1.Enabled := False; //Процесс закончен
      AlphaBlend := False;

      cmbHideAndShow.Enabled := True;
      tbAlpha.Enabled := True;
      chkEnableAlpha.Enabled := True;
    end
  end;
  AlphaBlendValue := val;
end;

end.
