Przesuwanie myszą komponentów

Aby można było podczas działania programu przesuwać komponent po formularzu np. Panel lub Button (nie dla wszystkich to działa) tworzymy zdarzanie OnMouseDown dla tego komponentu, w którym wywołujemy funkcję Windows API ReleaseCapture(), która "uwalnia" myszę od wykonywania bieżącego zadania, a następnie za pomocą kolejnej funkcji Windows API SendMessage() wysyłamy wiadomość, która pozwoli nam przesuwać komponent:

Unit1.cpp

void __fastcall TForm1::Button1MouseDown(TObject *Sender, TMouseButton Button,
                                         TShiftState Shift, int X, int Y)
{
   ReleaseCapture();
   SendMessage(Button1->Handle, WM_SYSCOMMAND, 0xF012, 0);
}