Yo no entiendo a qué te refieres con "mover sólo verticalmente
sin superar los límites del mismo" De hecho tampoco entiendo para qué podrías querer un formulario que ocupe más que el escritorio; quizá si nos explicas más acerca de lo que quieres hacer podríamos ayudarte mejor.
De todas maneras, creo que te puedo ayudar en la parte de mover el formulario sólo verticalmente:
Código Delphi
[-]
TForm1 = class(TForm)
private
procedure WMMoving(var Message: TWMMoving); message WM_MOVING;
...
end;
...
procedure TForm1.procedure WMMoving(var Message: TWMMoving); message WM_MOVING;
begin
Message.DragRect.Left := Left;
Message.DragRect.Right := Message.DragRect.Left + Width;
end;
Con esto, el formulario se mantendrá siempre en la posición horizontal inicial.
// Saludos