簡単に言うと、移動コードでこれを行う必要があります。
- マウスが下がったら、マウスの位置がドラッグ可能なコントロールの上にあるかどうかを確認します。
FDragControl
その場合は、そのコントロールを参照する名前の変数を設定します。このコードは、OnMouseDown
イベント ハンドラー内にあります。
- マウスが移動したとき、
FDragControl
が nil でない場合、コントロールを移動します。このコードは、OnMouseMove
イベント ハンドラー内にあります。
- マウスが上がると、
FDragControl
nil に設定します。
それだけです。主なニュアンスは、ドラッグが開始されたときのマウスの X、Y 値も覚えておく必要があるということです。したがって、OnMouseDown
ハンドラーで次のように記述します。
FStartMousePos := Point(X, Y);
FStartDragControlPos := Point(FDragControl.Left, FDragControl.Top);
そして、OnMouseMove
あなたの位置コードは次のようになります。
FDragControl.Left := FStartDragControlPos.X + (X-FStartX);
FDragControl.Top := FStartDragControlPos.Y + (Y-FStartY);
また、ドラッグを開始するときにマウスをキャプチャする必要があります。
サイズ変更コードも同様です。繰り返しますがOnMouseDown
、ドラッグするのではなくサイズを変更することを で決定する必要がありますが、コードにはマウス ダウン、移動、およびアップ イベントの処理が含まれます。
ペイントに関しては、イベント ハンドラーの 1 つがフォームの外観に影響を与えるプロパティを変更するたびに、再ペイントを強制する必要があります。の値を使用してFDragControl
、コントロールの特別な描画を使用するかどうかを決定し、ドラッグ中であることを示すことができます。サイズ変更についても同様です。
あなたの質問は高レベルで概念的なものであるため、完全に機能する実装をコーディングしていません。実装はあなた次第です。