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

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

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
old lightbulb joke (how many ....s does it take to{*word*222}in a lightbulb?


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