Ich möchte Ihr Augenmerk an dieser Stelle speziell auf einen Punkt lenken (der Rest der Programmlogik kann anhand der ausführlich kommentierten Demo nachvollzogen werden)
// return the message result explicitly, otherwise we would not // receive DL_DRAGGING SetWindowLong(hDlg, DWL_MSGRESULT, Integer(TRUE));
// message handled Result := True;
Wie der Kommentar schon sagt, ist es wichtig, dass wir dem System mitteilen, dass wir die "DL_BEGINDRAG"-Nachricht behandelt haben. Täten wir dies nicht, würde uns Windows keine "DL_DRAGGING"-Nachrichten schicken, weil es nicht weiß, ob der "Zieh"-Vorgang begonnen hat oder nicht. Und im Zweifelsfall bleibt Windows eben stumm. Sicher ist sicher.
Da ich auch hier wieder aus Bequemlichkeit zu einer Dialogressource gegriffen habe, erfolgt die Benachrichtigung durch den Aufruf der Funktion "SetWindowLong" mit dem Index-Parameter DWL_MSGRESULT. Das PSDK bemerkt dazu (frei übersetzt):