First of all you need this:
procedure TMyPanel.DragOver(Sender, Source: TObject;X,Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := True;
end;
constructor TMyPanel.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
FMouseDownPnt:= Point(-1, -1);
Cursor:= crIBeam;
OnDragOver := @DragOver;
end;
Second - you need to do this:
procedure TMyPanel.UpdateCursor;
begin
if Mouse.IsDragging then
begin
if ssCtrl in GetKeyShiftState then
DragCursor:= crMultiDrag
else
DragCursor:= crDrag;
end;
end;
Please note, that cursor actually changes only after mouse movement. I'm not sure, if it's correct way to do things. Something is still wrong, because cursor flickers. I guess, you mix some "auto" and "manual" drag and drop functionality.