wie kann ich am besten ein Rechteck mit gerundeten Ecken zeichnen? Habe irgendwie nichts gefunden. Sorry, falls ich irgendetwas übersehen habe. (Suche oder so

Gruss
PMTheQuick

Code: Alles auswählen
InitSprite()
Procedure rr(x.l, y.l, l.l, b.l, r.l)
If StartDrawing(ScreenOutput())
Line(x+r, y, l-2*r, 0, RGB(255,0,0))
Line(x+r, y+b, l-2*r, 0, RGB(255,255,255))
Line(x, y+r, 0, b-2*r, RGB(0,255,0))
Line(x+l, y+r, 0, b-2*r, RGB(0,0,255))
For i=0 To 90
Plot((x+r)-r*Cos(i/180*#PI), (y+r)-r*Sin(i/180*#PI), RGB(255,255,0))
Plot((x+l-r)+r*Cos(i/180*#PI), (y+r)-r*Sin(i/180*#PI), RGB(255,255,0))
Plot((x+r)-r*Cos(i/180*#PI), (y+b-r)+r*Sin(i/180*#PI), RGB(255,255,0))
Plot((x+l-r)+r*Cos(i/180*#PI), (y+b-r)+r*Sin(i/180*#PI), RGB(255,255,0))
Next
StopDrawing()
EndIf
EndProcedure
If OpenWindow(0, 200, 200, 400, 400, "Rechteck")
If OpenWindowedScreen(WindowID(0), 0, 0, 400, 400, 0,0,0)
EndIf
EndIf
rr(50, 80, 200, 300, 10)
Repeat: Until WindowEvent()=#PB_Event_CloseWindow
Code: Alles auswählen
Width=200
Height=150
PosX=100
PosY=50
Radius=25
If OpenWindow(0, 0, 0, 400, 300, "Rechteck mit abgerundeten Ecken 1", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If StartDrawing(WindowOutput(0))
DrawingMode(#PB_2DDrawing_Outlined)
Box(PosX, PosY, Width, Height, 0)
Circle(PosX+Radius, PosY+Radius, Radius, 0) ;links oben
Circle(PosX+Radius, PosY+Height-Radius, Radius, 0) ;links unten
Circle(PosX+Width-Radius, PosY+Radius, Radius, 0) ;rechts oben
Circle(PosX+Width-Radius, PosY+Height-Radius, Radius, 0) ;rechts unten
Delay(1000)
StopDrawing()
EndIf
CloseWindow(0)
EndIf
Delay(1) ;zur "Stabilität"
If OpenWindow(0, 0, 0, 400, 300, "Rechteck mit abgerundeten Ecken 2", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If StartDrawing(WindowOutput(0))
DrawingMode(#PB_2DDrawing_Outlined)
LineXY(PosX+Radius, PosY, PosX+Width-Radius, PosY, 0) ;oben
LineXY(PosX+Radius, PosY+Height, PosX+Width-Radius, PosY+Height, 0) ;unten
LineXY(PosX, PosY+Radius, PosX, PosY+Height-Radius, 0) ;links
LineXY(PosX+Width, PosY+Radius, PosX+Width, PosY+Height-Radius, 0) ;rechts
Circle(PosX+Radius, PosY+Radius, Radius, 0) ;links oben
Circle(PosX+Radius, PosY+Height-Radius, Radius, 0) ;links unten
Circle(PosX+Width-Radius, PosY+Radius, Radius, 0) ;rechts oben
Circle(PosX+Width-Radius, PosY+Height-Radius, Radius, 0) ;rechts unten
Delay(1000)
StopDrawing()
EndIf
CloseWindow(0)
EndIf
Delay(1)
If OpenWindow(0, 0, 0, 400, 300, "Rechteck mit abgerundeten Ecken 3", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If StartDrawing(WindowOutput(0))
DrawingMode(#PB_2DDrawing_Outlined)
LineXY(PosX+Radius, PosY, PosX+Width-Radius, PosY, 0) ;oben
LineXY(PosX+Radius, PosY+Height, PosX+Width-Radius, PosY+Height, 0) ;unten
LineXY(PosX, PosY+Radius, PosX, PosY+Height-Radius, 0) ;links
LineXY(PosX+Width, PosY+Radius, PosX+Width, PosY+Height-Radius, 0) ;rechts
;Viertelkreis rechts oben
P1XB.d=PosX+Width
P1YB.d=Height
Winkel =89
For i=1 To Winkel
P2YB.d = PosY+Radius - Sin(i/180*#PI)*Radius
P2XB.d = PosX+Width-Radius + Cos(i/180*#PI)*Radius
LineXY(P1XB, P1YB, P2XB, P2YB, 0) ;Viertelkreis
P1XB = P2XB
P1YB = P2YB
Next
;Viertelkreis links oben
P1XB.d=PosX+Radius
P1YB.d=PosY
Winkel =179
For i=91 To Winkel
P2YB.d = PosY+Radius - Sin(i/180*#PI)*Radius
P2XB.d = PosX+Radius + Cos(i/180*#PI)*Radius
LineXY(P1XB, P1YB, P2XB, P2YB, 0) ;Viertelkreis
P1XB = P2XB
P1YB = P2YB
Next
;Viertelkreis links unten
P1XB.d=PosX
P1YB.d=PosY+Height-Radius
Winkel =269
For i=181 To Winkel
P2YB.d = PosY+Height-Radius - Sin(i/180*#PI)*Radius
P2XB.d = PosX+Radius + Cos(i/180*#PI)*Radius
LineXY(P1XB, P1YB, P2XB, P2YB, 0) ;Viertelkreis
P1XB = P2XB
P1YB = P2YB
Next
;Viertelkreis rechts unten
P1XB.d=PosX+Width-Radius
P1YB.d=PosY+Height
Winkel =359
For i=271 To Winkel
P2YB.d = PosY+Height-Radius - Sin(i/180*#PI)*Radius
P2XB.d = PosX+Width-Radius + Cos(i/180*#PI)*Radius
LineXY(P1XB, P1YB, P2XB, P2YB, 0) ;Viertelkreis
P1XB = P2XB
P1YB = P2YB
Next
StopDrawing()
EndIf
Repeat : Event = WaitWindowEvent() : Until Event = #PB_Event_CloseWindow
CloseWindow(0)
EndIf
Code: Alles auswählen
flag = #PB_Window_SystemMenu|1
hwnd = OpenWindow(0,0,0,400,400,"Test",flag)
CreateGadgetList(hwnd)
dc1 = StartDrawing(WindowOutput(0))
SelectObject_(dc1, GetStockObject_(#BLACK_PEN))
SelectObject_(dc1, GetStockObject_(#GRAY_BRUSH))
RoundRect_(dc1,10,10,150,140,25,25)
StopDrawing()
Repeat: event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
End
Code: Alles auswählen
CreateImage(2, 150,150, 32)
StartDrawing(ImageOutput(2))
FillArea(0,0,RGB(0,0,255), RGB(0,0,255))
;-------------------------------------
Circle(50,50, 10, RGB(255,0,0))
Circle(50,100,10, RGB(255,0,0))
Circle(100,50, 10, RGB(255,0,0))
Circle(100,100,10, RGB(255,0,0))
Box(50,40, 50, 70, RGB(255,0,0))
Box(40, 50, 70, 50, RGB(255,0,0))
;--------------------------------------
StopDrawing()
OpenWindow(0, 0,0, 200,200, "Radius im Eck...", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
ImageGadget(1, 0, 0, 150, 150, ImageID(2))
Repeat
Delay(0)
Until WaitWindowEvent() = #PB_Event_CloseWindow
End