EndDrag vs CancelDrag vs Cancelling=true ????

This is a question related to a docking problem I noted earlier, but
I'm trying to focus on one particular oddity.

Here's the basics:

(1) I have a specific region on a panel (actually a number of specific
    regions I'll call "dock areas") into which the user can drag
    particular "item" panels.

(2) The "item" panels originate from a palette, and they aren't
    actually removed from the palette--a copy of the item is placed
    into the dock area during the drag.

(3) I need to have the copied item transferred to the dock area as
    soon as the user enters the area and the new copy needs to
    immediately capture control of the mouse to begin dragging.  In
    other words, to the user it looks like he dragged the item's
    outline into the dock area, the item appeared in that area, and
    the user (without releasing the mouse button) just kept dragging
    the item (but now constrained within the dock region).

There's MUCH more complication to the situation than given here, but
those are the basics.

My main problem is that the outline of the dragged item persists after
I pop it into the dock area, and I've tried a number of things to get
rid of it.  I was trying to make a very simplified version of this
situation for testing and I found that in the simple version I could
get the job done.  All I did was place this line near the end of the
dock area's "OnDragOver" routine (the routine where I do all the work
to add a copy of a dragged item to the dock area):

  OrigPanel->EndDrag(true);

(where the OrigPanel is the panel from the palette that was originally
being dragged).  However, this would NOT do the trick in the simple
code if I placed it AFTER a "Source->Cancelling = true;" statement.
In the simple code, I could just replace the Cancelling=true statement
with the EndDrag statement, but in the real code, NOT including a
"Source->Cancelling = true;" statement (or putting an EndDrag
statement before it) produces an Access Violation.  I've also tried
doing CancelDrag() in various places.

SO, what does Source->Cancelling=true do versus CancelDrag() versus
EndDrag(true)???  Why would one code require Source->Cancelling=true
but not another?  Perhaps this isn't enough info, but I'm getting
really aggrivated and I wanted to see if someone knew something about
this.

-Jason