Bill,
I saved off the following message from back in February 2000 in the newsgroups, just in case I was ever "foolish" enough to try a scrolling form. I don't know if any of the problems described were resolved since then, but here it is, for what it's worth.
Rick
"As Mike said, the useable height of the form is limited to about 1150 pixels (I've found this to be 1173 pixels).
Once you place objects further down than 1173 pixels from the top of the form (ie the object's top property is > 1173), you run into the sort of problems you described.
I haven't experimented with how far to the right you can get away with placing objects, since all my form objects are no further than 816 pixels from the left of the form.
Objects do not automatically come in to view when they receive the focus (ie the form doesn't automatically scroll to bring the object into the form's viewport).
This requires a little work, but not much. Subclass all the controls you intend to use in your scrollable form. In the When or Gotfocus events of the subclassed controls, place the follwing code (adjusted to your needs):
*<Begin code>
LOCAL lnVPTop,lnVPHeight,lnVPLeft,lnNewTop,lgAdjTop,lgAdjLeft,lnNewLeft
lnVPTop=ThisForm.ViewPortTop
lnVPHeight=ThisForm.ViewPortHeight-16 && takes into account form's title bar
lnVPLeft=ThisForm.ViewPortLeft
lnNewTop=lnVPTop
lnNewLeft=lnVPLeft
IF (20+This.Top)>(lnVPTop+lnVPHeight)
lnNewTop=lnVPTop+(20+This.Top)-(lnVPTop+lnVPHeight)
lgAdjTop=.T.
ENDIF
IF This.Top<lnVPTop
lnNewTop=This.Top
lgAdjTop=.T.
ENDIF
IF This.Left<lnVPLeft
lnNewLeft=This.Left
lgAdjLeft=.T.
ENDIF
IF lgAdjLeft OR lgAdjTop
ThisForm.SetViewPort(lnNewLeft,lnNewTop)
ENDIF
*<End Code>
This is a "basic" approach. For option groups, command groups, grids it would be better to ensure that the whole container control is visible.
The '20' constant can be substituted with the control's height. (I used this for large editboxes which were taller than the form's viewportheight)."