TScrollBox - screwy Implementation // HELP!!!

First, some background...

I have been working on an application which allows users to create
flowcharts by dragging components off of a toolbar and dropping them onto a
"page" (a TScrollBox descendant).  The user can then connect objects via a
drag and drop implementation.  The scrollbox gives the user a simple
panning capability.  Pretty straightforeward implementation, The  
flowchart elements are defined as TGraphicControl descendants, etc - Simply
stream the components to/from disk to save/restore objects.  My goal here
was to leverage the VCL as much as possible, and it has worked out well so
far.

But, as always, there's a catch.  I found that when I added more than ten
or so items to the screen, I got a large amount of flicker when 'panning
around' the drawing.  Mind you, this is on a Pentium-133 with 32 MB of RAM,
so I knew this would be intolerable on a slower box.  Additionally, when I
had 'panned' to the lower right corner of the drawing, the coordinates
seemed to be offset.

So, I decided to delve into the VCL to see what was happening behind the
scenes.  I had assumed that the scroll box was implemented using a fixed
virtual window with a moving viewport - I've implemented small apps this
way using C and the SDK.  Here's what I discovered:

The TScrollBox is a descendant of TScrollingWinControl, which is a
descendant of TWinControl.  TForm is a sibling of TScrollBox.  No surprises
here.

But wait...Looking at the implementation of TScrollingWinControl, I didn't
see references to SetViewportOrgEx or SetViewportExtEx - For that matter,
there were no coordinate mapping routines being called at all.  Then the
realization hit me... <NO.  COULDN'T BE.  BORLAND WOULDNT....>

They did.  

TScrollingWinControl performs scrolling by EXPLICITLY Changing THE TOP AND
LEFT PROPERTY OF EVERY CHILD CONTROL OF THE TSCROLLBOX.  This is like the
old lightbulb joke (how many ....s does it take to{*word*222}in a lightbulb?
..)

Hmmm.

I suppose this works OK for a typical form, where the scrollbox contains a
couple of buttons or other VCL controls, but for my implementation it
simply wont cut it.

(IMHO, This is a hack.  A poor one at that.  It works, but I dont think it
could be any less efficient.)

Has anyone else out there done any drawing package work with Delphi?  Know
of any 3rd party solutions that might help here?  I could write this stuff
if need be, but would rather not!

Steve Davidson