anchor.diff:    end;
   end;
   
  +procedure TfpgGDIWindow.HandleDNDDrop(Sender: TObject; DataObj: IDataObject;
  +    KeyState: Longint; PT: TPoint; Effect: TfpgOLEDragDropEffect);
  +var
  +  FE: FORMATETC;
  +  stgmed: STGMEDIUM;
  +  data: pchar;
  +  wg: TfpgWidget;
  +  CF: DWORD;
  +begin
  +  if not FUserAcceptDrag then
  +    exit;
  +
  +  {$IFDEF DND_DEBUG}
  +  Writeln('TfpgGDIWindow.HandleDNDDrop');
  +  {$ENDIF}
  +
  +  wg := self as TfpgWidget;
  +  { construct a FORMATETC object }
  +  CF := WindowsClipboardLoopup(FUserMimeSelection);
  +  FE := GetFormatEtc(CF);
  +
  +  if DataObj.QueryGetData(FE) = S_OK then
  +  begin
  +    if DataObj.GetData(FE, stgmed) = S_OK then
  +    begin
  +      { Yippie! the data is there, so go get it! }
  +      data := GlobalLock(stgmed.HGLOBAL);
  +      if Assigned(wg.OnDragDrop) then
  +        wg.OnDragDrop(self, nil, pt.x, pt.y, data);
  +      GlobalUnlock(stgmed.HGLOBAL);
  +      { release the data using the COM API }
  +      ReleaseStgMedium(stgmed);
  +    end;
  +  end;
  +end;
  +
   function TfpgGDIWindow.GetDropManager: TfpgOLEDropTarget;
   begin
     if not Assigned(FDropManager) then
  
positive.code:     FDropManager.OnDragLeave := @HandleDNDLeave;
      FDropManager.OnDragEnter := @HandleDNDEnter;
      FDropManager.OnDragOver  := @HandleDNDPosition;
    end;
    Result := FDropManager;
  end;
  
negative.code:     procedure   HandleDNDLeave(Sender: TObject);
      procedure   HandleDNDEnter(Sender: TObject; DataObj: IDataObject; KeyState: Longint; PT: TPoint; var Effect: DWORD);
      procedure   HandleDNDPosition(Sender: TObject; KeyState: Longint; PT: TPoint; var Effect: TfpgOLEDragDropEffect);
      procedure   HandleDNDDrop(Sender: TObject; DataObj: IDataObject; KeyState: Longint; PT: TPoint; Effect: TfpgOLEDragDropEffect);
    private
      FMouseInWindow: boolean;
      FNonFullscreenRect: TfpgRect;
  