В этом уроке я расскажу вам о функции перемещения оконных элементов управления
Оконные компоненты во время выполнения приложения можно перемещать не используя технологию drag-and-drop. Мы будем использовать связанное с нажатием кнопки мыши событие OnMouseDown.
Расположим на форме компонент Memo. И напишем код обработчика этого компонента OnMouseDown как показано ниже.

Код:
procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Button <> mbLeft then exit;
 ReleaseCapture;
 Memo1.Perform(WM_SYSCOMMAND,$F012,0);
end;

Первоначально мы должны проверить нажата ли левая клавиша мыши? И если нет то выйти из процедуры. При утвердительном ответе вызывается API-функция ReleaseCapture, она обеспечивает компоненту получение потока сообщений связанных с мышью. Конкретно перемещение компонента Memo1 выполняет метод Perform, используя посылку системного сообщения с кодом $F012.

Если нам необходимо чтобы несколько оконных элементов могли быть перенесены, то возможно сделать общую процедуру и вызывать ее посредством метода OnMouseDown.
Разместим на форме компоненты Edit и Memo. Добавим строку процедуры в разделе interface (выделенная строка).

Код:
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Memo1: TMemo;
    procedure MoveWindControl(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

Далее в разделе implementation запишем код данной процедуры.

Код:
procedure TForm1.MoveWindControl(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button <> mbLeft then exit;
  ReleaseCapture;
  (Sender as TWinControl).Perform(WM_SysCommand, $F012,0)
end;

В инспекторе объектов добавляем ранее записанную процедуру для наших компонентов (компонент Edit и Memo), как показано на рисунке через Инспектор Объектов.

http://s1.uploads.ru/t/aQbem.jpg

Итог: мы ознакомились на практике с перетаскиванием оконных компонентов.