/************************************************************************* * * $RCSfile: edtdd.cxx,v $ * * $Revision: 1.4 $ * * last change: $Author: jp $ $Date: 2001-05-07 14:49:00 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses * * - GNU Lesser General Public License Version 2.1 * - Sun Industry Standards Source License Version 1.1 * * Sun Microsystems Inc., October, 2000 * * GNU Lesser General Public License Version 2.1 * ============================================= * Copyright 2000 by Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, CA 94303, USA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * * * Sun Industry Standards Source License Version 1.1 * ================================================= * The contents of this file are subject to the Sun Industry Standards * Source License Version 1.1 (the "License"); You may not use this file * except in compliance with the License. You may obtain a copy of the * License at http://www.openoffice.org/license.html. * * Software provided under this License is provided on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. * See the License for the specific provisions governing your rights and * obligations concerning the Software. * * The Initial Developer of the Original Code is: Sun Microsystems, Inc. * * Copyright: 2000 by Sun Microsystems, Inc. * * All Rights Reserved. * * Contributor(s): _______________________________________ * * ************************************************************************/ #ifdef PRECOMPILED #include "ui_pch.hxx" #endif #pragma hdrstop #ifndef _HINTIDS_HXX #include #endif #ifndef _SVDVIEW_HXX //autogen #include #endif #ifndef _OUTLINER_HXX //autogen #include #endif #ifndef _SVDVMARK_HXX //autogen #include #endif #ifndef _SVDOBJ_HXX //autogen #include #endif #ifndef _SOT_EXCHANGE_HXX //autogen #include #endif #ifndef _OFF_APP_HXX //autogen #include #endif #ifndef _SOT_FORMATS_HXX //autogen #include #endif #ifndef _FMTURL_HXX //autogen #include #endif #ifndef _FRMFMT_HXX #include #endif #ifndef _WRTSH_HXX #include #endif #ifndef _EDTWIN_HXX #include #endif #ifndef _VIEW_HXX #include #endif #ifndef _VIEWOPT_HXX #include #endif #ifndef _SWDTFLVR_HXX #include #endif #ifndef _SWMODULE_HXX #include #endif #ifndef _DOCSH_HXX #include #endif #ifndef _SWWDOCSH_HXX //autogen #include #endif #ifndef _SWUNDO_HXX #include #endif extern BOOL bNoInterrupt; extern BOOL bFrmDrag; extern BOOL bDDTimerStarted; BOOL bExecuteDrag = FALSE; void SwEditWin::StartDDTimer() { aTimer.SetTimeoutHdl(LINK(this, SwEditWin, DDHandler)); aTimer.SetTimeout(480); aTimer.Start(); bDDTimerStarted = TRUE; } void SwEditWin::StopDDTimer(SwWrtShell *pSh, const Point &rPt) { aTimer.Stop(); bDDTimerStarted = FALSE; if(!pSh->IsSelFrmMode()) (pSh->*pSh->fnSetCrsr)(&rPt,FALSE); aTimer.SetTimeoutHdl(LINK(this,SwEditWin, TimerHandler)); } void SwEditWin::StartDrag( sal_Int8 nAction, const Point& rPosPixel ) { SwWrtShell &rSh = rView.GetWrtShell(); //!! if( rSh.GetDrawView() && //!! rSh.GetDrawView()->StartDrag( nAction, rPosPixel, this) ) //!! { //!! rView.GetViewFrame()->GetBindings().InvalidateAll(FALSE); //!! return; // Event von der SdrView ausgewertet //!! } if ( !pApplyTempl && !rSh.IsDrawCreate() && !IsDrawAction()) { BOOL bStart = FALSE, bDelSelect = FALSE; SdrObject *pObj = NULL; Point aDocPos( PixelToLogic( rPosPixel ) ); if ( !rSh.IsInSelect() && rSh.ChgCurrPam( aDocPos, TRUE, TRUE)) //Wir sind nicht beim Selektieren und stehen auf einer //Selektion bStart = TRUE; else if ( !bFrmDrag && rSh.IsSelFrmMode() && rSh.IsInsideSelectedObj( aDocPos ) ) //Wir sind nicht am internen Draggen und stehen auf //einem Objekt (Rahmen, Zeichenobjekt) bStart = TRUE; else if( !bFrmDrag && rView.GetDocShell()->IsReadOnly() && OBJCNT_NONE != rSh.GetObjCntType( aDocPos, pObj )) { rSh.LockPaint(); if( rSh.SelectObj( aDocPos, FALSE, FALSE, pObj )) bStart = bDelSelect = TRUE; else rSh.UnlockPaint(); } else { SwContentAtPos aSwContentAtPos( SwContentAtPos::SW_INETATTR ); bStart = rSh.GetContentAtPos( aDocPos, aSwContentAtPos, FALSE ); } if ( bStart && !bIsInDrag ) { bMBPressed = FALSE; ReleaseMouse(); bFrmDrag = FALSE; bExecuteDrag = TRUE; SwEditWin::nDDStartPosY = aDocPos.Y(); SwEditWin::nDDStartPosX = aDocPos.X(); aMovePos = aDocPos; StartExecuteDrag(); if( bDelSelect ) { rSh.UnSelectFrm(); rSh.UnlockPaint(); } } } } void SwEditWin::StartExecuteDrag() { if( !bExecuteDrag || bIsInDrag ) return; bIsInDrag = TRUE; SwTransferable* pTransfer = new SwTransferable( rView.GetWrtShell() ); ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > xRef( pTransfer ); pTransfer->StartDrag( this, aMovePos ); } void SwEditWin::DragFinished() { aTimer.SetTimeoutHdl( LINK(this,SwEditWin, TimerHandler) ); bIsInDrag = FALSE; } void SwEditWin::DropCleanup() { SwWrtShell &rSh = rView.GetWrtShell(); // Stati zuruecksetzen bNoInterrupt = FALSE; if ( bOldIdleSet ) { ((SwViewOption*)rSh.GetViewOptions())->SetIdle( bOldIdle ); bOldIdleSet = FALSE; } if ( pUserMarker ) CleanupDropUserMarker(); else rSh.UnSetVisCrsr(); } void SwEditWin::CleanupDropUserMarker() { if ( pUserMarker ) { delete pUserMarker, pUserMarker = 0; pUserMarkerObj = 0; } } //Messehack (MA,MBA) void lcl_SelectShellForDrop( SwView &rView ) { if ( !rView.GetCurShell() ) rView.SelectShell(); } sal_Int8 SwEditWin::ExecuteDrop( const ExecuteDropEvent& rEvt ) { ::lcl_SelectShellForDrop( GetView() ); DropCleanup(); sal_Int8 nRet = DND_ACTION_NONE; //Ein Drop auf eine offene OutlinerView geht uns nichts an (siehe auch QueryDrop) SwWrtShell &rSh = rView.GetWrtShell(); const Point aDocPt( PixelToLogic( rEvt.maPosPixel )); SdrObject *pObj = 0; OutlinerView* pOLV; rSh.GetObjCntType( aDocPt, pObj ); if( pObj && 0 != ( pOLV = rSh.GetDrawView()->GetTextEditOutlinerView() )) { Rectangle aRect( pOLV->GetOutputArea() ); aRect.Union( pObj->GetLogicRect() ); const Point aPos = pOLV->GetWindow()->PixelToLogic(rEvt.maPosPixel); if ( aRect.IsInside(aPos) ) { rSh.StartAllAction(); //!! sal_Int8 nRet = DND_ACTION_NONE/*pOLV->ExecuteDrop( rEvt )*/; rSh.EndAllAction(); return nRet; } } TransferableDataHelper aData( rEvt.maDropEvent.Transferable ); nRet = rEvt.mnAction; if( !SwTransferable::PasteData( aData, rSh, nDropAction, nDropFormat, nDropDestination, FALSE, &aDocPt, nRet )) //!! nRet = OFF_APP()->ExecuteDrop( rEvt ); nRet = DND_ACTION_NONE; else if ( SW_MOD()->pDragDrop ) //Bei internem D&D nicht mehr aufraeumen! SW_MOD()->pDragDrop->SetCleanUp( FALSE ); return nRet; } sal_Int8 SwEditWin::AcceptDrop( const AcceptDropEvent& rEvt ) { if( rEvt.mbLeaving ) { DropCleanup(); return rEvt.mnAction; } if( rView.GetDocShell()->IsReadOnly() ) return DND_ACTION_NONE; SwWrtShell &rSh = rView.GetWrtShell(); //Ein bischen scrollen? Point aPixPt( rEvt.maPosPixel ); Point aPoint; Rectangle aWin( aPoint, GetOutputSizePixel() ); Rectangle aWin2( aWin ); aWin.Left() += 10; aWin.Top() += 10; aWin.Right() -= 10; aWin.Bottom()-= 10; if ( !aWin.IsInside( aPixPt ) ) { if ( !bOldIdleSet ) { bOldIdle = rSh.GetViewOptions()->IsIdle(); ((SwViewOption *)rSh.GetViewOptions())->SetIdle(FALSE); bOldIdleSet = TRUE; } CleanupDropUserMarker(); aWin2.Left() += 5; aWin2.Top() += 5; aWin2.Right() -= 5; aWin2.Bottom()-= 5; long x = 0; if ( aPixPt.Y() < aWin2.Top() ) x = aPixPt.Y() = -5; else if ( aPixPt.Y() > aWin2.Bottom() ) x = aPixPt.Y() += 10; if ( aPixPt.X() < aWin2.Left() ) x = aPixPt.X() = -5; else if ( aPixPt.X() > aWin2.Right() ) x = aPixPt.X() += 10; Point aDocPt( PixelToLogic( aPixPt ) ); aDocPt = rSh.GetCntntPos( aDocPt, x > 0 ); rSh.SwCrsrShell::SetVisCrsr( aDocPt ); return TRUE; } if ( bOldIdleSet ) { ((SwViewOption *)rSh.GetViewOptions())->SetIdle( bOldIdle ); bOldIdleSet = FALSE; } //Drop auf Selektion ist nicht statthaft. //JP 19.01.99: Drop in geschuetzte Bereiche ist nicht statthaft const Point aDocPt( PixelToLogic( aPixPt ) ); if( rSh.ChgCurrPam( aDocPt ) || rSh.IsOverReadOnlyPos( aDocPt ) ) return DND_ACTION_NONE; //Auf was wollen wir denn gerade droppen? nDropDestination = 0; BOOL bDropCursor = TRUE; //UserMarker oder DropCursor anzeigen. SdrObject *pObj = NULL; const ObjCntType eType = rSh.GetObjCntType( aDocPt, pObj ); //Drop auf OutlinerView (TextEdit im Drawing) soll diese selbst entscheiden! if ( pObj ) { OutlinerView* pOLV = rSh.GetDrawView()->GetTextEditOutlinerView(); if ( pOLV ) { Rectangle aRect( pOLV->GetOutputArea() ); aRect.Union( pObj->GetLogicRect() ); const Point aPos = pOLV->GetWindow()->PixelToLogic(aPixPt); if( aRect.IsInside( aPos ) ) //!! return pOLV->AcceptDrop( rEvt ); return rEvt.mnAction; } } //Sonst etwas aus der DrawingEngine getroffen? if ( OBJCNT_NONE != eType ) { switch ( eType ) { case OBJCNT_GRF: { BOOL bLink, bIMap = 0 != rSh.GetFmtFromObj( aDocPt )->GetURL().GetMap(); String aDummy; rSh.GetGrfAtPos( aDocPt, aDummy, bLink ); if ( bLink && bIMap ) nDropDestination = EXCHG_DEST_DOC_LNKD_GRAPH_W_IMAP; else if ( bLink ) nDropDestination = EXCHG_DEST_DOC_LNKD_GRAPHOBJ; else if ( bIMap ) nDropDestination = EXCHG_DEST_DOC_GRAPH_W_IMAP; else nDropDestination = EXCHG_DEST_DOC_GRAPHOBJ; } break; case OBJCNT_FLY: if( rSh.GetView().GetDocShell()->ISA(SwWebDocShell) ) nDropDestination = EXCHG_DEST_DOC_TEXTFRAME_WEB; else nDropDestination = EXCHG_DEST_DOC_TEXTFRAME; break; case OBJCNT_OLE: nDropDestination = EXCHG_DEST_DOC_OLEOBJ; break; case OBJCNT_CONTROL: /* no Action avail */ case OBJCNT_SIMPLE: nDropDestination = EXCHG_DEST_DOC_DRAWOBJ; break; case OBJCNT_URLBUTTON: nDropDestination = EXCHG_DEST_DOC_URLBUTTON; break; case OBJCNT_GROUPOBJ: nDropDestination = EXCHG_DEST_DOC_GROUPOBJ; break; default: ASSERT( !this, "new ObjectType?" ); } } if ( !nDropDestination ) { /* JP 13.07.98: Bug 52637: es wird ein URL-Feld erkannt also werden nur die Inhalte zugelassen. Das ist aber bestimmt nicht das gewollte. SwContentAtPos aCntntAtPos( SwContentAtPos::SW_INETATTR ); if ( rSh.GetContentAtPos( aDocPt, aCntntAtPos, FALSE ) ) nDropDestination = EXCHG_DEST_DOC_URLFIELD; else */ if( rSh.GetView().GetDocShell()->ISA(SwWebDocShell) ) nDropDestination = EXCHG_DEST_SWDOC_FREE_AREA_WEB; else nDropDestination = EXCHG_DEST_SWDOC_FREE_AREA; } else bDropCursor = FALSE; USHORT nEventAction; sal_Int8 nUserOpt = rEvt.mnAction; nDropAction = SotExchange::GetExchangeAction( GetDataFlavorExVector(), nDropDestination, rEvt.mnAction, //!! rEvt.GetSourceOptions(), nUserOpt, nDropFormat, nEventAction ); if( EXCHG_INOUT_ACTION_NONE != nDropAction ) { //Bei den default Aktionen wollen wir noch ein bischen mitreden. SwModule *pMod = SW_MOD(); if( pMod->pDragDrop ) { BOOL bCleanup = FALSE; //Zeichenobjekte in Kopf-/Fusszeilen sind nicht erlaubt SwWrtShell *pSrcSh = pMod->pDragDrop->GetShell(); if( (pSrcSh->GetSelFrmType() == FRMTYPE_DRAWOBJ) && (rSh.GetFrmType( &aDocPt, FALSE ) & (FRMTYPE_HEADER|FRMTYPE_FOOTER)) ) { bCleanup = TRUE; } // keine positionsgeschuetzten Objecte verschieben! else if( DND_ACTION_MOVE == rEvt.mnAction && pSrcSh->IsSelObjProtected( FLYPROTECT_POS ) ) { bCleanup = TRUE; } //!! else if( rEvt.IsDefaultAction() ) //!! { //!! // JP 13.08.98: internes Drag&Drop: bei gleichem Doc ein Move //!! // ansonten ein Copy - Task 54974 //!! nEventAction = pSrcSh->GetDoc() == rSh.GetDoc() //!! ? DND_ACTION_MOVE //!! : DND_ACTION_COPY; //!! } if ( bCleanup ) { CleanupDropUserMarker(); rSh.UnSetVisCrsr(); return DND_ACTION_NONE; } } else { //D&D von ausserhalb des SW soll per default ein Copy sein. if( EXCHG_IN_ACTION_DEFAULT == nEventAction && DND_ACTION_MOVE == rEvt.mnAction ) nEventAction = DND_ACTION_COPY; if( (SOT_FORMATSTR_ID_SBA_FIELDDATAEXCHANGE == nDropFormat && EXCHG_IN_ACTION_LINK != nDropAction) || SOT_FORMATSTR_ID_SBA_CTRLDATAEXCHANGE == nDropFormat ) { SdrMarkView* pMView = PTR_CAST( SdrMarkView, rSh.GetDrawView() ); if( pMView && !pMView->IsDesignMode() ) return DND_ACTION_NONE; } } if ( EXCHG_IN_ACTION_DEFAULT != nEventAction ) nUserOpt = nEventAction; if ( bDropCursor ) { CleanupDropUserMarker(); rSh.SwCrsrShell::SetVisCrsr( aDocPt ); } else { rSh.UnSetVisCrsr(); if ( !pUserMarker ) pUserMarker = new SdrViewUserMarker( rSh.GetDrawView() ); if ( pUserMarkerObj != pObj ) { pUserMarkerObj = pObj; pUserMarker->SetXPolyPolygon( pUserMarkerObj, rSh.GetDrawView()->GetPageView( rSh.GetDrawView()->GetModel()->GetPage(0))); pUserMarker->Show(); } } return nUserOpt; } CleanupDropUserMarker(); rSh.UnSetVisCrsr(); //!! return OFF_APP()->AcceptDrop( rEvt ); return DND_ACTION_NONE; } IMPL_LINK( SwEditWin, DDHandler, Timer *, EMPTYARG ) { bDDTimerStarted = FALSE; aTimer.Stop(); aTimer.SetTimeout(240); bMBPressed = FALSE; ReleaseMouse(); bFrmDrag = FALSE; if ( rView.GetViewFrame() && rView.GetViewFrame()->GetFrame() && !rView.GetViewFrame()->GetFrame()->TransferForReplaceInProgress() ) { bExecuteDrag = TRUE; StartExecuteDrag(); } return 0; } /*------------------------------------------------------------------------ $Log: not supported by cvs2svn $ Revision 1.3 2001/03/23 15:55:45 jp use new Drag&Drop / Clipboard API Revision 1.2 2001/02/02 17:45:49 jp SwDataExchange interfaces renamed Revision 1.1.1.1 2000/09/18 17:14:35 hr initial import Revision 1.174 2000/09/18 16:05:23 willem.vandorp OpenOffice header added. Revision 1.173 1999/05/11 19:50:40 JP Task #66127#: Methoden rund ums Lineal verbessert und Schnittstellen veraendert/erweitert Rev 1.172 11 May 1999 21:50:40 JP Task #66127#: Methoden rund ums Lineal verbessert und Schnittstellen veraendert/erweitert Rev 1.171 25 Jan 1999 16:11:42 JP Bug #61109#: QueryDrop - DropModifier nicht ueberbuegeln Rev 1.170 19 Jan 1999 22:57:28 JP Task #58677#: Crsr in Readonly Bereichen zulassen Rev 1.169 11 Dec 1998 11:46:02 JP Task #58217#: WebDocShell als D&D Ziel erkennen Rev 1.168 27 Nov 1998 14:50:42 AMA Fix #59951#59825#: Unterscheiden zwischen Rahmen-,Seiten- und Bereichsspalten Rev 1.167 17 Nov 1998 22:17:06 JP Task #59398#: ClipboardId Umstellungen Rev 1.166 12 Nov 1998 13:31:08 JP Task #59398# Umstellung von SotFormatStringId Rev 1.165 02 Sep 1998 12:10:46 MA #55895# ctrldataexchange Rev 1.164 13 Aug 1998 14:20:14 JP Bug #54974# QueryDrop - bei DefaultAction per internem Format im eigenen Doc immer move, sonst copy Rev 1.163 16 Jul 1998 19:21:22 JP Bug #53113# DatenbankControls nur im DesignModus einfuegen Rev 1.162 08 Jul 1998 14:17:32 JP das richtige define fuer supd benutzen Rev 1.161 08 Jul 1998 12:24:36 JP neues Drag&Drop ab Version 5.0 Rev 1.160 04 Jul 1998 16:06:24 JP Umstellung auf Tabelle weiergemacht Rev 1.159 27 Jun 1998 18:44:00 JP Umstellung auf Tabelle weitergemacht Rev 1.158 25 Jun 1998 14:12:50 JP SvDataObject -> SotObject Rev 1.157 16 Jun 1998 17:14:42 OM #51085# Draw-Objekte nicht auf die Wiese droppen Rev 1.156 16 Jun 1998 16:35:44 OM #51085# Draw-Objekte nicht auf die Wiese droppen Rev 1.155 09 Jun 1998 15:31:32 OM VC-Controls entfernt Rev 1.154 27 Apr 1998 21:15:26 JP Bug #49842#: Drop - bei Grafiken den FileNamen in eine URL wandeln Rev 1.153 31 Mar 1998 17:30:22 MA erstmal abgebrochen, neues DD Rev 1.152 26 Mar 1998 18:02:54 MA ein paar vorb. D&D Rev 1.151 20 Feb 1998 16:18:20 MA headerfiles gewandert Rev 1.150 19 Feb 1998 08:53:20 OK NEW: include mieclip.hxx Rev 1.149 07 Jan 1998 18:46:26 MIB 5.0 Fileformat Rev 1.148 28 Nov 1997 18:02:26 MA includes Rev 1.147 25 Nov 1997 10:33:00 MA includes Rev 1.146 22 Oct 1997 16:04:52 OM Farbendrop Rev 1.145 17 Oct 1997 13:24:02 JP neu: MSE40-HTML-Format erkennen/lesen Rev 1.144 15 Oct 1997 14:03:44 OS lcl_SelectShellForDrop - SelectShell() nur bei Bedarf rufen #44690# Rev 1.143 17 Sep 1997 11:26:04 MA #43801# precedence nicht beachtet Rev 1.142 17 Sep 1997 09:57:22 OS Nummer 3: pSdrView pruefen! Rev 1.141 10 Sep 1997 10:50:08 JP neu: Undo fuers kopieren von Tabellen & in Tabellen Rev 1.140 08 Sep 1997 11:02:36 MA includes Rev 1.139 05 Sep 1997 13:10:48 OM #42027# D&D auf DrawText-Objekte Rev 1.138 02 Sep 1997 13:20:48 OS includes Rev 1.137 01 Sep 1997 13:15:38 OS DLL-Umstellung Rev 1.136 28 Aug 1997 10:29:56 JP Bug #42430#: Drop - bei INetAttr. den SourceCursor auf das Attribut setzen Rev 1.135 15 Aug 1997 12:09:54 OS chartar/frmatr/txtatr aufgeteilt Rev 1.134 11 Aug 1997 20:06:16 HJS includes Rev 1.133 11 Aug 1997 10:08:40 MH chg: header Rev 1.132 17 Jul 1997 19:06:32 MA #41801# File zur absoluten URL verarbeiten Rev 1.131 19 Jun 1997 11:38:52 MA #40833# Drop_Link, sdw nicht einfuegen bei sw/web Rev 1.130 09 Jun 1997 20:08:48 JP SwFilterNms/SwFilterNm entfernt Rev 1.129 29 May 1997 14:31:14 MA fix: Grafik nur verknuepft fuer WebDocShell Rev 1.128 16 May 1997 15:07:42 MH add: defines wg. CLOOKS Rev 1.127 25 Apr 1997 13:00:46 MA #39306# ggf. den UserMarker loeschen Rev 1.126 14 Apr 1997 17:25:00 MH add: header Rev 1.125 10 Apr 1997 16:05:18 TRI includes Rev 1.124 08 Apr 1997 10:31:46 OM Fehlende Includes Rev 1.123 08 Apr 1997 09:55:34 NF includes... Rev 1.122 21 Mar 1997 13:53:18 MA #36900# D&D offset beseitigt Rev 1.121 16 Mar 1997 13:44:16 MA fix: Kein D&D wenn der Frame schon klinisch tot ist Rev 1.120 07 Mar 1997 09:47:24 MA Neue D&D Moeglichkeiten, Handling verbessert Rev 1.119 23 Feb 1997 22:03:10 MA fix: Drop von Grafik auf Grafik reanimiert Rev 1.118 07 Feb 1997 12:05:44 OS Navigator benutzt eigenes Drag-Format Rev 1.117 05 Feb 1997 19:13:18 JP ExcuteDrag: Modus der WrtShell setzen, wenn Flys selektiert sind Rev 1.116 19 Dec 1996 16:12:18 MA fix: Crsr wieder umschalten Rev 1.115 28 Nov 1996 14:20:06 MA fix: Drop per Link auch bei einem File Rev 1.114 20 Nov 1996 16:58:42 MA #33444# QueryDrop, Pos fuer Objekte anpassen Rev 1.113 18 Oct 1996 16:57:56 MA Messehack: eine hoffentlich kurzlebige Freundschaft Rev 1.112 15 Oct 1996 12:14:20 MA new: Drawing per Clipboard Rev 1.111 02 Oct 1996 13:50:52 JP StartExecuteDrag: aus ReadOnly-Docs darf nur kopiert werden! Rev 1.110 16 Sep 1996 14:00:58 JP Drop: INetBookmark am URL-Button setzen -------------------------------------------------------------------------*/