Delphiでパネルをドラッグ移動

先輩のコードを見たら、なにやら複雑な実現をしていたので共有しておく。
随分前なので確かではないが、元はこちらを参考にさせていただいた(と思う)。

//下をパネルのOnMouseDownイベントに記述

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    SetCapture(Self.Handle);
    ReleaseCapture;
    SendMessage(Panel1.Handle, WM_SYSCOMMAND, SC_MOVE or 2, 0);
end;

// ※SetCaptureの行をコメントアウトしても動くが、違いがあるのかは分からない


uses宣言に最低限必要なのは下の6つ。

Windows, Messages, ExtCtrls, Forms, Controls, Classes;

ExtCtrlsはコード記述後に実行すればDelphi側で記述してくれる。
他はフォームの新規作成時に標準で記述されている。


APIコールの意味は以下(こちらから抜粋)。
SetCapture … マウスキャプチャをウィンドウに設定
ReleaseCapture … マウスのキャプチャを解放
SendMessage … メッセージをウィンドウプロシージャに送る