VB.NET evenemment Paint, cherche un moyeb pour "grosse merdouille"

cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008 - 17 janv. 2005 à 16:12
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008 - 21 janv. 2005 à 14:28
Salut
Sur vb.net et un usercontrol, il n'existe plus de propriété Autoredraw et ca me semble pas mal merdique dans certains cas.
je m'explique, j'essais de developper un control gerant les smileys, en vb6 il etait interessant de le rendre autoredraw pour la "persistence", hors, sous vb.net, tout est geré dans le "paint" donc a chaque manipulation tout est redessiné.

seulement, quand a chaque modification, il execute le "paint", ca prend du temps a tout recalculer, pour la moindre lettre changée, tout est recalculé (par exemple pour un controle panel contenant mon text et mes smileys et le faire defiler avec une scroll).
En gros si vous connaissez une solution pour qu'il garde les "graphiques" en memoire afin de ne pas reexecuter du code pour rien ca m'arrangerait bien. sinon si c'est pas possible et bien de se coté la , VB.NET est une grosse merde.

Bonne prog, poele_a_frire@hotmail.com
liquide

2 réponses

alicvb Messages postés 134 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 juin 2007 1
21 janv. 2005 à 12:47
En toute logique, l'évenement paint "sait" quelles zones il doit redessiner...

Ceci est géré par le composant graphics (e.graphics) et sa propriété clip...



Tu peux bien sûr forcer le programme à ne redessiner que la zone que tu veux avec un code du genre :

PA.invalidate(rectangle)

PA.update

où PA est le panel où tu as dessiner tes bidules...



Si tu veux voir la différence entre tout redessiner et ne redessiner que la partie voulue, dans l'évennement paint, débute par :

e.graphics.resetClip... tu risques d'avoir des surprises !



Au fait, vérifie que tu n'as pas de .refresh qui traine dans ton programme...



Si ça ne marche pas, tu peux aussi créer un code pour dessiner ta lettre, du style :

dim g as graphics

g = pa.creategraphics

g.drawstring(.............)

g.save





Voilà, j'espère avoir répondu à ton souci.



AlicVB
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
21 janv. 2005 à 14:28
salut,
D'accord et merci pour l'info, mais quand dans le paint j'ai un "for i= ...... next "
il ya forcement tout un recalcul meme si je limite a la portion apparente, si mon usercontrol contient 50 lignes, il va y avoir 50 lignes a recalculer des que ma portion va devenir apparente, et ca je n'ai pas le choix, ca prend du temps a revoir tous les caracteres pour trouver un smileys, alors qu'avant, je n'avais pas besoin de recalculer, il y avait une persistence.

j'ai fait l'experience avec 3 lignes, la vitesse du dessin est rapide, j'en ai aussi fait une avec 10 lignes et la c'est la cata . cependant, sur ces 2 cas, les lignes apparaissaient entierement dans le cadre a redessiner.

enfin, un jour peut etre je trouverais le moyen :-), merci pour tes infos

Bonne prog, poele_a_frire@hotmail.com
liquide
0
Rejoignez-nous