Classe line et reponse à un click

monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007 - 30 avril 2007 à 22:33
monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007 - 18 mai 2007 à 18:38
salut,

j'ai besoin de faire réagir un objet Line à un clicke de la souris. Commant faire?

D'une manière générale, comment un contrôle graphique qui n'est pas prévu pour cela peut-il intercepter un click de la souris.

merci de votre aide.

monsieurlémouche

6 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
30 avril 2007 à 23:51
Est-ce que ça te prend une ligne fine ?
Est-ce que cette ligne peut être en diagonale ?

Peut-être pourrais-tu prendre un autre contrôle et jouer avec la hauteur ou la largeur (?)

Une idée comme ça... sans savoir ce que tu comptes faire exactement...

MPi
0
monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007
1 mai 2007 à 00:30
salut Mpi,
c'est vrai que tout dépend  de ce que je veux en faire... de cette ligne.

c'est pour un petit prog de tracer de courbes (ici, une droite) dont je veux faire varier le coefficient directeur grâce à la souris.
Je cherche une solution qui ne soit pas de la bidouille, car la bidouille n'est pas réutilisable dans d'autres contextes.

D'ailleurs, comment ils s'y prennent les profs de microsoft pour creer des controles qui réagissent à un click de la souris? Il doit bien y avoir un moyen de creer une classe avec un objet graphique quelconque (et à priori pas prévu pour intercepter un click de la souris) et le coder pour qu'effectivement il le fasse.

dans mon projet, j'aimerais qu'au survol de l'objet Droite (objet graphique Line) la souris change de forme (propriété mouspointer habituelle) et que je puisse promener ma doite pour calculer un nouveau coefficient directeur.

d'ailleurs, l'évènement mousemove n'est pas intercepter par le contrôle Line... Le problème est identique au click.
Voila pourquoi je ne veux pas de bidouille. Car une bidouille qui marcherait (éventuellemtn avec un click) ne marcherait pas forcément avec un mousemove. Je cherche une méthode propre, un truc de pro, s'il existe!

monsieurlémouche
tel évènement
0
monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007
1 mai 2007 à 00:44
je viens d'avoir une idée et j'attends un avis d'expert...

le controle Line est dans un container, traditionnelement picturebox ou form qui eux reçoivent les évènements que je veux traités. La solution est peut-être:
- le container intercepte le message (click, mousemove etc...)
- la position de la souris est évaluée
- la collection de controle est scrutée
- pour chaque controle, on peut connaitre la zone du container occupée par ce controle à partir des propriétés top, left, width etc.
- on teste la position de la souris et on verifie si celle-ci se trouve sur le controle
- le message est envoyé sur une procédure du contrôle qui traire l'évènement.

qu'en dites-vous?

monsieurlémouche
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
1 mai 2007 à 02:07
Un peu dans la même optique, j'essaierais avec un contrôle personnalisé (OCX). Une Line dans un contrôle transparent et ajusté en grandeur à cette Line. Je ne suis pas certain, mais si la Line ne reçoit rien sur Click, peut-être que le contrôle le recevra... (?)

Ça reste à tester...

MPi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 mai 2007 à 09:28
Bonjour à tous,

Moi, je veux bien apporter mon grain de sel, dans cette affaire, mais je souhaite que monsieurlemouche ne se contente pas de se faire servir du tout cuit....


Je tiens à ce qu'il s'y mette avec entrain et qu'il se concentre sur son projet


Je lui indique donc ici la méthode que je vois fort bien dans ses grandes lignes et demande à monsieurlemouche de s'y pencher avec sérieux, de par lui-même.


Je ne reviendrai certes pas avec un exemple tant que monsieurlemouche n'aura pas TOUT tenté avec sérieux pour appliquer cette ùéthode dont voici l'exposé des grandes lignes :


- sur la form une image (petite et carrée) à laquelle il donne un index 0 (image1(999), donc) et dont il met la propriété visible à False
- toutes les lignes qu'il trace sur sa form devront appartenir à un groupe indexé (line1(0), .....line1(n), mais en faisant "avancer" les index de 2 et pas de 1... (fastoche)

au chargement de sa form :

il détermine les lignes existantes (avec for each) et, pour chaque ligne indexée n

1) il crée par ajout 2 images image1(n) et image1(n+1)
2) il positionne ces deux images ainsi : image1(n) en x1,y1 de line1(n) et image1(n+1) en X2,Y2 de line1(n)

il aura ainsi, pour chaque line1(n) sur sa form, 2 poignées (encore invisibles) image1(n) et image1(n+1)

Il ne lui restera plus qu'à :

1) rendre les poignées visibles lors d'un événement de son choix (je suggère un mousedown droit sur la form)
2) jouer avec un glisser-déplacer (exemples nombreux sur ce forum) d'une poignée pour entrainer la modification de l'extrémité correspondante (X1,Y1 ou X2,Y2) de la ligne correspondante (touit celà grâce à la correspondance des index, b ien évidemment)

L'utilisation (facile) d'une variable booléenne devrait enfin lui permettre d'utiliser le même événement mousedown en click droit pour passer ses poignées de l'état visible à l'état non visible (boléenne à utiliser en "switch")

Mon message à monsieurlemouche : je viens de t'indiquer l'essentiel. Tu ne me reverras ici que si tu me démontres sans ambiguïté que tu t'es retroussé les manches et a su commencé à écrire du cohérent sur la base de ces indications.

Bon travail, donc


 
0
monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007
18 mai 2007 à 18:38
salut,
merci à vous qui avez consacré de votre temps à me répondre.

je prends enfin le temps de m'exprimer à mon tour, remettant chaque jour au lendemain ce que je dois écrire depuis deux semaines environ.
tout d'abord, reponse à jmfmarques: quand j'ai appelé à l'aide, c'était bien pour avoir une solution clef en main, un truc qui ai déjà été fait et sans doute mieux que ce que j'aurais fait par moi même. N'est-ce pas cela le principe de réutisabilité que nous utilisont tous, à des degrés différents, fontion de nos compétences, temps à consacrer au développement, etc? N'y voyez là, cher ami, aucun afront, mais c'est bel et bien un truc qui m'évitait de me casser la tête que je cherchais, non pas que je veuille que les copains travaillent à ma place, mais si quelquechose existe,  il faut le faire vivre, l'améliorer, etc.

Finalement, ayant également réflechi, à mon modeste niveau sur la question , je pense qu'il n'est pas judicieux de réaliser ceci avec un ocx, en effet, un controle utilisateur occupera tout l'espace du graphe pour une seule ligne. C'est sans doute consommer beaucoup de ressource pour pas grand chose mais le pire c'est la superposition des controles pour des objets lignes multiples. Et là, l'option contrôle utilisateur semble compromise pour de bon. Un question vous vient peut-être à l'esprit. Pourquoi un controle utilisateur? Premièrement je n'en ai jamais fait et cela me tentait d'essayer. D'autre part, pour en faire profiter les copains. Pour le fun. Pour faire un truc réutilisable. Etc.

Cette option, je l'ai abandonnée.

Il reste la possibilité de créer une classe ce qui est largement à ma portée, mais je ne sais pas encore comment je réceptionnerai l'évènement click.
Plusieurs possibilités, pointeurs vers le picturebox containeur du graphe. C'es ce qui me semble le plus simple étant donnée ce que j'ai déjà codé.
Mon objet graphe dispose d'une collection qui pointe vers les courbes tracées sur l'écran. Je les scrute et j'évalue pour chacune la distance de la souris à la droite  (facile) Si la distance est inférieure à x pixel, je déclenche uneprocédure d'ancrage de la droite et je la promène (semblable au drag and drop).

Voila, je n'apporte pas de réponse, désolé pour ceux qui en attendait.

Merci en tout cas à vous qui m'avez apporté vos suggestions.

monsieurlémouche
0
Rejoignez-nous