delphi - 为什么 OnEndDrag 事件没有被调用?

标签 delphi drag-and-drop

我正在尝试使用 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 中用于此类操作的专用类(即可以与单个控件关联的拖动对象)是 TBaseDragControlObjectTDragControlObject[Ex] 是处理放置的适当后代,而不是处理停靠的同级 TDragDockObject

DragObject := TDragControlObjectEx.Create(MyLabel);

关于delphi - 为什么 OnEndDrag 事件没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48644972/

相关文章:

delphi - ssl httpserver 抛出 'Access violation at address 00000000. Read of address 00000000' 错误

delphi - Delphi-TThread可以更改VCL主线程中变量的值吗?

ios - 如何在 IOS Delphi 上的 TWebbrowser 中设置用户代理

javascript - 拖放到 HTML5 Canvas

Delphi:像 FineReader 11 一样创建菜单(选项卡)

delphi - 如何处理 .dpr 使用部分中的 IFDEF

html - 怎么把图片拖到那个分区?

javascript - React.js 拖放 - Drop 上的无限循环

android - 通过拖放来订购RecyclerView的元素

javascript - Jquery 拖放到动态创建的 div 上