What I do is

(sorry is a bit messy but I am sure you can work it out from here). I do not set the alwaysontop. I leave it as is.

Code:
//On Reactivate or on show whatever you like
var hTaskBar : THandle;

hTaskbar  := FindWindow( 'Shell_TrayWnd', Nil );

ShowWindow(hTaskBar, SW_HIDE);

//On deactivate
 
procedure TMainForm.Deactivate(Sender: TObject);
var hTaskBar : THandle;
begin     
  hTaskbar  := FindWindow( 'Shell_TrayWnd', Nil );
  ShowWindow(hTaskBar, SW_NORMAL);
end;

// On create I set up the following
    procedure Deactivate(Sender: TObject);
    procedure Reactivate(Sender: TObject);

 Application.OnDeactivate := Deactivate;
 Application.Onactivate   := Reactivate;