So, habe den Code fertig. Ist nicht besonders schön, aber er funktioniert.
Glaube ich.
Allerdings nur unter Linux getestet.
Bilder werden nicht gebraucht.
Code: Alles auswählen
; Test Imagegadget
; PB 4.20
;{ Enumeration
Enumeration
#fe_main
#bild_hintergrund_original
#bild_hintergrund_neu
#bild_objekt
#ga_imagegadget
EndEnumeration
;}
;{ Variablen
Global ywert.l
Global xwert.l
Global anfangx.l
Global anfangy.l
;}
;{ Prozeduren
Procedure bildposition()
; hier würde das Bild ohne Raster gesetzt
;#########################################
;anfangx = xwert - 10
;anfangy = ywert - 10
;#########################################
; Das hier ist wegen des Setzen des Bildes im 20-er Raster
;#########################################
anfangx = Int((xwert + 5)/20) * 20
anfangy = Int((ywert + 5)/20) * 20
;#########################################
; einfach mal probieren
EndProcedure
;}
;{ Initialisierung
; Bilder erzeugen
CreateImage(#bild_hintergrund_original,400,400,32)
CopyImage(#bild_hintergrund_original,#bild_hintergrund_neu)
CreateImage(#bild_objekt,20,20,32)
; ein wenig farbe
StartDrawing(ImageOutput(#bild_objekt))
Box(0,0,9,9,RGB(255,255,0))
Box(0,10,10,20,RGB(255,0,0))
Box(10,0,20,9,RGB(0,255,0))
Box(10,10,20,20,RGB(0,0,255))
StopDrawing()
;}
;{ Fenster
OpenWindow(#fe_main,0,0,420,420,"Test Imagegadget - mit klick bild ablegen",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(#fe_main))
ImageGadget(#ga_imagegadget,10,10,400,400,ImageID(#bild_hintergrund_original))
;}
;{ Schleife
Repeat
Event = WaitWindowEvent()
; Mausposition bestimmen
xwert = WindowMouseX(#fe_main)
ywert = WindowMouseY(#fe_main)
If Event = #PB_Event_Gadget
Select EventGadget()
Case #ga_imagegadget
; und hier bei Linksklick das Bild ablegen
If EventType() = #PB_EventType_LeftClick
; position bestimmen
bildposition()
StartDrawing(ImageOutput(#bild_hintergrund_neu))
DrawImage(ImageID(#bild_objekt), anfangx, anfangy)
StopDrawing()
CopyImage(#bild_hintergrund_neu,#bild_hintergrund_original)
SetGadgetState(#ga_imagegadget,ImageID(#bild_hintergrund_original))
EndIf
EndSelect
EndIf
; Wenn Mauszeiger im Fenster
If xwert > 10 And xwert < 410
If ywert > 10 And ywert < 410
; Position bestimen
bildposition()
; Auf dem Hintergrundbild das Objekt malen
StartDrawing(ImageOutput(#bild_hintergrund_neu))
DrawImage(ImageID(#bild_objekt),anfangx,anfangy)
StopDrawing()
; Hintergrundbild ins Imagegadget malen
SetGadgetState(#ga_imagegadget,ImageID(#bild_hintergrund_neu))
; Bilder zurück kopieren
CopyImage(#bild_hintergrund_original,#bild_hintergrund_neu)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
;}
Dann probier mal ein bißchen rum.
Torsten
Edit: Code noch mal geändert, war noch einFehler drin