Drag and Drop Fragen
Verfasst: 30.07.2025 15:07
Hallo,
ich möchte ein kleines Tool erstellen, das im Grunde Bild-Dateien entsprechend ihrer Position in einer Matrix (z.B. 8x5) benennt ...
und nebenbei natürlich als übersichtlicher Viewer dient.
Ein reinen Viewer der Files wie P_11.jpg, P_12.jpg, P_21 usw. parst und in einer Matrix aus Imagegadgets darstellt habe ich schon.
Hier etwas Code meiner "Grundlagenforschung", die Basis stammt aus der Hilfe.
Aus z.B. dem Windowsexplorer ziehe ich gewünschte JPG-Bildchen auf betimmte Imagegadget-Positionen und bekomme darin eine kleine Vorschau angezeigt. *** Funktioniert bereits, aber fängt nicht alle Drop-Fehler ab. Aktuelles Drop-Ziel einfärben o.ä. muss auch noch.
Fragen:
- Wie nutze ich bei EnableGadgetDrop) #PB_Drop_Image richtig, damit nur gedroppte Bilder akzeptiert werden ? Bei meinem Imagegadget(4) geht nichts.
- Kann man auch zwischen Imagegadgets eine Art drag und drop machen, um z.B. Bildpositionen zu tauschen?
Freue mich über jeden Schubs in die richtige Richtung
ich möchte ein kleines Tool erstellen, das im Grunde Bild-Dateien entsprechend ihrer Position in einer Matrix (z.B. 8x5) benennt ...
und nebenbei natürlich als übersichtlicher Viewer dient.
Ein reinen Viewer der Files wie P_11.jpg, P_12.jpg, P_21 usw. parst und in einer Matrix aus Imagegadgets darstellt habe ich schon.
Hier etwas Code meiner "Grundlagenforschung", die Basis stammt aus der Hilfe.
Code: Alles auswählen
; Ziehe eine Datei auf eines der oberen 2 Gadgets und es wird der Dateipfad ausgegeben
; Ziehe eine JPG-Datei auf eines der 3 Imagegadgets und es wird dargestellt
Global xs=80 : Global ys=xs ; Grösse der Vorschaubilder
; ---------------------------------------
Procedure DragStartHandler()
Debug "Drag ..."
ExamineDraggedItems()
While NextDraggedItem() ; XXX Geht wohl nicht mit Imagegadgets !?
Debug DraggedItemIndex()
Wend
EndProcedure
; ---------------------------------------
Procedure DropToImGad(idnum)
If Not FindString(EventDropFiles(), Chr(10))
If LoadImage(0, EventDropFiles())
CopyImage(0, idnum)
ResizeImage(idnum, xs, ys)
SetGadgetState(idnum, ImageID(idnum))
Else: Debug "No JPG!" :EndIf
Else: Debug "To many items!" : EndIf
EndProcedure
; --------------------------------------------------------------------
UseJPEGImageDecoder()
UseJPEGImageEncoder()
EmptyImg = CreateImage(#PB_Any, xs, ys, 24, RGB(255, 255, 255))
StartDrawing(ImageOutput(EmptyImg))
LineXY(10, 10, xs-10, ys-10, RGB(0, 0, 200)) : LineXY(10, xs-10, ys-10, 10, RGB(0, 0, 200))
StopDrawing() ; Platzhalterbild fertig
; --------------------------------------------------------------------
If OpenWindow(0, 0, 0, 500, 320, "Drop File(s) Here", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(0, 10, 10, 500 - 20, 30, "")
EditorGadget(1, 10, 50, 500 - 20, 120)
ImageGadget(2, 30, 200, xs, ys, ImageID(EmptyImg), #PB_Image_Border)
ImageGadget(3, 210, 200, xs, ys, ImageID(EmptyImg), #PB_Image_Border)
ImageGadget(4, 380, 200, xs, ys, ImageID(EmptyImg), #PB_Image_Border)
EnableGadgetDrop(0, #PB_Drop_Files, #PB_Drag_Copy)
EnableGadgetDrop(1, #PB_Drop_Files, #PB_Drag_Copy)
EnableGadgetDrop(2, #PB_Drop_Files, #PB_Drag_Copy)
EnableGadgetDrop(3, #PB_Drop_Files, #PB_Drag_Copy)
EnableGadgetDrop(4, #PB_Drop_Image, #PB_Drag_Copy)
BindGadgetEvent(2, @DragStartHandler(), #PB_EventType_DragStart)
Repeat
Select WaitWindowEvent()
Case #PB_Event_GadgetDrop
Select EventGadget()
Case 0 ; Gadgets, die ein Datei/Ordner Drag&Drop Ereignis empfangen haben
If Not FindString(EventDropFiles(), Chr(10)) : SetGadgetText(0, EventDropFiles()) : EndIf ; Nur ein Dropfile/Ordner beachtet
Case 1
SetGadgetText(1, EventDropFiles()) ; Alle Dropfiles/Ordner ausgeben
Case 2
DropToImGad(2);
Case 3
DropToImGad(3);
Case 4
DropToImGad(4);
EndSelect
Case #PB_Event_CloseWindow
CloseWindow(0)
End
EndSelect
ForEver
EndIf
Fragen:
- Wie nutze ich bei EnableGadgetDrop) #PB_Drop_Image richtig, damit nur gedroppte Bilder akzeptiert werden ? Bei meinem Imagegadget(4) geht nichts.
- Kann man auch zwischen Imagegadgets eine Art drag und drop machen, um z.B. Bildpositionen zu tauschen?
Freue mich über jeden Schubs in die richtige Richtung
