Page 1 sur 1

[Resolut] Rectangle avec coins arrondis

Publié : jeu. 05/mars/2009 18:43
par MLD
Bonjour a tous
Je souhaite pouvoir dans une fenêtre, dessiner des rectangles a coins arrondis, de couleurs différentes.
J'ai essayé le code ci-dessous, mais sans résultat. Pourtant le retour de la fonction RoundRect est non nul.
Pouvez vous éclairer ma faible lanterne. Merci

Code : Tout sélectionner

; 5 - 3 - 2009 PB 4.30
; rectangle avec coins arrondis

 OpenWindow(0, 0, 0, 320, 170, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)  

hdc = GetWindowDC_(hwnd) 
 ;Debug  hdc
hpen=CreatePen_(#PS_SOLID, 1, RGB(0,0,245) )
           Old_Pen=SelectObject_(hdc,hpen) 
           RoundRect_ (hdc, 10,50,50,50,10,10)
;debug  RoundRect_ (hdc, 10,50,50,50,10,10)
           ;On remet l'ancien Pen au Hdc 
           SelectObject_(hdc,Old_Pen) 
            
           ;On détruit notre Pen 
           DeleteObject_(hpen) 
 Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow


s'il te plait , Utilise le bouton Code au dessus de l'editeur de la création de message
lorsque tu veux poster un code !!

Réedite ce message et regarde les balises pour comprendre !!

Publié : jeu. 05/mars/2009 19:32
par Ollivier
@MLD

Tiens voilà, une fonction faite maison, c'est du bio...

Code : Tout sélectionner

Procedure RoundRect(x, y, w, h, r, c)
   Protected I.L
   Protected J.L
   Protected Angle.F
   Dim x.F(3)
   Dim y.F(3)
   Protected xf.F
   Protected yf.F
   LineXY(x + r, y, x + w - r, y, c)
   LineXY(x + r, y + h, x + w - r, y + h, c)
   LineXY(x, y + r, x, y + h - r, c)
   LineXY(x + w, y + r, x + w, y + h - r, c)
   For I = 0 To 90
      For J = 0 To 3
         Angle = I * #PI / 180.0
         xf = x + r + Cos(Angle + (J * #PI / 2.0) ) * r
         yf = y + r - Sin(Angle + (J * #PI / 2.0) ) * r
         Flag = 0
         If (J & 2)
            yf = yf + h - 2 * r
            Flag = 1
         EndIf
         If ((J ! Flag) & 1) = 0
            xf = xf + w - 2 * r
         EndIf
         If I > 0 And I < 90
            LineXY(xf, yf, x(J), y(J), c)
         EndIf
         x(J) = xf
         y(J) = yf
      Next J
   Next I
EndProcedure

ExamineDesktops()
dw = DesktopWidth(0)
dh = DesktopHeight(0)
dd = DesktopDepth(0)

OpenWindow(0, 50, 50, dw - 100, dh - 100, "", $cf0001)
Repeat
   StartDrawing(WindowOutput(0) )
      RoundRect(50, 50, dw - 200, dh - 200, 20, #Red)
   StopDrawing()
Until WaitWindowEvent() = 16
CloseWindow(0)

Publié : jeu. 05/mars/2009 20:42
par zaphod
J'ai testé ça :

Code : Tout sélectionner

OpenWindow(0,10,10,600,400,"teste",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) 
hwnd=WindowID(0) 
hdc=GetDC_(hwnd) 
RoundRect_(hdc,50, 50, 250, 150, 50, 50) 
  
Repeat 
  Event=WaitWindowEvent() 
Until Event=#PB_Event_CloseWindow  
Z@ph0d//

dessin de rectangle rayonné

Publié : jeu. 05/mars/2009 22:59
par chercheacomprendre
super je note vos codes les amis.

salut.

Rectangle avec coins arrondis

Publié : ven. 06/mars/2009 8:44
par MLD
OK. Problème résolut.
Merci a tous
Michel