Imagelists are really a straightforward concept, so don't worry about them so much . In short, they let you store many bitmaps/icons/whatever that are the same size in what amounts to an array. If my memory is correct then the imagelists will be stored within your exe file, so you don't have to supply those bitmaps with your project once they've been added (which can be handy to reduce clutter). Assuming I'm remembering correctly, that is.

The important part of an imagelist is its "GetBitmap" method. You create a TBitmap, set its size, use GetBitmap and then do whatever you want. Here's a quick example nabbed directly from one of my very old projects:

[pascal]procedure TForm1.DrawImage;
var
Bmp: TBitmap;
begin
Bmp := TBitmap.Create;
try
Bmp.Width := 16; // whatever size your pics are
Bmp.Height := 16;
ImageList1.GetBitmap(SomeIndex, Bmp); // get the bitmap from ilist
Canvas.StretchDraw(ClientRect, Bmp); // draw bmp however you want
finally
Bmp.Free; // free everything you create
end;
end;[/pascal]

Where SomeIndex is a number from 0 to the amount of images in the imagelist - 1 (just a zero based array value, in other words).

Basically, imagelists are a way to make your program "cleaner" -- you'll end up having less files (maybe just an exe file) to hand to other people, which makes things less of a hassle for the end user.

Now the AI -- you can be worried about that . :roll:

EDIT: Actually, I don't think you even need to set the bitmap's width and height beforehand.