Schau Dir einfach mal die Hilfe zu ReleaseCapture, TWinControl.Perform und WM_SYSCOMMAND an, dann sollte so einiges klarer sein.
Aus Sicht des Buttons sieht´s so aus:
- Ich vergesse das ich gerade runtergedrückt wurde, schliesslich will ich mich wenn schon dann aufrecht bewegen. (Ein niedergedrückter Button wartet erstmal darauf wieder losgelassen zu werden und wäre also nicht in der Lage die folgende Botschaft zu verarbeiten.)
- Ich schicke mir selber ne Nachricht ans eigene Fenster um mich in den Modus "Bewegen durch Drag-Operation" zu bringen. Perform ist halt einfach die schnellste Variant, ein PostMessage würde es aber auch tun.
Die hier als SC_DRAGMOVE deklarierte Konstante entspricht dem WParam-Wert der WM_SYSCOMMAND-Botschaft die versendet wird wenn ein Fenster per Drag&Drop verschoben werden sollen.
Irgendjemand hat die mal SC_DRAGMOVE genannt, das hat sich durchgesetzt. Der Wert entspricht SC_MOVE + 2 und ist leider nicht in der Win-API dokumentiert, läst sich aber mit WinSight leicht ermitteln.
MfG,
Tryer