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

Signaler
Messages postés
1016
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
24 juin 2008
-
Messages postés
1016
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
24 juin 2008
-
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

Messages postés
134
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 juin 2007

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
Messages postés
1016
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
24 juin 2008

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