anchor.diff:    end;
   
   
  +  { TGDIDragManager }
  +
  +  TGDIDragManager = class(TInterfacedObject, IDropTarget)
  +  private
  +    FDropTarget: TObject;  { actually a TfpgWidget }
  +    FRegistered: boolean;
  +    { IDropTarget }
  +    function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall;
  +    function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall;
  +    function DragLeave: HResult;StdCall;
  +    function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD):HResult;StdCall;
  +  public
  +    constructor Create(ADropTarget: TObject); reintroduce;
  +    destructor  Destroy; override;
  +    procedure   RegisterDragDrop;
  +    procedure   RevokeDragDrop;
  +    property    DropTarget: TObject read FDropTarget; { actually a TfpgWidget }
  +  end;
  +
  +
   implementation
   
   uses
  
positive.code:     property    WinHandle: TfpgWinHandle read FWinHandle;
    public
      constructor Create(AOwner: TComponent); override;
      procedure   ActivateWindow; override;
      procedure   CaptureMouse; override;
      procedure   ReleaseMouse; override;
  
negative.code: var
    // this are required for Windows MouseEnter & MouseExit detection.
    uLastWindowHndl: TfpgWinHandle;
  
  function TfpgGDIWindow.GetDragManager: TGDIDragManager;
  begin
    if not Assigned(FDragManager) then
       FDragManager := TGDIDragManager.Create(self);
    Result := FDragManager;
  end;
  
  function TfpgGDIWindow.DoMouseEnterLeaveCheck(AWindow: TfpgGDIWindow; uMsg, wParam, lParam: Cardinal): Boolean;
  var
    pt, spt: Windows.POINT;
  