I do not know any restrictions on the size of the images that a TImageList can hold. It seems to me that your problem is that you have icons of different sizes, and you cannot keep icons of different sizes in the same list of images.
If you work with icons of different sizes, you will need to grow smaller ones. You will need to create it in code using a bitmap. You fill the bitmap with a clear, transparent alpha channel, and then add a smaller icon to the center of the bitmap.
Another option would be to maintain two separate image lists, but if you need to draw icons in the same list view, I think this will not be done. I assume that you will need to grow small icons.
For alpha, you will need to create an image list descriptor yourself, because the ColorDepth property does not exist in D7. Because of this, the D7 vanilla TImageList simply cannot support alpha badges.
You bypass this limitation by calling ImageList_Create , passing ILC_COLOR32 and assigning the result to ImageList.Handle . Do this before adding any images. You will need to populate the list at runtime, not development time, but it looks like you are already doing this.
Here is a screenshot of a 48x48 tool button with a 32-bit alpha transparency icon:

It is true that I did this in D2010, but my workaround would work for D7 - I used this mechanism until recently with D6. I just show this to prove that there may be 48px icons in the image list. Since the TImageList is just a wrapper around the component of the list of system images, I believe that what you are trying should be perfectly feasible.
source share