machst du es genauso wie larsi geschrieben hat? (also nur bewegen, wenn Shift-taste gedrückt ist)
oder per Mousedown/MouseUp?
bei ersterem wird es schwierig, den Ablegezeitpunkt zu ermitteln (timer u.ä. wäre in meinen Augen zu sehr gebastelt).
man könnte es evtl. noch mit onKeyUp probieren und beim loslassen der shift-taste die aktuelle position prüfen und ggf. an die alte (vor dem verschieben gesicherte) Position zurücksetzen.
MouseDown/MouseUp (egal ob mit ht-Caption,WM_SYSCOMMAND+$F012 oder manuell) finde ich eleganter und intuitiver, dort prüfst du einfach beim MouseUp und setzt wie oben bei nicht erlaubter position auf die alte zurück.
zu der Frage mit dem $F012 und WM_SYSCOMMAND (welche ich für ungünstig halte, da man nicht gleich sieht, was man da eigentlich mit der Sendmessage bezwecken will)...
schau mal da ist das ganz gut erklärt:
http://support.microsoft.com/kb/114593
Gruß Frank