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
