First off I had problems with the TBitmap canvas when I was doing bitmap tile manipulation stuff using the GDI, a quick fix,.. use the TImage component instead For some reason it doesn't flicker (is it using double buffering behind its public interface? i don't know )

Double buffering is, as you implemented, where instead of drawing to the bitmap you can see, you draw to an offscreen surface, then copy this to the on screen bitmap, this reduces flicker. The copying from the back buffer to the on screen surface is called Page Flipping.

As for point 1), you were probably implementing it correctly, but not copying to the display in synch with the vertical refresh(which is the main cause of flickery displays).

With DirectX the page flipping is done for you and VSynched to prevent flicker. But using GDI, you may be better off using the TImage component