есть два варианта. вариант первый - 
type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    procedure WmHitTest (var Msg: TWMNCHITTEST); message WM_NCHITTEST;
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WmHitTest(var Msg: TWMNCHITTEST);
begin
  Msg.Result := HTCAPTION;
end;
это вариант хренов тем, что надо делать нормальный анализ места тыка (иначе у тебя не нажмётся ни одна кнопка на форме - всё это будет восприниматься как тыканье по Caption формы).
в этом плане я предпочитаю классический вариант: по нажатию кнопки мыщи запоминать координаты курсора, а при движении с нажатой кнопкой вычислять дельту и соотв. двигать форму. этот вариант также лучше и тем, что позволяет прикрутить это к любому кеомпоненту на форме.