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 … メッセージをウィンドウプロシージャに送る