You might want to investigate the "DoubleBuffered" property - just put the following line of code into your form's OnCreate event:

[pascal]DoubleBuffered := True;[/pascal]

If you do that then you get the best effect by doing your drawing in the relevant OnPaint procedure. You could use a timer set to refresh the relevant object (the form, a paintbox, or whatever you're drawing onto). Check out the Repaint, Refresh and Invalidate methods...

(Side note: TTimer ain't too accurate, but it'll do for a start.)

Now, getting sprites is pretty straightforward - you don't need to mask out the objects manually. Instead, you can just load up the object into a TBitmap and set the Transparent property to true (and maybe the TransparentColor beforehand, if you want). This means that the sprite will be drawn transparently if you use the Draw method for the relevant canvas (e.g. Canvas.Draw for your form or Paintbox1.Canvas.Draw if you're using a paintbox - you get the idea).

I'll send you an email with source for a very basic example of this. As a side don't - don't expect brilliant speed using bog-standard Windows drawing, but I guess you wouldn't expect that anyway. Once you want to get better results, look to something else like DirectX, OpenGL or Direct3D.

EDIT: or at least, I'll send you a basic example once I get your email address. Doh!