我正试图检测拖拽的结束。使用TControl.OnEndDrag event删除操作。
从OnEndDrag
事件分配DragObject
参数时,似乎永远不会调用OnStartDrag
事件。
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
事件?
答案 0 :(得分:2)
拖动对象需要知道拖动结束时应该通知哪个控件。 VCL中此类操作的专用类,即可与单个控件关联的拖动对象,为TBaseDragControlObject
。 TDragControlObject[Ex]
是适当的后代,处理掉落而不是处理对接的兄弟TDragDockObject
。
DragObject := TDragControlObjectEx.Create(MyLabel);