画面上でフォームをドラッグ可能にしようとしています。つまり、フォームをつかんで画面上で移動できるようにしようとしています。透明で境界線はありませんが、画像は他のコントロールの背景として機能します。画像のイベントを使用して、フォームのドラッグを制御したいと考えています。どうやってやるの?
この TDragObject 引数を持つ DragEnter、DragLeave、DragStart メソッドを見つけましたが、わかりません。
誰か助けてくれませんか?
画面上でフォームをドラッグ可能にしようとしています。つまり、フォームをつかんで画面上で移動できるようにしようとしています。透明で境界線はありませんが、画像は他のコントロールの背景として機能します。画像のイベントを使用して、フォームのドラッグを制御したいと考えています。どうやってやるの?
この TDragObject 引数を持つ DragEnter、DragLeave、DragStart メソッドを見つけましたが、わかりません。
誰か助けてくれませんか?
基本的に手動で行う必要があります。
透明な画像 (TransImage) を含むフォームからのいくつかの Delphi/Windows コードを次に示します。境界線などはありません。イベントは画像のフォームにあるため、Top & Left は TMainScanForm.Top/Left を参照します。
これにより、画像イベントを使用してフォームがドラッグされ、クリックと移動が検出されます
...
// Mouse Drag Control
MouseDown: Boolean;
TopLeft,
MouseStart: TPoint;
...
procedure TMainScanForm.TransImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseDown := (Button = mbLeft);
if MouseDown then
begin
MouseStart.X := X;
MouseStart.Y := Y;
TopLeft := ClientToScreen(MouseStart);
TopLeft.X := TopLeft.X - X;
TopLeft.Y := TopLeft.Y - Y;
end;
end;
procedure TMainScanForm.TransImageMouseMove( Sender: TObject;
Shift: TShiftState;
X, Y: Integer);
var
NewPoint: TPoint;
begin
if MouseDown then
begin
NewPoint.X := X;
NewPoint.Y := Y;
NewPoint := ClientToScreen(NewPoint); // On Screen
NewPoint.Y := NewPoint.Y - MouseStart.Y; // New Onscreen
NewPoint.X := NewPoint.X - MouseStart.X;
Top := NewPoint.Y;
Left := NewPoint.X;
Refresh;
end;
end;
procedure TMainScanForm.TransImageMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseDown := False;
end;