EvtDragInit
EvtDragInit
Drag & Drop-Operation starten
Details
- Name: Typ Beschreibung
- aEvt:
eventEreignisinformationen - aDataObject:
handleDragData -Objekt - aEffect:
interlaubte Effekte - aMouseBtn:
intverwendete Maustasten - aDataPlace:
handleDataPlace -Objekt (optional) - Resultat:
logicDrag & Drop-Operation durchführen? - Siehe: Liste , Objekte ,
EvtDragTerm, Ereignisbefehle , Ereignisabläufe Drag & Drop , Blog
Dieses Ereignis wird ausgelöst, wenn die Eigenschaft OleDropMode auf _WinOleDynamic gesetzt ist und der Mauszeiger bei gedrückter Maustaste in dem Objekt bewegt wird. In diesem Ereignis werden die Daten für die Drag & Drop-Operation zusammengestellt oder die Operation unterbunden.
Definition des Funktionskopfes:
sub EvtDragInit
(
aEvt : event; // Ereignis
aDataObject : handle; // Drag-Datenobjekt
aEffect : int; // Rückgabe der erlaubten Effekte (_WinDropEffectNone = Cancel)
aMouseBtn : int; // Verwendete Maustasten
aDataPlace : handle; // DataPlace-Objekt (optional)
)
: logic; // Drag & Drop-Operation durchführen?
{
return(true);
}
aEvt
In diesem Parameter vom Typ event wird unter anderem der Deskriptor des auslösenden Objekts, d. h. das Objekt, in dem die Ereignisfunktion eingetragen wurde, übergeben.
aDataObject
In diesem Parameter wird ein Deskriptor auf ein DragData -Objekt übergeben. In diesem Objekt werden die zu übertragenen Daten aufbereitet. Über die Eigenschaften dieses Objekts werden auch die Formate angegeben, die übertragen werden können.
aEffect
Hier werden die möglichen Drag & Drop-Operationen zurückgegeben. Folgende Konstanten können dazu verwendet werden:
_WinDropEffectNone: Drag & Drop-Operation abbrechen_WinDropEffectCopy: Daten dürfen kopiert werden_WinDropEffectMove: Daten dürfen verschoben werden_WinDropEffectLink: Daten dürfen verlinkt werden
Die Konstanten _WinDropEffectCopy, _WinDropEffectMove und _WinDropEffectLink können miteinander verknüpft werden.
aMouseBtn
Die zum Starten der Drag & Drop-Operation gedrückte Maustaste wird in diesem Parameter übergeben. Der Wert kann mit folgenden Konstanten verglichen werden:
_WinMouseLeft: linke Maustaste_WinMouseRight: rechte Maustaste_WinMouseMiddle: mittlere Maustaste
Die Maustaste kann mit den Werten _WinMouseShift und / oder _WinMouseCtrl kombiniert sein.
Damit eine Drag & Drop-Operation auf einem Button -Objekt ausgelöst werden kann, muss die -Taste gedrückt werden.
aDataPlace
Hier wird der Deskriptor auf ein DataPlace -Objekt übergeben. Aus diesem Objekt können zusätzliche Informationen über die Position der übertragenen Daten im Quell-Objekt ermittelt werden.
Resultat
Um die Drag & Drop-Operation durchzuführen muss true zurückgegeben und in aEffect ein Wert ungleich _WinDropEffectNone übergeben werden.
Wird eine Drag & Drop-Operation durch die Rückgabe von false verhindert, wird anschließend das Ereignis EvtMouse bzw. EvtMouseItem ausgelöst.
Beispiel:
In diesem Beispiel werden die Daten eines binären Objekts so aufbereitet, dass sie in den Windows Explorer oder auf den Desktop gezogen werden können.
sub EvtDragInit
(
aEvt : event; // Ereignis
aDataObject : handle; // DragData-Objekt
aEffect : int; // Rückgabe der erlaubten Effekte (_WinDropEffectNone = Cancel)
aMouseBtn : int; // Verwendete Maustasten
aDataPlace : handle; // DataPlace-Objekt (optional)
)
: logic; // Drag & Drop-Operation durchführen?
{
// Aufbereitung der Daten zum Export in den Explorer
// Binäres Objekt übergeben
...
tBinObj # BinOpen(0, tBinPath + '\' + tBinName, _BinLock);
tMemObj # MemAllocate(tBinObj->spSizeOrg);
tBinObj->BinReadMem(tMemObj);
tBinObj->BinClose();
// Objekt in eine Liste einfügen
tDragList # CteOpen(_CteList);
tDragList->CteInsertItem(tBinName, tMemObj, '');
// Setzen der Informationen im Data-Objekt
// Format aktivieren
aDataObject->wpFormatEnum(_WinDropDataContent) # true;
// Format-Objekt ermittel und Daten anhängen
tDragFormat # aDataObject->wpData(_WinDropDataContent);
tDragFormat->wpData # tDragList;
// Zulässige Drag-Effekte festlegen
aEffect # _WinDropEffectCopy | _WinDropEffectMove;
return(true);
}
Die in dem Beispiel angelegten Objekte ( Cte-Liste und Memory -Objekt) müssen in dem Ereignis EvtDragTerm wieder entfernt werden.