我正在尝试在屏幕上制作一个可拖动的表单,即我可以抓住它并在屏幕上移动它。它是透明的并且没有边框,但是图像可以作为其他控件的背景。我想使用图像的事件来控制表单的拖动。我怎样才能做到这一点?
我发现有这个 TDragObject 参数的 DragEnter、DragLeave、DragStart 方法,我不知道。
有人可以帮忙吗?
我正在尝试在屏幕上制作一个可拖动的表单,即我可以抓住它并在屏幕上移动它。它是透明的并且没有边框,但是图像可以作为其他控件的背景。我想使用图像的事件来控制表单的拖动。我怎样才能做到这一点?
我发现有这个 TDragObject 参数的 DragEnter、DragLeave、DragStart 方法,我不知道。
有人可以帮忙吗?
基本上你必须手动完成。
这是来自带有透明图像 (TransImage) 的表单的一些 delphi/windows 代码,没有边框等事件在图像的表单中,因此顶部和左侧参考 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;