Graphics....

Résolu
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 24 juin 2005 à 12:33
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 24 juin 2005 à 15:25
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

taoetc Messages postés 346 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 3 septembre 2007 3
24 juin 2005 à 14:24
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
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
24 juin 2005 à 15:03
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..
3
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
24 juin 2005 à 15:25
ok, merci pour vos réponses.
0
Rejoignez-nous