Graphics....

[Résolu]
Signaler
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
-
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
-
Bonjour,



En faite j'ai un panel avec un diagramme en batons dedans. Quand
on fait scroller le panel ca scrolle bien les diagrammes à l'interieur,
le problème est que j'utilisais un bitmap :



dans évent load



bitmap_diagramme= new Bitmap(296, 376);

pg3 = Graphics::FromImage(bitmap_diagramme;



dans event paint



Point a = panel.AutoScrollPosition ;

/* Pour gérer le scroll

e.Graphics.TranslateTransform(a.get_X(),a.get_Y()) ; */

e.Graphics.DrawImageUnscaled(bitmap_diagramme,0,0);





En faite chaque fois je fais scroller mon panel il appelle l'evenement
paint donc il me redessine mon image avec ce qu'il y a dans l'event
paint. Mais si mettons lors d'appuis sur un bouton je veux rajouter
mettons un cercle dans mon panel. Dès que je vais scroller mon cercle
va disparaitre car il appelle automatiquement l'event paint.



Donc ma question, y'a t'il moyen de dessiner de manière persistante
dans un panel, sans dessiner forcement dans paint() ?? enfin le truc le
plus simple possible , je veux juste dessiner des diagrammes, pas faire
décoller une fusée



Par avance, merci.

3 réponses

Messages postés
346
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
3 septembre 2007
3
Moi, je connais juste la méthode je redessine quand ca bouge. Ca m'intéresse de savoir si on peut faire un truc fixe
( j'ai aussi un diagramme en barre, mais moi, il est pas dans la bitmap, il est calculé et dessine dans un panel)

bref, la méthode pour que ton cercle apparaissent quand meme , c'est que tu redéfinissent l'origine de ton dessin pour que le dessin se fasse toujours au meme endroit.

Donc, prendre en compte la valeur du scroll un peu comme ca.


origineX = pnlPano.AutoScrollPosition.X ;


origineY = pnlPano.AutoScrollPosition.Y ;


Graphics g=Graphics.FromHwnd(pnlPano.Handle);


g.TranslateTransform(origineX,origineY);



Apres tu dessine normalemnt et ca doit marcher

Enfin, ca marche chez moi, y a pas de raison
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Salut, en fait il ne faut pas voir L'évenement Paint comme un problème mais plutot comme un "ami" c'est le seul moyen de savoir que la forme est "abimée" et doit etre redessinée.. Il faut grouper toutes les opérations graphiques dans l'évenement et ainsi on est sur que tout est redessiné..

Emmanuel9, quand tu cliques sur ton bouton, tu ne dois pas dessiner ton cercle, tu dois appeler Invalidate qui appele à son tour OnPaint et c'est dans cette fonction que tu dessines ton cercle..


Ou alors on utilise une méthode qui dessine plusieurs fois par secondes dans la forme et ainsi on "simule" un affichage persistant et on a plus à gérer l'évenement Paint..
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
ok, merci pour vos réponses.