Dessiner sur une fenêtre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Dessiner sur une fenêtre

Message 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..? :?:
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Dessiner sur une fenêtre

Message 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
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Dessiner sur une fenêtre

Message 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.
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Dessiner sur une fenêtre

Message 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

Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Dessiner sur une fenêtre

Message 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:
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Dessiner sur une fenêtre

Message 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é ! :)
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Dessiner sur une fenêtre

Message 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: :!:
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Dessiner sur une fenêtre

Message 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:
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Dessiner sur une fenêtre

Message 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
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Dessiner sur une fenêtre

Message 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)
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Dessiner sur une fenêtre

Message 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:
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Jeanmarc
Messages : 46
Inscription : ven. 10/juin/2016 16:11

Re: Dessiner sur une fenêtre

Message 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
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Dessiner sur une fenêtre

Message 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:
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Répondre