Meinst du eine freie, rechteckige Auswahl?
Beispiel für Auswahlrahmen mit gedrückter, linker Maustaste aufziehen:
Variablen path und color bitte entsprechend anpassen
Code: Alles auswählen
EnableExplicit
Structure struct_auswahl
x.l ;Startpunkt der Auswahl, -1 wenn nichts ausgewählt ist
y.l ;Startpunkt der Auswahl
width.l ;Breite der Auswahl
height.l ;Höhe der Auswahl
selecting.b
EndStructure
OpenWindow(0,0,0,400,400,"Auswahlrahmen",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
Global auswahl.struct_auswahl
Global path.s = "test.bmp"
Global color = #Green
LoadImage(0,path)
If Not IsImage(0)
Debug "Fehler beim Laden von "+path+"!"
End
EndIf
CreateImage(1,ImageWidth(0),ImageHeight(0))
Procedure repaint()
Protected mx, my
mx = WindowMouseX(0)
my = WindowMouseY(0)
StartDrawing(ImageOutput(1))
DrawImage(ImageID(0),0,0)
If mx <> -1 And my <> -1 ;Maus innerhalb des Fensters?
If auswahl\selecting = #True
auswahl\width = mx - auswahl\x
auswahl\height = my - auswahl\y
EndIf
EndIf
If auswahl\x <> -1 ;wenn etwas ausgewählt ist
DrawingMode(#PB_2DDrawing_Outlined)
Box(auswahl\x,auswahl\y,auswahl\width,auswahl\height,color)
EndIf
StopDrawing()
StartDrawing(WindowOutput(0))
DrawImage(ImageID(1),0,0)
StopDrawing()
EndProcedure
auswahl\selecting = #False
auswahl\x = -1
Repeat
Define event = WaitWindowEvent(10)
Select event
Case #PB_Event_CloseWindow
End
Case #WM_LBUTTONDOWN ;linke Maustaste gedrückt
auswahl\x = WindowMouseX(0)
auswahl\y = WindowMouseY(0)
auswahl\selecting = #True
Case #WM_LBUTTONUP ;linke Maustaste losgelassen
auswahl\selecting = #False
If auswahl\width = 0
auswahl\x = -1
EndIf
EndSelect
repaint()
ForEver
Noch ein kleiner Tipp zur Auswahlfarbe:
Eine feste Farbe wie in meinem Beispiel ist nicht optimal, wenn man vorher nicht genau weiß wie die Grafik aussieht, denn evtl. ist der Rahmen dann schlecht oder garnicht zu sehen.
Besser wäre es den Rahmen automatisch abzuheben, z.B. gestreift, blinkend oder eine eigene Prozedur schreiben, um die Linien als Negativ des darunter liegenden Bildes zu zeichnen. Das wird dann zwar bunt, aber ist meist gut zu sehen.