Page 2 sur 2

Re: Changer la couleur Bordure Canvas ? (#PB_Canvas_Border)

Publié : lun. 12/nov./2012 16:15
par Ar-S
Ah ok je pige.
Tu pourrais toujours recopier ta couleur de fond de fenêtre et l'appliquer à ton canvas. Le dessin par dessus offrira alors le "juste mélange de couleur" si tu le dessines avec une couche alpha non ?

Re: Changer la couleur Bordure Canvas ? (#PB_Canvas_Border)

Publié : lun. 12/nov./2012 17:38
par kernadec
oui Ar_s je peux faire cela, bien sur je connais les solutions habituelles.
mais il faut pas mal de code pour le faire.

alors que là une simple option transparence et l'on pourrait
travailler avec plusieurs Canvas superposés, choisir les niveaux visibles
tout simplement avec un simple HideGadget etc..

Cordialement

Re: Changer la couleur Bordure Canvas ? (#PB_Canvas_Border)

Publié : lun. 12/nov./2012 17:40
par Backup
kernadec a écrit : enfin, je parlais de la surface de dessin de CanvasGadget.
On pourrait avoir la possibilité de choisir une couleur
de fond avec l'option transparence de cette surface,
genre fenêtre transparente.


Cordialement
en fait c'est facile ! ;)

juste 2 lignes de code ! :mrgreen: :lol: :lol:

Re: Changer la couleur Bordure Canvas ? (#PB_Canvas_Border)

Publié : lun. 12/nov./2012 17:57
par kernadec
eh bien bravo Dobro :D
ce que je cherche c'est rendre un Canvasgadget Transparent sans API.

Cordialement

Re: Changer la couleur Bordure Canvas ? (#PB_Canvas_Border)

Publié : lun. 12/nov./2012 17:58
par Backup
pffff ! mauvais joueur :twisted:

Re: Changer la couleur Bordure Canvas ? (#PB_Canvas_Border)

Publié : lun. 12/nov./2012 18:12
par Ar-S
1 image1 de fond de ta fenetre
1 image2 plus petit de la taille de ton canvas ou tu grab juste l'image original à la position et taille du gadget
puis tu redessines ton image2 avec transparence dans le canvas.
Pas besoin d'API même si quelques lignes de codes sont à prévoir effectivement, mais pas des masses non plus.

Re: Changer la couleur Bordure Canvas ? (#PB_Canvas_Border)

Publié : lun. 12/nov./2012 18:25
par Backup
arf ! je croyais qu'il voulait une reelle transparence !

qu'on voit a travers le Canvas , ET a travers la fenetre ! :lol: (qu'on voit le bureau quoi )

bon voila ce que j'avais trouvé ;)

du reste il me semble qu'il y a un bug de Pb

lors du premier clique sur le canva, la fenetre se barre

on la ramene , on peut dessiner dans le canvas , mais quelque fois ... ???
la fenetre se rebarre au premier clique .... cherchez l'erreur 8O

le code

Code : Tout sélectionner

enumeration
	#win
	#cadre
	#canvas
EndEnumeration

declare WindowCallback(WindowID,message,wParam,lParam)

If OpenWindow(#win, 0, 0, 600, 600, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered|#PB_Window_SizeGadget)
	CanvasGadget(#canvas, 20, 20, 190, 190,#PB_Canvas_Border)
	; ******* grosse arnaque a Dobro  ;o) ***************
	StartDrawing(WindowOutput(#win))
		drawingmode(#PB_2DDrawing_Outlined )
		box(10,10,210,210,rgb(0,0,0)) 
		FillArea(11, 11, -1,rgb(255,0,255))
	StopDrawing()
	
	startdrawing(CanvasOutput(#canvas))
		FillArea(11, 11, -1,rgb(0,125,0)) ;  on met une couleur au fond du Canvas , qui sera la couleur qui deviendra transparente (un fond Vert comme pour la Meteo LOL )
	StopDrawing()
	; *********************************************
	
	;SetWindowColor(#WIN,rgb(0,125,0)) ; si on veut rendre toute la fenetre transparente !! 
	couleuralpha=255
	SetWindowLong_(windowID(#win), #GWL_EXSTYLE, #WS_EX_LAYERED|#WS_EX_TOPMOST)  ; on dit au system que notre fenetre sera "décorée"
	SetLayeredWindowAttributes_(windowID(#win),rgb(0,125,0),couleuralpha,#LWA_COLORKEY|#LWA_ALPHA) ; ici on rends notre vert (rgb(0,125,0)  transparent .. c'est la fameuse "décoration"
	; ******* et voila  ........... fini ****************
	
	
	SetWindowCallback(@WindowCallback())
	
	
	
	
	
	
	Repeat
		Event = WaitWindowEvent(2)
		
		If Event = #PB_Event_Gadget
			if EventGadget() = #canvas 
				;;;If EventType() = #PB_EventType_LeftButtonDown or (EventType() = #PB_EventType_MouseMove )
				if GetGadgetAttribute(#canvas, #PB_Canvas_Buttons) and #PB_Canvas_LeftButton
					If StartDrawing(CanvasOutput(#canvas))
						x = GetGadgetAttribute(#canvas, #PB_Canvas_MouseX)
						y = GetGadgetAttribute(#canvas, #PB_Canvas_MouseY)
						Circle(x, y, 10, RGB(Random(255), Random(255), Random(255)))
					StopDrawing()
				Endif
				;;;EndIf
			Endif
		EndIf
	EndIf    
	
Until Event = #PB_Event_CloseWindow
EndIf



Procedure WindowCallback(WindowID,message,wParam,lParam)
; by Dobro

res=#PB_ProcessPureBasicEvents
Select message
	Case #WM_PAINT
	; ******* grosse arnaque a Dobro  ;o) ***************
	StartDrawing(WindowOutput(#win))
		drawingmode(#PB_2DDrawing_Outlined )
		box(10,10,210,210,rgb(0,0,0)) 
		FillArea(11, 11, -1,rgb(0,255,0))
		drawingmode(#PB_2DDrawing_Default )
		; haut
		for i=2 to 204 step 6
			circle(11+i,15,2,rgb(random(255),random(255),random(255)))
		next i
		; bas
		for i=2 to 204 step 6
			circle(11+i,213,2,rgb(random(255),random(255),random(255)))
		next i
		; gauche
		for i=2 to 204 step 6
			circle(15,11+i,2,rgb(random(255),random(255),random(255)))
		next i
		; droite
		for i=2 to 204 step 6
			circle(213,11+i,2,rgb(random(255),random(255),random(255)))
		next i
	StopDrawing()
	
	; *********************************************
	delay(10)
	ProcedureReturn #True
EndSelect
ProcedureReturn res ; important , laissez passer les autres evenements !!!
EndProcedure







; 

; EPB

Re: Changer la couleur Bordure Canvas ? (#PB_Canvas_Border)

Publié : lun. 12/nov./2012 18:32
par kernadec
merci Ar_s, je sais que l'on peut faire comme cela.
mais bon... tu as sans doute raison.

Cordialement

Re: Changer la couleur Bordure Canvas ? (#PB_Canvas_Border)

Publié : lun. 12/nov./2012 18:59
par kernadec
merci Dobro c'est pas mal..

le problème, c'est que le canvas est transparent au premier clic on dessine.
ensuite il n'est plus transparent car on est passé au travers
on se retrouve sur le bureau plus moyen de retourner
sur la surface transparente du canvas... dommage.

encore merci

Cordialement

Re: Changer la couleur Bordure Canvas ? (#PB_Canvas_Border)

Publié : lun. 12/nov./2012 19:15
par Backup
chez moi le comportement est différent

je lance le prg ( sous debugger )

je clique pour dessiner , la fenetre se barre
je la rappel par la barre des taches (le canvas perd sa transparence )

je peux enfin dessiner et le canvas redevient transparent

et ...

si je relache le click , et que je reclik a nouveau pour dessiner , soit ça marche
soit la fenetre se rebarre !! 8O

c'est pourquoi je pense a un bug PB

Re: Changer la couleur Bordure Canvas ? (#PB_Canvas_Border)

Publié : lun. 12/nov./2012 19:24
par kernadec
bug je sais pas ..
pareil il disparait après avoir dessiné.
avec l'icone prg dans la barre de tache, il réapparait.
mais je me retrouve avec le curseur texte dans l'IDE de PB au travers du canvas
si je redessine, il me sélectionne du code texte.