我正在尝试使用 TControl.OnEndDrag event 来检测拖放操作的结束。 .
当从 OnStartDrag
事件分配 DragObject
参数时,OnEndDrag
事件似乎永远不会被调用。
TMyForm = class(TForm)
procedure FormCreate(Sender: TObject);
public
MyLabel : TLabel;
procedure MyOnEndDrag(Sender, Target: TObject; X, Y: Integer);
procedure MyOnStartDrag(Sender: TObject; var DragObject: TDragObject);
end;
procedure TMyForm.FormCreate(Sender: TObject);
begin
MyLabel := TLabel.Create(Self);
MyLabel.Caption := 'Drag me';
MyLabel.Left := 50;
MyLabel.Top := 50;
MyLabel.OnStartDrag := MyOnStartDrag;
MyLabel.OnEndDrag := MyOnEndDrag;
MyLabel.DragMode := dmAutomatic;
MyLabel.Parent := Self;
end;
procedure TMyForm.MyOnEndDrag(Sender, Target: TObject; X, Y: Integer);
begin
ShowMessage('MyOnEndDrag');
end;
procedure TMyForm.MyOnStartDrag(Sender: TObject; var DragObject: TDragObject);
begin
DragObject := TDragObjectEx.Create;
end;
我认为问题可能与 DragObject 的类有关,但我不明白我做错了什么。如何确保调用 OnEndDrag
事件?
最佳答案
拖动对象需要知道拖动结束时应通知哪个控件。 VCL 中用于此类操作的专用类(即可以与单个控件关联的拖动对象)是 TBaseDragControlObject
。 TDragControlObject[Ex]
是处理放置的适当后代,而不是处理停靠的同级 TDragDockObject
。
DragObject := TDragControlObjectEx.Create(MyLabel);
关于delphi - 为什么 OnEndDrag 事件没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48644972/