Al final lo he solucionado
Pego a continuación el código, por si a alguien le sirve. Hace falta un ImageList vacío y hay que asignar ese ImageList al componente(es) que queremos que tenga las imágenes. No olvidéis meter en uses CommCtrl y Consts, que si no, se quejará amargamente.
Código Delphi
[-]procedure TForm1.ConvertTo32BitImageList(ImageList: TImageList);
const
Mask: array[Boolean] of Longint = (0, ILC_MASK);
var
TempList: TImageList;
begin
if Assigned(ImageList) then begin
TempList := TImageList.Create(nil);
try
TempList.Assign(ImageList);
with ImageList do begin
Handle := ImageList_Create(Width, Height, ILC_COLOR32 or Mask[Masked],
0, AllocBy);
if not HandleAllocated then
raise EInvalidOperation.Create(SInvalidImageList);
end;
Imagelist.AddImages(TempList);
finally
FreeAndNil(TempList);
end;
end;
end;
...y así se usa (lo he metido en el evento OnClick de un Button, para probarlo, pero iría, por ejemplo, en el FormCreate):
Código Delphi
[-]procedure TForm1.Button1Click(Sender: TObject);
var
Ico: TIcon;
begin
Ico := TIcon.Create;
try
ConvertTo32BitImageList(ImageList1);
Ico.LoadFromFile('icono.ico');
ImageList1.AddIcon(Ico);
Ico.LoadFromFile('otroicono.ico');
ImageList1.AddIcon(Ico);
finally
Ico.Free;
end;
Según he averiguado, es un viejo problema del ImageList y sólo se soluciona como he hecho más arriba: cargando en tiempo de ejecución las imágenes en el ImageList a trabés de un TIcon (porque los TIcon mantienen el canal alfa de las imágenes) y luego pasándoselas a nuestro ImageList, que está enlazado a los componentes.
Pues eso, que funciona perfectamente... pero hay un problemilla que estoy tratando de solucionar ahora mismo: no me funciona con imágenes mayores de 32x32, me da un error de tamaño incompatible. He trazado el programa y el error aparece cuando se trata de cargar la imagen de 48x48 en el TIcon. He tratado de cambiarle el Height y el Width tras crearlo, pero ni caso... También he estado investigando a ver si puedo especificar el tamaño del TIcon en el mismo constructor, pero no hay manera.
En fin, si alguien se anima a echarle un vistazo, se lo agradeceré