Allerdings ist es noch keien ideale und schöne Lösung.
Der Mauszeiger sollte wohl lieber geändert werden als dass man ein zusätzliches Fenster nimmt. Und die ImageGadgets müssten noch besser aktualisiert werden, damit keine unschönen Darstellungsfehler auftauchen.
Vielleicht kann man ja auch ein LIstIconGadget so manipulieren, dass man dort genauer angeben kann, wo die Icons liegen sollen und wie groß diese sein sollen.
Code: Alles auswählen
;/ Drag'n'Drop von Icons, bzw. Bildern by xaby
;/ FluidByte
Global osi.OSVERSIONINFO
osi\dwOSVersionInfoSize = SizeOf(OSVERSIONINFO)
GetVersionEx_(osi)
Structure gi
g.l
i.l
EndStructure
Global DragGadgetID.l, DragImageID.l
Global NewList GID.gi(); GadgetIDs
Procedure OpenDragWindow()
OpenWindow(0,DesktopMouseX(),DesktopMouseY(),64,64,"DragDrop",#PB_Window_BorderLess,WindowID(1))
CreateGadgetList(WindowID(0))
ImageGadget(0,0,0,64,64,ImageID(DragImageID))
StickyWindow(0,1)
If osi\dwPlatformId = #VER_PLATFORM_WIN32_NT
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,#WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(0),0,100,#LWA_ALPHA)
EndIf
EndProcedure
#XAusrichtung=66
#YAusrichtung=32
Procedure DragCallback(Aktion)
;/ WIE KANN ICH DAS #IMAGE mit Wert 0 anzeigen am Mauszeiger lassen?
If IsWindow(0)
Else
OpenDragWindow()
EndIf
ResizeWindow(0,DesktopMouseX()-#XAusrichtung,DesktopMouseY()-#YAusrichtung,#PB_Ignore,#PB_Ignore)
ProcedureReturn #True
EndProcedure
SetDragCallback(@DragCallback())
OpenWindow(1,30,30,420,630,"Test Drag 'n Drop",#PB_Window_TitleBar | #PB_Window_SystemMenu)
CreateGadgetList(WindowID(1))
ScrollAreaGadget(10,10,80,400,500,380,480,10)
EnableGadgetDrop(10,#PB_Drop_Text,#PB_Drag_Copy)
For i=0 To 5
AddElement(GID())
With GID()
\i=CreateImage(#PB_Any,64,64)
StartDrawing(ImageOutput(\i))
Box(0,0,64,64,RGB(Random(255),Random(255),Random(255)))
StopDrawing()
\g=ImageGadget(#PB_Any,10+70*i,10,64,64,ImageID(\i))
EndWith
Next
CloseGadgetList()
SetGadgetColor(10,#PB_Gadget_BackColor,RGB(255,255,240))
Repeat
Event = WaitWindowEvent(20)
If Event = #PB_Event_Gadget
GadgetNr=EventGadget()
ForEach GID()
If GadgetNr=GID()\g
If EventType() = #PB_EventType_DragStart
DragGadgetID=GID()\g
DragImageID=GID()\i
SetGadgetState(DragGadgetID,ImageID(DragImageID))
DragText(".") ;/ Damit DragDrop-Action ausgeführt wird
EndIf
EndIf
Next
EndIf
If Event = #PB_Event_GadgetDrop
ResizeGadget(DragGadgetID,EventDropX()-#XAusrichtung,EventDropY()-#YAusrichtung,#PB_Ignore,#PB_Ignore)
EndIf
If IsWindow(0)
CloseWindow(0)
EndIf
Until Event = #PB_Event_CloseWindow
