Page 1 sur 1

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

Publié : jeu. 05/janv./2012 16:06
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))

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

Publié : jeu. 05/janv./2012 18:24
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.

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

Publié : jeu. 05/janv./2012 18:49
par zaphod
...

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

Publié : ven. 06/janv./2012 10:31
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

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

Publié : ven. 06/janv./2012 14:08
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:

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

Publié : ven. 06/janv./2012 18:13
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

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

Publié : ven. 06/janv./2012 18:57
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.

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

Publié : ven. 06/janv./2012 18:59
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.

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

Publié : mar. 10/janv./2012 13:45
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:

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

Publié : mar. 10/janv./2012 15:05
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

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

Publié : mar. 10/janv./2012 17:35
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


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

Publié : mar. 10/janv./2012 22:56
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