dod0
Messages postés13Date d'inscriptionjeudi 8 mai 2008StatutMembreDernière intervention 2 juin 2008
-
19 mai 2008 à 12:02
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 2010
-
20 mai 2008 à 17:04
bonjour, je suis débutant en C# et j'essai de créé une cible qui suit mon curseur j'y arrive très bien le probléme est que ma méthode demande trop au processeur donc j'aimerais savoir comment faire pour résoudre sa et est-ce que c'est mon programme qui est pas bon? car j'ai pensé appeler ma fonction panel3_Paint dans ma fonction panel1_MouseMouve ?
voilà mon code ...
Point Depart =
new
Point();
Pen pen =
new
Pen(
Color.Black);
private
void
panel1_MouseMove(
object
sender,
MouseEventArgs
e)
{
Panel
p = sender
as
Panel
;
if
(e.Button ==
MouseButtons
.Left)
{
Point
mousePos =
this
.PointToClient(
Control
.MousePosition);
if
(Depart.IsEmpty)
{
Depart =
new
Point
(mousePos.X - p.Left, mousePos.Y - p.Top);
}
p.Location =
new
Point
(mousePos.X - Depart.X, mousePos.Y - Depart.Y);
}
else
if
(!Depart.IsEmpty)
Depart =
new
Point
();
}
//********************** création de la cible pour le curseur *************************//
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 20 mai 2008 à 11:53
non, en fait il te suffit de créer ta cible dans ton constructeur, puis lorsque tu affecte la cible au curseur du controle concerné (toujours dans le contructeur). si cest pour lensemble de ton formulaire que tu veux ce changer, tu as juste faire this.Cursor = TonCurseur;
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 19 mai 2008 à 14:16
déjà tu redessine a chaque fois tes lignes. pourquoi ne pas prédessiner ta "cible" dans le constructeur, et simplement la flusher dans le mousemove. tu devrais déjà gagner un peu. ensuite, au lieu de refresh this, tu peux refresh uniquement la partie qui a besoin d'être refresh (ca doit etre possible avec un appel a invalidate je pense, il me semble qu'on peut choisir un rectangle cible). ainsi tu as juste a invalider la position de lancienne cible, puis a faire ton dessin. Et au lieu d'appeler la méthode paint dans le mousemove, tu dois faire le invalidate la bas.
ainsi, tu override la méthode onpaint ou tu place ton code, puis tu invalide la zone qui a besoin detre repainte dans le mousemove. Au final tu ne dessine pas a chaque fois mais tu "flush" une image déjà initialisée.
dod0
Messages postés13Date d'inscriptionjeudi 8 mai 2008StatutMembreDernière intervention 2 juin 2008 19 mai 2008 à 14:25
Merci de ton aide sa m'éclaire un peu, je vais essayer d'appliquer sa malgrès que pour moi certaine chose que tu m'explique me sont inconnu comme le invalidate que je ne comprends pas tout à fait :s
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 20 mai 2008 à 09:22
Invalidate te permet de dire à l'application "telle partie de ma fenetre n'est plus valide et doit etre redessinée". cest assez proche de ton refresh, sauf que ca va te permettre de travailler uniquement sur les portion nécessaires de ton formulaire. autrement dis, au lieu de redessiner toute la fenetre, tu redessine uniquement la portion qui n'est plus valide (celle ou il y avait ta cible et ou il ne doit plus rien y avoir)
Vous n’avez pas trouvé la réponse que vous recherchez ?
dod0
Messages postés13Date d'inscriptionjeudi 8 mai 2008StatutMembreDernière intervention 2 juin 2008 20 mai 2008 à 10:02
d'accord je vois mieux comment l'utiliser maintenant merci beaucoup de ton aide car je galère un peu en C# vu que mon language de départ est le PASCAL. Et la j'ai quelques problémes pour le constructeur pour la création de ma cible car je vois exactement comment créer tous cela mais pas comment faire le "flush" comme tu me l'a indiqué?
désolé je débute réellement donc je préfére passer pour un vrai novice que rester bloqué
dod0
Messages postés13Date d'inscriptionjeudi 8 mai 2008StatutMembreDernière intervention 2 juin 2008 20 mai 2008 à 11:22
ok merci pour l'explication et pour ce que tu pensais quand tu dis "changer le curseur lorsque tu es sur ce formulaire" tu parle de faire par exemple :
dod0
Messages postés13Date d'inscriptionjeudi 8 mai 2008StatutMembreDernière intervention 2 juin 2008 20 mai 2008 à 11:48
ouais j'y avais pensé mais tu vois mon probleme c'est comment faire pour l'appeler avec cette méthode car l'objet cible par exemple, je n'arrive pas à le créé et l'appeler, je suis pomé car je pense que je me base trop sur ce que j'ai vu avec Delphi, car en delphi j'aurai créé un nouveau composant que j'aurai appelé dans ma fonction principal dois-je faire pareil ici? et si je suis ton résonnement je dois créé ma cible dans le constructeur et après appeler le changement de curseur dans mon Mouse Mouve de mon Panel?
Merci de ta patiente en tout cas car c'est plutot rare sur certains forum
dod0
Messages postés13Date d'inscriptionjeudi 8 mai 2008StatutMembreDernière intervention 2 juin 2008 20 mai 2008 à 12:01
d'accord sa à l'aire mon sorcier que la premiére solution donc je vais essayer de faire sa en construisant correctement ma cible dans mon constructeur, MERCI de ton aide précieuse
dod0
Messages postés13Date d'inscriptionjeudi 8 mai 2008StatutMembreDernière intervention 2 juin 2008 20 mai 2008 à 16:28
finalement j'ai beau essayer de créer ma cible dans le constructeur je n'y arrive pas du tout je dois bien faire sa ?
public Cursor (Type type,Ressource resource)
et après définir les différents paramètres de ma cible mais je ne vois pas comment utiliser le e.Graphics.Drawline(pen, x,y,z,h), il y a certainement un autre moyen mais la je suis pomé et je crois surtout que je commence à tout mélanger?
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 20 mai 2008 à 17:04
oui tu mélanges. tu vas devoir soit créer un curseur dans un fichier, pas par le code mais de manière statique et dans ce cas instancier l'image utilsiée par le curseur en utilisant le fichier, soit créer l'image du curseur dans le code (dans ce cas créer uen image dans le constructeur, récupérer le graphics de cette image et dessiner dans ce graphics de l'image). Essaie de prendre le fonctionnel avant de partir dans du code et vouloir utiliser des lignes.
que veux tu faire? changer le curseur. ca veut dire quoi? avoir une image qu'on va utiliser en tant que curseur. comment avoir cette image? a toi de répondre. poses toi les bonnes questions avant de te jeter a corps perdu dans le code