Преамбулаобщением с панелью задач занимается процедурина из Windows API, именуемая 
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
    DWORD dwMessage,	// идентификатор сообщения
    PNOTIFYICONDATA pnid	// указатель на структуру данных
   );
  Параметры
dwMessage - идентификатор сообщения, принимает следующие значения:
NIM_ADD   добавляет иконку
NIM_DELETE   убирает иконку
NIM_MODIFY   чтобы вы думали?! - модифицирует иконку
pnid указатель на структуру NOTIFYICONDATA, содержание которой зависит от значения dwMessage. 
смотрим на саму структуру:
typedef struct _NOTIFYICONDATA { // nid  
    DWORD cbSize; 
    HWND hWnd; 
    UINT uID; 
    UINT uFlags; 
    UINT uCallbackMessage; 
    HICON hIcon; 
    char szTip[64]; 
} NOTIFYICONDATA, *PNOTIFYICONDATA;   Поля записи:
cbSize - размер структуры NOTIFYICONDATA
hWnd - Handle окна, которое будет получать сообщения от иконки в таскбаре
uID - идентификатор иконки, определяется программой и в рамках одной программы должен быть уникальным (если иконок много)
uFlags - набор флагов, показывающий, какие поля были заданы. является комбинацией (читай - суммой) следующих значений: 
NIF_ICON   передан дескриптор иконки
NIF_MESSAGE   назначена callback-функция
NIF_TIP   назначена подсказка 
uCallbackMessage - это код сообщения, которое будет отсылаться форме, (той самой, Handle которой мы указали в hWnd), каждый раз, когда кто-то что-то делает на нашей иконке. 
hIcon - дескриптор иконки
szTip - текстовая подсказка. появляется, если задержать мышу над иконкой.
Амбуламожет, я дурак, но задача оказалось нетривиальной. заставить кэпшн пропадать с таскбара при появлении иконки и наоборот прятать иконку при выводе кэпшена - без извращений не вышло.
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ShellApi, AppEvnts;
const
  IconId: integer = 100;
  WM_ICON = WM_APP + 100;
type
  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ApplicationEvents1Minimize(Sender: TObject);
  private
    { Private declarations }
  protected
    procedure IconMessage (var Msg: TMessage); message WM_ICON;
  public
    NIC: TNotifyIconData;
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  NIC.cbSize := SizeOf (TNotifyIconData);
  NIC.Wnd := Handle;
  NIC.uID := IconId;
  NIC.uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP;
  NIC.hIcon := Application.Icon.Handle;
  NIC.uCallbackMessage := WM_ICON;
  Shell_NotifyIcon (NIM_ADD, @NIC);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
  Shell_NotifyIcon (NIM_DELETE, @NIC);
end;
procedure TForm1.IconMessage(var Msg: TMessage);
begin
  if Msg.LParam = 514 then begin
    Shell_NotifyIcon (NIM_DELETE, @NIC);
    Form1.Show;
    Application.Restore;
    Application.BringToFront;
  end;
  Msg.Result := 0;
end;
procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
  Shell_NotifyIcon (NIM_ADD, @NIC);
  Form1.Hide;
end;
end.