function Ico2Bmp( Icone: TIcon ): TBitmap;
var
  IconInfo: TIconInfo;
begin
  GetIconInfo( Icone.Handle, IconInfo );
  Result := TBitmap.Create;
  with Result do
    begin
      PixelFormat := pfDevice;
      Width := ( IconInfo.xHotspot * 2 );
      Height := ( IconInfo.yHotspot * 2 );
      Transparent := True;
      TransparentMode := tmAuto;
      Canvas.StretchDraw( Rect( 0, 0, Width, Height ), Icone );
    end;
end;

function Bmp2Ico( Bitmap: TBitmap ): TIcon;
var
  IconInfo: TIconInfo;
begin
  IconInfo.fIcon := true;
  IconInfo.xHotspot := Bitmap.Width;
  IconInfo.yHotspot := Bitmap.Height;
  IconInfo.hbmColor := Bitmap.Handle;
  IconInfo.hbmMask := Bitmap.MaskHandle;
  Result := TIcon.Create;
  with Result do
    Handle := CreateIconIndirect( IconInfo );
end;