Appel de fonction Paint [Résolu]

dod0 13 Messages postés jeudi 8 mai 2008Date d'inscription 2 juin 2008 Dernière intervention - 19 mai 2008 à 12:02 - Dernière réponse : leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention
- 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 *************************//








public



void
panel3_Paint(

object
sender,

PaintEventArgs
e)
{
      

Panel
p = sender

as



Panel
;
      

Point
mousePos =

this
.PointToClient(

Control
.MousePosition);
      e.Graphics.DrawLine(pen, 0, mousePos.Y - p.Top, 1000, mousePos.Y - p.Top);      
      e.Graphics.DrawLine(pen, (mousePos.X - p.Left), 0, mousePos.X - p.Left, 1000);
      

//this.Refresh(); utilise trop de m‚moire

}
}
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 20 mai 2008 à 11:53
3
Merci
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;

Merci leprov 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de leprov
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 19 mai 2008 à 14:16
0
Merci
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.
Commenter la réponse de leprov
dod0 13 Messages postés jeudi 8 mai 2008Date d'inscription 2 juin 2008 Dernière intervention - 19 mai 2008 à 14:25
0
Merci
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
Commenter la réponse de dod0
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 20 mai 2008 à 09:22
0
Merci
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)
Commenter la réponse de leprov
dod0 13 Messages postés jeudi 8 mai 2008Date d'inscription 2 juin 2008 Dernière intervention - 20 mai 2008 à 10:02
0
Merci
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é
Commenter la réponse de dod0
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 20 mai 2008 à 10:59
0
Merci
tu dois créer une image en temps que données membre de ta classe. dans ton constructeur tu dessine la cible dans ton image avec un fond transparent.

Par contre je suis en train de réaliser : pourquoi ne pas simplement changer le curseur lorsque tu es sur ce formulaire (tout simplement?)
Commenter la réponse de leprov
dod0 13 Messages postés jeudi 8 mai 2008Date d'inscription 2 juin 2008 Dernière intervention - 20 mai 2008 à 11:22
0
Merci
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 :

Cursor.Current =
Cursors.Cross;     ou autre ???
Commenter la réponse de dod0
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 20 mai 2008 à 11:35
0
Merci
oui, mais plutot (vu que tu veux un truc perso) utiliser une image a toi
Commenter la réponse de leprov
dod0 13 Messages postés jeudi 8 mai 2008Date d'inscription 2 juin 2008 Dernière intervention - 20 mai 2008 à 11:48
0
Merci
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  
Commenter la réponse de dod0
dod0 13 Messages postés jeudi 8 mai 2008Date d'inscription 2 juin 2008 Dernière intervention - 20 mai 2008 à 12:01
0
Merci
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
Commenter la réponse de dod0
dod0 13 Messages postés jeudi 8 mai 2008Date d'inscription 2 juin 2008 Dernière intervention - 20 mai 2008 à 16:28
0
Merci
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?
Commenter la réponse de dod0
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 20 mai 2008 à 17:04
0
Merci
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
Commenter la réponse de leprov

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.