Allerdings zermartere mir schon den einige Zeit den Kopf, ob und wenn ja, wie das mit den Drag & Drop Ereignissen funktioniert. Bisher habe ich keine Möglichkeit gefunden, um ein #PB_Event_GadgetDrop Ereignis z.B. an ein Editor-Gadget zu binden. Die Drag & Drop Events scheinen ausschließlich mittels des regulären eventloops realisierbar zu sein.
Oder kennt jemand eine Lösung, die das ganze mit direkter Bindung realisiert?
Hier die bisherige Lösung im Eventloop (den ich abschaffen will)
Code: Alles auswählen
Repeat
iEvent = WaitWindowEvent()
iEventGadget = EventGadget()
iEventType = EventType()
Select iEvent
Case #PB_Event_SizeWindow
; [...]
Case #PB_Event_GadgetDrop
Select iEventGadget
Case EditorGadget
If EventDropType() = #PB_Drop_Files And EventDropAction() = #PB_Drag_Copy
sFilename = StringField(EventDropFiles() + Chr(10), 1, Chr(10))
Debug sFilename
EndIf
EndSelect
Case #PB_Event_CloseWindow
iQuit = 1
EndSelect
Until iQuit = 1
Aber zur Benutzung von EventDropType() und EventDropAction() findet man leider nichts.Die regulären Funktionen wie EventGadget(), EventWindow(), EventMenu(), EventType() und EventData() sind innerhalb des Callbacks verfügbar, um weitere Informationen über das Ereignis zu erhalten.
Hinweis: WindowEvent() und WaitWindowEvent() sollten niemals von innerhalb eines Callbacks aufgerufen werden, oder das Programm könnte gesperrt ("locked") werden oder ein falsches Verhalten zeigen.
Wenn ich dem Gadget alle Events zuordne...
BindGadgetEvent(EditorGadget, @EditorGadget_DropFile(), #PB_All)
... dann muss ich innerhalb des Callbacks EventDropType() und EventDropAction() prüfen. Das schlägt aber fehl, sobald der Callback von einem anderen Event, der nicht #PB_Event_GadgetDrop entspricht, aufgerufen wird. Da heißt es dann "ERROR es hat kein Drag&Drop Ereignis stattgefunden".

