It's OK I found a much easier solution... Blitted from the primary to the back buffer.

The only thing I need to know now is how to form an efficient loop...

Where is the best place to launch the loop from? App.OnIdle? Can I optimize the message processing bit of the application? I need to capture keystrokes still, allow paint messages, and I am using Indy TCP/IP components. Any advice? I am getting 30 fps at the moment.

EDIT: One important problem... When you use the scroll bar of the TRichEdit it halts the processing of the loop... Can I get around this?