Comment afficher un simple rond blanc dans une fenêtre ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Patix
Messages : 102
Inscription : ven. 19/nov./2004 14:17

Comment afficher un simple rond blanc dans une fenêtre ?

Message par Patix »

Bonjour,

... et bonne année à Tous ! 8)

J'essaie d'afficher un simple rond blanc dans une fenêtre et j'ai un souci.

Mon rond blanc apparait dans un carré noir. Est il possible de ne voir que mon beau rond blanc ?

Si oui, comment ?

Code : Tout sélectionner

If CreateImage(#id_rondblanc,30,30) And StartDrawing(ImageOutput(#id_rondblanc))
  ;DrawingMode(#PB_2DDrawing_Transparent)
  Circle(15,15,15,RGB(255,255,255))
  StopDrawing() 
EndIf 

ImageGadget(#id_rond1,20,45,0,0,ImageID(#id_rondblanc))
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Comment afficher un simple rond blanc dans une fenêtre ?

Message par Mesa »

Par défaut, le fond d'une image est toujours noir, celui d'un canva est toujours blanc.

Il faut donc récupérer ou forcer la couleur du fond de la fenêtre, du bouton, ...

Code : Tout sélectionner

#id_rondblanc=100
#id_rond1=101
#Fenetre=0
OpenWindow(#Fenetre,0,0,500,500,"Rond")
If CreateImage(#id_rondblanc,30,30) And StartDrawing(ImageOutput(#id_rondblanc))
  DrawingMode(#PB_2DDrawing_Transparent)
  ; couleur du fond forcé en gris
  SetWindowColor(#Fenetre, RGB(192,192,192))
  Box(0,0,30,30,RGB(192,192,192)) ; on trace un rectangle gris
  Circle(15,15,15,RGB(255,255,255))
  StopDrawing()
EndIf

ImageGadget(#id_rond1,20,45,30,30,ImageID(#id_rondblanc))

Repeat 
    Event = WindowEvent() 

  Until Event = #PB_Event_CloseWindow
Mesa.
zaphod
Messages : 135
Inscription : dim. 07/déc./2008 9:32

Re: Comment afficher un simple rond blanc dans une fenêtre ?

Message par zaphod »

...
Dernière modification par zaphod le dim. 27/mai/2012 7:24, modifié 1 fois.
Patix
Messages : 102
Inscription : ven. 19/nov./2004 14:17

Re: Comment afficher un simple rond blanc dans une fenêtre ?

Message par Patix »

Merci pour la réponse.

J'ai fais ceci pour l'instant. Mais l’idéal serait de changer la couleur du carré en fonction de la couleur de la fenêtre !

Code : Tout sélectionner

#id_rondblanc=100
#id_rond1=101
#Fenetre=0
OpenWindow(#Fenetre,0,0,500,500,"Rond")
If CreateImage(#id_rondblanc,30,30) And StartDrawing(ImageOutput(#id_rondblanc))
  Box(0,0,30,30,RGB(223,224,227)) ; on trace un rectangle gris
  Circle(15,15,15,RGB(255,255,255))
  StopDrawing()
EndIf

ImageGadget(#id_rond1,20,45,30,30,ImageID(#id_rondblanc))

Repeat
    Event = WindowEvent()

  Until Event = #PB_Event_CloseWindow
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Comment afficher un simple rond blanc dans une fenêtre ?

Message par dayvid »

C'est possible !

En faite tu crée ta fenêtre et tu lui attribus une couleur grace a une variable
exemple:

Couleur fenêtre = (ColordWindows ou inverse, je sais plus, bref)
ensuite tu met ton carrer de la couleur de la fenêtre grace a cette variable là

désoler, peut pas t'aider plus car pas pure basic sous la main :oops:
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Comment afficher un simple rond blanc dans une fenêtre ?

Message par Ar-S »

Tu attribues une couleur au fond de ta fenêtre avec setwindowcolor()
Et la même couleur au carré...

(je pense que c'est ce qu'à voulu dire dayvid)

En gros ça donne ça.

Code : Tout sélectionner

#id_rondblanc=100
#id_rond1=101
#Fenetre=0

#COULEUR = $00CCFF ; couleur (orange) souhaitée (équivaut à BVR (bleu vert rouge) et non à RVB

OpenWindow(#Fenetre,0,0,500,500,"Rond")

; Couleur de fond de ta fenêtre
SetWindowColor(#Fenetre,#COULEUR)

If CreateImage(#id_rondblanc,30,30) And StartDrawing(ImageOutput(#id_rondblanc))
    Box(0,0,30,30,#COULEUR) ; on trace un rectangle de la même couleur que la fenêtre
    Circle(15,15,15,RGB(255,255,255))
  StopDrawing()
EndIf

ImageGadget(#id_rond1,20,45,30,30,ImageID(#id_rondblanc))

Repeat
  Event = WindowEvent()
  
Until Event = #PB_Event_CloseWindow
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Comment afficher un simple rond blanc dans une fenêtre ?

Message par Mesa »

On peut récupérer la couleur du fond, voir ici http://www.purebasic.fr/english/viewtop ... und+colour

Code : Tout sélectionner

#id_rondblanc=100
#id_rond1=101
#Fenetre=0
OpenWindow(#Fenetre,0,0,500,500,"Rond")
If CreateImage(#id_rondblanc,30,30) And StartDrawing(ImageOutput(#id_rondblanc)) ; 
  Couleur_du_Fond=GetSysColor_(#COLOR_3DFACE);<-- windows seulement
  Box(0,0,30,30,Couleur_du_Fond) ; on trace un rectangle de la couleur du fond
  Circle(15,15,15,RGB(255,255,255))
  StopDrawing()
EndIf

ImageGadget(#id_rond1,20,45,30,30,ImageID(#id_rondblanc))

Repeat
    Event = WindowEvent()

  Until Event = #PB_Event_CloseWindow
  
On peut aussi utiliser

Code : Tout sélectionner

Couleur = Point(x, y)
On peut aussi utiliser le canal alpha :

Code : Tout sélectionner

CreateImage(0, 100, 100, 32)
StartDrawing(ImageOutput(0))
  DrawingMode(#PB_2DDrawing_AlphaChannel)
  Box(0, 0, 100, 100, RGBA(0, 0, 0, 0))
  DrawingMode(#PB_2DDrawing_AllChannels)
  Box(25, 25, 51, 51, RGBA(255, 0, 0, 255))
  DrawingMode(#PB_2DDrawing_AllChannels | #PB_2DDrawing_Outlined)
  Circle(50, 50, 45, RGBA(0, 192, 40, 255))
  Circle(51, 50, 45, RGBA(0, 192, 40, 255))
  Circle(50, 51, 45, RGBA(0, 192, 40, 255))
  Circle(49, 50, 45, RGBA(0, 192, 40, 255))
  Circle(50, 49, 45, RGBA(0, 192, 40, 255))
StopDrawing()


OpenWindow(0, 0, 0, 512, 384, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
ImageGadget(0, 0, 0, 0, 0, ImageID(0))

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
  EndSelect
ForEver
Mesa.
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Comment afficher un simple rond blanc dans une fenêtre ?

Message par Mesa »

J'ai trouvé un vieux code pour afficher les couleurs sytème :

Code : Tout sélectionner

;/ Display system colors
;/ sverson 02/2005

Structure SYSCOLORS
  ColorConst.s
  ColorNumber.l
EndStructure
Global NewList ColorList.SYSCOLORS()

Procedure InitColorList()
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_3DDKSHADOW" : ColorList()\ColorNumber = 21
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_3DFACE = #COLOR_BTNFACE" : ColorList()\ColorNumber = 15
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_3DHILIGHT = #COLOR_BTNHIGHLIGHT" : ColorList()\ColorNumber = 20
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_3DHIGHLIGHT = #COLOR_BTNHIGHLIGHT" : ColorList()\ColorNumber = 20
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_3DLIGHT" : ColorList()\ColorNumber = 22
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_3DSHADOW = #COLOR_BTNSHADOW" : ColorList()\ColorNumber = 16
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_ACTIVEBORDER" : ColorList()\ColorNumber = 10
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_ACTIVECAPTION" : ColorList()\ColorNumber = 2
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_APPWORKSPACE" : ColorList()\ColorNumber = 12
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_BACKGROUND" : ColorList()\ColorNumber = 1
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_BTNFACE" : ColorList()\ColorNumber = 15
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_BTNHIGHLIGHT" : ColorList()\ColorNumber = 20
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_BTNHILIGHT = #COLOR_BTNHIGHLIGHT" : ColorList()\ColorNumber = 20
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_BTNSHADOW" : ColorList()\ColorNumber = 16
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_BTNTEXT" : ColorList()\ColorNumber = 18
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_CAPTIONTEXT" : ColorList()\ColorNumber = 9
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_DESKTOP = #COLOR_BACKGROUND" : ColorList()\ColorNumber = 1
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_GRADIENTACTIVECAPTION" : ColorList()\ColorNumber = 27
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_GRADIENTINACTIVECAPTION" : ColorList()\ColorNumber = 28
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_GRAYTEXT" : ColorList()\ColorNumber = 17
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_HIGHLIGHT" : ColorList()\ColorNumber = 13
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_HIGHLIGHTTEXT" : ColorList()\ColorNumber = 14
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_HOTLIGHT" : ColorList()\ColorNumber = 26
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_INACTIVEBORDER" : ColorList()\ColorNumber = 11
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_INACTIVECAPTION" : ColorList()\ColorNumber = 3
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_INACTIVECAPTIONTEXT" : ColorList()\ColorNumber = 19
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_INFOBK" : ColorList()\ColorNumber = 24
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_INFOTEXT" : ColorList()\ColorNumber = 23
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_MENU" : ColorList()\ColorNumber = 4
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_MENUTEXT" : ColorList()\ColorNumber = 7
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_SCROLLBAR" : ColorList()\ColorNumber = 0
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_WINDOW" : ColorList()\ColorNumber = 5
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_WINDOWFRAME" : ColorList()\ColorNumber = 6
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_WINDOWTEXT" : ColorList()\ColorNumber = 8
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLORMATCHTOTARGET_EMBEDED" : ColorList()\ColorNumber = 1
  AddElement(ColorList()) : ColorList()\ColorConst = "#COLORONCOLOR" : ColorList()\ColorNumber = 3
EndProcedure

InitColorList()
If OpenWindow(0,10,10,640,CountList(ColorList())*15+1,"Display system colors",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  background = GetSysColor_(#COLOR_WINDOW)
  font1=LoadFont(0, "Arial", 8)
  If StartDrawing(WindowOutput(0))
    DrawingFont(font1)
    FirstElement(ColorList())
    For a = 0 To CountList(ColorList())-1
      SysColor = GetSysColor_(ColorList()\ColorNumber)
      Box(0,15*a,640,16,RGB(0,0,0))
      Box(1,15*a+1,638,14,RGB(255,255,255))
      Box(300,15*a+2,200,12,SysColor)
      FrontColor($000000)
      BackColor($ffffff)
      ;Locate(12,15*a+1)
      DrawText(12,15*a+1,RSet(Str(ColorList()\ColorNumber),3,"0")+"  "+ColorList()\ColorConst)
      ;Locate(510,15*a+1)
      DrawText(510,15*a+1,RSet(Str(SysColor),8,"0")+"  "+RSet(Str(Red(SysColor)),3,"0")+"/"+RSet(Str(Green(SysColor)),3,"0")+"/"+RSet(Str(Blue(SysColor)),3,"0"))
      NextElement(ColorList())
    Next
    StopDrawing()
  EndIf
  Repeat
      EventID.l = WaitWindowEvent()
  Until EventID = #PB_Event_CloseWindow
  CloseWindow(0)
EndIf
End
Mesa.
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Comment afficher un simple rond blanc dans une fenêtre ?

Message par dayvid »

On peut aussi utiliser

Code : Tout sélectionner

Couleur = Point(x, y)
Oui mais attention, ce que tu oublie de dire, c'est qu'il faut utiliser ceci dans une
une fourchette gràce à:

StartDrawing / StopDrawing

Bin oui sinon ça foire automatiquement :lol:
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Comment afficher un simple rond blanc dans une fenêtre ?

Message par Mesa »

Oui, c'était sous-entendu je pense mais encore plus simple et plus bête 8O 8O 8O , pas besoin de créer une image pour dessiner dans une fenêtre :!: :!: :!:

Code : Tout sélectionner

#Fenetre=0
OpenWindow(#Fenetre,0,0,50,50,"Rond")

  StartDrawing(WindowOutput(#Fenetre))

  Circle(25,25,15,RGB(255,255,255))
  
  StopDrawing()

Repeat
    Event = WindowEvent()
Until Event = #PB_Event_CloseWindow
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Comment afficher un simple rond blanc dans une fenêtre ?

Message par Ar-S »

Attention ça ne fonctionne plus en cas de coloration de la fenêtre.

Code : Tout sélectionner

#Fenetre=0
OpenWindow(#Fenetre,0,0,50,50,"Rond")
SetWindowColor(#Fenetre,$FFCC00)

StartDrawing(WindowOutput(#Fenetre))
  
	Circle(25,25,15,$CCFF00)
	
StopDrawing()

Repeat
  event = WindowEvent()
Until event = #PB_Event_CloseWindow

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Comment afficher un simple rond blanc dans une fenêtre ?

Message par Le Soldat Inconnu »

oui, car il faut redessiner le contenu à chaque rafraichissement dans ce cas.

Code : Tout sélectionner

#Fenetre=0
OpenWindow(#Fenetre,0,0,50,50,"Rond")
SetWindowColor(#Fenetre,$FFCC00)

Repeat
	event = WindowEvent()
	
	If event = #PB_Event_Repaint
		StartDrawing(WindowOutput(#Fenetre))
			
			Circle(25,25,15,$CCFF00)
			
		StopDrawing()
	EndIf
Until event = #PB_Event_CloseWindow
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre