Au secours d'un pauvre developpeur qui n'a plus de sollution !

cs_Galagan Messages postés 20 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 22 février 2003 - 14 oct. 2002 à 20:20
cs_Galagan Messages postés 20 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 22 février 2003 - 18 oct. 2002 à 20:09
C'est la premiere fois que je pose une question car d'habitude j'en ai pas
besoin mais la je voit vraiment pas comment faire ...

Voila la situation :
Imaginons, je fait une sorte de prog de dessin avec la possibilité de faire
des lignes, rectangle, ovale, etc...
Jusque la tout va bien mais je ne veut PAS les dessiner, en fait je veut que
quand l'utilisateur clique sur les forme, elles se selectionne et puisse les
modifier (deplacement, agrandissement, etc...). Au debut je voulait faire ca
avec les shapes de VB et les créer dynamiquement mais celles ci n'ont pas
d'evenement donc impossible de savoir quand l'utilisateur clique dessus.

SVP aidez moi car je croit que je vait sauter du haut d'un pont !!!

J'ai aussi penser a les dessiner et a calculer avec des formules si il y a
une forme en dessous. Ca sa marche si il y a peu de forme mais si il y en a
beucoup, bonjour les temps de calcul ... et en + les equations pour
rectangle, ligne, cercle OK mais Oval la je connais pas !

alors si un programmeur de génie passe par la ...
Ou si vous avez une idée pour remplacez le clique sur l'objet sans gèner
l'ergonomie ...

Merci

Galagan

12 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 129
15 oct. 2002 à 06:32
Tu devrais essayer de conserver les coordonnées de chacun de tes objets ainsi que leurs largeurs et leurs hauteurs, puis gérer leur déplacement ou leur redimension lorsque la souris clique sur la zone les représentant en récupérant les coordonnées de la souris.
En tout cas, c'est comme ca que je ferais...

DARK SIDIOUS
0
cs_Galagan Messages postés 20 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 22 février 2003
15 oct. 2002 à 18:13
Ca marcherai a la limite pour des formes pleines, mais quand tu a des ovals vide par ex, comment savoir si l'utilisateur clique sur le bord ?
Là est mon problemme !
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 129
15 oct. 2002 à 20:39
Ben quand tu as tes coordonnées de la souris, tu peux calculer si la souris se trouve sur un bord ou non... C'est sûrement bien difficile, mais bon.

DARK SIDIOUS
0
cs_Galagan Messages postés 20 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 22 février 2003
15 oct. 2002 à 23:16
J'y est pensé mais si il faut tester routes les formes pour savoir, j'imagine pas le temps de calcul pour VB si il y en a beaucoup. En + les equations de cercle je les connais mais pas d'ellipse !
Enfin je pense que je faire une sorte de petit carré au centre de chaque forme pour pouvoir les selectionner, ca serat pas des plus pratique mais au moins ca marchera !

Merci quand meme

Mais si quelqu'un a une sollution a proposer, qu'il n'esite pas !
0

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

Posez votre question
GhnombX Messages postés 43 Date d'inscription lundi 22 avril 2002 Statut Membre Dernière intervention 8 février 2004
15 oct. 2002 à 23:28
bah écoute je commence un prog du même type et je sui confronté au même genre de pb de structuration de données ....
dc déjà si tu pouvai me dire komment tu stocke tes données et tt.

pr ma part jenvisage de garder en mémoire tt les actions de lutilisateur et de tou redéssiner a chake modification (genre tu déplace un point ca déplace la droite ki a été crée komm passan par ce point etc...)

GhnombX
%-6
0
cs_Galagan Messages postés 20 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 22 février 2003
15 oct. 2002 à 23:38
Moi, garder les pos des formes en memoire, c'est pas le problemme, ce que je cherche c'est comment faire pour savoir si l'utilisateur a cliqué sur le bord d'une des formes
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 129
16 oct. 2002 à 07:41
Ou sinon, tu peux avoir une autre solution : Le faire par la difference de couleurs. Je m'explique :
Si tu trave une elipse dans un contrôle PictureBox, tu peux savoir si l'utilisateur clique dessus ou non en définissant la couleur du point se trouvant à l'emplacement de la souris lors du click. Ainsi, tu efface ton contrôle PictureBox, tu redessine tout tes contrôles en gérant le déplacement de celui qui a été déplacé. C'est peut-être plus simple.

DARK SIDIOUS
0
cs_Galagan Messages postés 20 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 22 février 2003
16 oct. 2002 à 19:10
C'est une bonne idée ca ... mais faudrait que je fasse une couleur différente pour chaque forme pour qu'il sache qu'elle forme a été selectionné !
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 129
16 oct. 2002 à 22:14
Oui, c'est vrai, j'y avais pas pensé. Mais tu peux faire jouer des nuances de couleurs (nuances de noir par exemple) sans que ca ce voit.

DARK SIDIOUS
0
cs_Galagan Messages postés 20 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 22 février 2003
16 oct. 2002 à 22:30
Desormais je crois que je vait devoir faire un choix :
(1) Créer un petit carré au centre de chaque forme par exemple, pour pouvoir le selectionner (Pas pratique)
(2) Créer une fonction qui calcul si on est sur une des formes, Vive les math (Assez lent)
(3) Créer un OCX (Encore + lent et instable)

Je crois que je vait devoir faire le (2) car j'ai quelque idée pour le rendre + rapide (ex: Si une forme est comprise entre 0,0 et 1,1 je vais pas calculer si le clique se trouve a 43,82
En + j'ai trouvé la formule de l'ellipse sur le net

J'aurait pus faire la (3) mais si je voulais l'ocx assez rapide, il aurait fallut que je le fasse par c/c++ et ca me prendrait 10x + de temps pour pas grand chose.

En tout les cas, si j'y arrive je mettrait la source ici car je pense que ca pourait être tres utile pour certaines personne de pouvoir faire ca.

Merci a ceux qui m'ont aidé

GALAGAN

ps : si vous avez une derniere idée génial, n'ésitez pas !
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 129
17 oct. 2002 à 06:38
Il y a peut-être un autre moyen, mais moins facile à mettre en oeuvre :
Tu crée deux zone d'image : l'une pour le dessin de tes formes classiques, et une autre (invisible) qui te servira de zone temporaire. Lorsque l'utilisateur crée une nouvelle forme, trace là dans les deux zones en même temps en prenant garde de bien effacer la seconde zone d'image à chaque tracé.
Ensuite, ce que tu peux faire, c'est récupérer chaque pixels de la forme tracé dans la zone temporaire (grâce aux différences de couleurs entre lz forme et la couleur de fonc de ta zone temporaire).
Ensuite, tu peux stoker ces coordonnées dans une base de données (ou un fichier classique, mais ca risque d'être le fouillis) en essayant de garder un ordre logique.
Ensuite, lorsque l'utilisateur clique sur tel pixel, tu peux savoir sur quelle forme il a cliqué, et la déplacer selon le déplacement de la souris...
C'est juste une nouvelle proposition, mais c'est la plus dure à mettre en place.

DARK SIDIOUS
0
cs_Galagan Messages postés 20 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 22 février 2003
18 oct. 2002 à 20:09
J'ai commencé mon truc.
Pour le moment il peut dessinner des ligne, rectangle et ellipse de plusieur largeur et couleur dans tous les sens. Maintenat je commence le travaille des calcul (Le seul truc interressant de ce petit prog qui ne servira que de base pour moi pour un autre prog mais que je mettrait ici ci quelqu'un a besoin !)
0
Rejoignez-nous