Page 1 sur 1

Dessiner sur une fenêtre

Publié : sam. 18/juin/2016 18:26
par JohnJohnsonSHERMAN
J'avais envie, a l'occasion du passage de SherPlay en FMOD, de dessiner le spectre de la musique sur le fond de la fenêtre pendant la lecture.
Je me demandais juste si c'était possible de dessiner sur le fond d'une fenêtre sans effacer tous les gadgets qui y sont... J'ai fait quelques essais, mais ca flashe, et les éventuels gadgets qui sont emprisonnés sous la zone de dessin sont effacés (le dessin se fait par dessus :? ). Y-a t'il un moyen de forcer le dessin a se faire en dessous des gadgets..? :?:

Re: Dessiner sur une fenêtre

Publié : sam. 18/juin/2016 18:39
par Zorro
donne un peu de code, qu'on vois comment tu t'y prends ;)

là comme ça , c'est difficile de deviner ce que tu veux

Re: Dessiner sur une fenêtre

Publié : sam. 18/juin/2016 19:02
par JohnJohnsonSHERMAN
Petit exemple fait a l'arrache...

Code : Tout sélectionner

x=20
;Quant on clique sur le bouton ou que l'on ne fait rien, le crecle rouge se dessie dessus le bouton et non en dessous...
OpenWindow(0,0,0,240,240,"Exemple de dessin sur la fenêtre",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(0,10,10,200,200,"Gros bouton qui va être effacé par le dessin...")
Repeat
  event=WaitWindowEvent(10)
  StartDrawing(WindowOutput(0))
  Circle(x,120,20,RGB(255,0,0))
  StopDrawing()
  x=x+1
  If x > 240-20
    x=20
  EndIf
  
Until event=#PB_Event_CloseWindow
Je me demandais s'il était possible que le cercle rouge (dans le cas de cet exemple) se dessine sous le bouton et non par dessus ?

Merci d'avance.

Re: Dessiner sur une fenêtre

Publié : sam. 18/juin/2016 22:02
par Zorro
en fait le principe est assez simple :)

on est des programmeurs ?

bon programmons !
le but: ne pas dessiner sur le bouton ??? , et bien , une jolie condition , et voila :
note que la condition isole le bouton , donc marche aussi avec ton cercle qui defile ...
si tu avait plusieurs gadget, le principe est le meme , tu isoles chaque gadget par une condition..
c'est un peut complexe a coder, mais apres t'es tranquilles :)
remarque aussi que le fait d'avoir utilisé les fonction Gadgetx , GagdetWith() etc ... permet de modifier
la position ou la taille du gadget sans modifier la ligne concernant la condition
on pourrai en faire une procedure du coup ;) [reedit] code modifié dans ce sens :)

là on est pas dans l'ecran, donc faut tout gerer .. ;)

exemple modifié pour montrer avec 2 boutons

Code : Tout sélectionner

;***********************************************
;Titre  :*evite_gadget
;Auteur  : Zorro
;Date  :19/06/2016
;Heure  :09:51:12
;Version Purebasic :  PureBasic 5.42 LTS (Windows - x86)
;Version de l'editeur :EPB V2.62
; Libairies necessaire : Aucune 
;***********************************************

enumeration
	#win
	#bouton
	#bouton2
EndEnumeration
Declare Evite_gadget(num_gadget,x,y,taux)
InitSprite()
;Quant on clique sur le bouton ou que l'on ne fait rien, le crecle rouge se dessie dessus le bouton et non en dessous...
OpenWindow(#win,0,0,240,240,"Exemple de dessin sur la fenêtre",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(#bouton,50,50,150,30," bouton 1")
ButtonGadget(#bouton2,10,150,150,30," bouton 2" )
Repeat
	event=WaitWindowEvent(2)
	Select event
		Case #PB_Event_Gadget
		Select EventGadget()
			Case #bouton
			Debug "bouton1 clické"
			Case #bouton2
			Debug "bouton2 clické"
		EndSelect
		Case #PB_Event_CloseWindow
		end
	EndSelect
	
	color=rgb(random(255,50),random(255,50),random(255,50)) : xs=random(240,0) : ys=random(240,0)
	if Evite_gadget(#bouton,xs,ys,8)=#true and Evite_gadget(#bouton2,xs,ys,8)
		StartDrawing(windowOutput(#win))
			Circle(xs,ys,10,color)
		StopDrawing()
	Endif
	
ForEver
Procedure Evite_gadget(num_gadget,x,y,taux)
	; By Dobro
	; renvoi True si les coordonées entrée sont en dehors de la position du gadget 
	;num_gadget = numero du gadget a surveiller
	;x,y = coordonées entrées ,on teste si elle sont dans la zone du gadget, si oui renvoi #False
	;taux = petite marge avant ou apres le gadget pour eloigner le dessins des bords du gadget
	if (x<gadgetx(num_gadget)-taux or x>gadgetx(num_gadget)+GadgetWidth(num_gadget)+taux) or (y<gadgetY(num_gadget)-taux or y>gadgetY(num_gadget)+GadgetHeight(num_gadget)+taux) ; on protege le bouton
		ProcedureReturn #True
	Else
		ProcedureReturn #false
	Endif
EndProcedure

; Epb


Re: Dessiner sur une fenêtre

Publié : dim. 19/juin/2016 10:46
par JohnJohnsonSHERMAN
Merci Zorro!!
Et bien la seule chose a redire c'est que ca marche :P :lol: !
Me reste plus qu'a adapter ca dans SherPlay quand j'aurais le temps, ca promet de bien me faire c**** euh de me rendre la vie dure, vu que Sherplay n'est qu'un amoncellement de gadgets en tout genres y compris des canvas ou il faut dessiner et d'autres ou il ne faut pas... Mais bon j'y arriverais, avec un peu de courage et beaucoup de détermination on peut faire n'importe quoi aprés tout (tiens ca ferait une belle signature ca... 8) )...

N'empêche les solutions simples je les voit jamais... Ouiiin :( :cry:

Re: Dessiner sur une fenêtre

Publié : dim. 19/juin/2016 11:28
par Zorro
JohnJohnsonSHERMAN a écrit :N'empêche les solutions simples je les voit jamais... Ouiiin :( :cry:
alors que moi c'est total inverse !!
je suis incapable de resoudre des problemes complexe, sans simplifier au max
etant partisant du moindre effort,ma paresse naturelle me pousse a rechercher le plus directe
au point de souvent "bidouiller" :)
j'ose meme souvent des trucs que d'auqu'un ne penserai pas , par "culture" ou "savoir"

comme la phrase des papillotes de noel , "tout le monde disaient que c'etait impossible, il est venu un imbécile qui ne le savait pas.... il l'a fait !" :)

le contre point de ceci , c'est que si le probleme ne se resouds pas avec une bidouille , je suis dans la galere :lol:

au secours, le forum anglais, les tronches de l'algorythme , je suis largué ! :)

Re: Dessiner sur une fenêtre

Publié : dim. 19/juin/2016 11:58
par JohnJohnsonSHERMAN
Le probléme tu vois c'est qu'il y a deux types de programmeurs : ceux qui sont flemmards et qui trouvent des solutions simples aux problémes compliqués :P , et les génies de l'octet qui trouvent des solutions compliquées aux problémes simples 8) ... J'appartiens a la troisiéme catégorie :mrgreen:... ... ceux qui ne pensent pas aux trucs simples et n'ont pas les connaissances pour les trucs compliqués :roll: :!:

Re: Dessiner sur une fenêtre

Publié : lun. 20/juin/2016 7:55
par Marc56
Les jeunes programmeurs (arrivés sur le « marché » avec l'Internet) ont une fâcheuse tendance à faire du copié/collé à tout bout de champs sans (parfois|souvent) chercher à savoir comment ça marche :roll:

Les vieux (et nous sommes nombreux sur ce forum) qui ont commencé l'informatique perso en tapant des codes lignes par ligne depuis des mensuels cherchent avant tout à savoir si dans ce qu'il tapent, tout est véritablement utile. C'était long de taper et chaque faute de frappe se paye (sans oublier les fautes d'imprimerie, où il fallait attendre la correction le mois suivant :o si on n'avait pas trouvé tout seul)

Je me souviens avoir porté une fois un bloc de code pour écrire des sommes de chiffres en lettres. S'agissant d'une application destinée à être utilisée en france, j'ai supprimé les septantes, les nonantes et les séparateurs de milliers et un tas d'autres trucs, réduisant ainsi la lib des deux tiers. :)

Après, le plus dur est de se rappeler où on a mis ce super algo simplifié qu'on a mis au point et même comment on a appelé ce fichier qu'on a gardé précieusement :mrgreen:

Re: Dessiner sur une fenêtre

Publié : lun. 20/juin/2016 8:39
par Zorro
Marc56 a écrit : Je me souviens avoir porté une fois un bloc de code pour écrire des sommes de chiffres en lettres. S'agissant d'une application destinée à être utilisée en france, j'ai supprimé les septantes, les nonantes et les séparateurs de milliers et un tas d'autres trucs, réduisant ainsi la lib des deux tiers. :)

Après, le plus dur est de se rappeler où on a mis ce super algo simplifié qu'on a mis au point et même comment on a appelé ce fichier qu'on a gardé précieusement :mrgreen:

ben t'as qu'a demander , je vais te le retrouver :)

http://www.purebasic.fr/french/viewtopic.php?f=1&t=8136

Re: Dessiner sur une fenêtre

Publié : lun. 20/juin/2016 9:07
par Marc56
Ce n'est pas celui-là.
Celui dont je suis parti était écrit initialement en VB, je l'ai porté successivement en fonction des utilisations, en VBA puis Perl, puis PB.
C'était un truc qui pouvait paraitre archaïque au premier abord, car il mettait les premiers nombres sous forme de tableaux. Mais ensuite, il gérait les quelques exceptions en une poignée de lignes (les ET par exemple)

Re: Dessiner sur une fenêtre

Publié : lun. 20/juin/2016 13:30
par JohnJohnsonSHERMAN
Les jeunes programmeurs (arrivés sur le « marché » avec l'Internet) ont une fâcheuse tendance à faire du copié/collé à tout bout de champs sans (parfois|souvent) chercher à savoir comment ça marche :roll:
Petite correction Marc : ce n'est pas parcequ'on est jeune qu'on ne cherche pas a comprendre, et heureusement car sinon l'avenir de l'humanité serait sérieusement compromis :wink: . Au contraire, je pense que quand on est jeune, on essaie tant bien que mal de comprendre tant ses cours que la programmation... avec plus ou moins de succés selon les gens, certes :mrgreen:

Bon faut dire aussi que quand le travail a déjà été fait, pourquoi se priver??? :mrgreen: :lol: Ctrl+C :wink:

Re: Dessiner sur une fenêtre

Publié : sam. 02/juil./2016 14:32
par Jeanmarc
Bonjour,
Jolie discussion sur le plaisir d'apprendre, l'intérêt du partage des connaissances.
Quand je copie/colle du code, c'est pour des raisons pratiques mais une fois compris, je le re fabrique selon mon besoin, touche par touche dans mon code.
Surtout à chaque fois je pense au temps qu'ont passé les autres à le fabriquer.
Rien ne vient comme ça.

C'est la magie de la Programmation, un clavier et tout un monde s'ouvre.

Un nouveau ici, François, nous dit avoir commencé avec le ZX80, moi je n'ai pas osé le préciser, car je me suis dit que personne ne connaissait encore ce petit premier ordinateur à 1000frs de l'époque. Une pup d'un quart de page dans Electronique Pratique.

J'ai passé une nuit à appréhender l'Assembleur Z80, je me souvient de LD ADD SUB PUSH POP SRL NOP AND OR XOR...
J'ai toujours ce petit bouquin que je garde comme une relique d'un code ésotérique de la préhistoire de la micro informatique.

Je ne serais jamais un Programmeur efficace, trop bordélique, trop dispersé...
Pour les gamins en mal d'occupation, une seule réponse: le foot. A coté, combien de "club informatique", ou de découverte simplement ?

Bon je suis hors sujet, toutes mes excuses.
JM

Re: Dessiner sur une fenêtre

Publié : dim. 03/juil./2016 11:56
par JohnJohnsonSHERMAN
Tu n'est pas hors sujet si on considére la dérive autour du sujet initial :mrgreen:
Et je suis tout a fait d'accord avec toi... Pour ma part, j'ai découvert la programmation il y a quelques années, en Seconde au lycée, sur les calculettes programmables de chez casio... Quelques instructions en Basic, et c'est parti! Je me rapelle d'avoir bidouillé la calto et tout appris tout seul sans jamais consulter le manuel fourni avec!! :lol: Depuis et bien c'est un monde qui s'ouvre sans cesse au fur et a mesure de mes apprentissages... un monde ou c'est le programmeur qui a le pouvoir sur la machine, et ca c'est a mon sens une des grandes raisons qui nous pousse a s'arracher les cheveux sur des codes plutot que de chercher des versions déja faites ailleurs... Quelque part c'est la fierté de se dire "c'est moi qui l'ait fait!"... Bref voila mon avis :wink: