Reperer les coordonnées lors du clic

cs_MLine Messages postés 20 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 11 juin 2003 - 28 mai 2003 à 11:41
orelero Messages postés 8 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 4 février 2005 - 1 févr. 2005 à 19:10
Slut,
Je veux gérer l'evenement OnClick sur la fiche principale (C++ Builder) en enregistrant les coordonnées X et Y de l'endroit où l'utilisateur a cliqué. Le prototype de la fonction est :
void __fastcall TForm1::FormClick(TObject *Sender);
(prototype classique de BCB)

Alors que par exemple, la fonction FormMouseMove fournit les coordonnées de la souris à tout moment :
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);

Sachant que je ne peux pas modifier ces prototypes, y-a-t il moyen de récupérer les coordonnées au moment du clic sur la fiche, comme c'est possible de le faire lors du simple mouvement de la souris ?

MLine ;)

8 réponses

NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
28 mai 2003 à 13:01
dans ta proc FormClick(...) utilise GetCursorPos(); pour récupérer les coordonnées de la souris:

/* Désolé, je ne connait pas Borland alors je ne sait pas
si cette proc s'écrit exactement de cette facon */
void __fastcall TForm1::FormClick(TObject *Sender)
{

POINT pos;

GetCursorPos(&pos);
// Maintenant 'pos' contient les coordonnées de la souris
// pos.x et pos.y

}

GetCursorPos() est déclarer(défini) dans <windef.h> mais
inclue dans <windows.h>

~(.:: NitRic ::.)~
0
cs_MLine Messages postés 20 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 11 juin 2003
28 mai 2003 à 14:20
GetCursorPos() récupère les coordonnées de la souris mais sur l'ensemble de l'écran. Si je déplace la fiche, les coordonnées d'une cellule changent alors que celle-ci n'a pas bougé sur la fiche... En fait il faudrait repérer les coordonnées par rapport au repere de la fiche, peut-on adapter GetCursorPos() ou y-a-t il un autre moyen ?

MLine ;)
0
bdkiller Messages postés 55 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 7 décembre 2004
29 mai 2003 à 22:19
essaye GetCursorValues:
Passe le nom de chaque constante de curseur prédéfinie à un rappel.

Unité

Controls

Catégorie

routines de gestion du curseur

extern PACKAGE void __fastcall GetCursorValues(Classes::TGetStrProc Proc);

Description

Appelez GetCursorValues pour exécuter un rappel pour chaque constante de curseur intégrée à la VCL.  Le paramètre Proc est la fonction de rappel appelée pour chaque nom de constante de curseur.

Remarque :	Pour convertir en curseurs les chaînes passées à la procédure de rappel, utilisez IdentToCursor.  Pour convertir un curseur en nom de constante qui puisse être comparé à la chaîne passée à la procédure de rappel, utilisez CursorToIdent.


ce texte j'ai trouvé dans l'aide de Borland C++.. regarde tu trouveras ;)

bonne prog, bdk
0
bdkiller Messages postés 55 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 7 décembre 2004
29 mai 2003 à 22:21
ou alors avec GetCursorPos, fais en sorte de ne pas deplacer la form lol, genre form sans les bords :)
a+
0

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

Posez votre question
cs_MLine Messages postés 20 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 11 juin 2003
30 mai 2003 à 11:03
j'ai creusé l'aide sur cette fct, mais j'arrive pas a savoir si c vraiment la fct qu'il me faut, d'autant que j'arrive pas a l'utiliser :/ (constante de curseur, fonction de rappel... moui)
(en + j'ai le logiciel en anglais donc l'aide en anglais aussi)
menfin merci pour l'info

MLine ;)
0
cs_MLine Messages postés 20 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 11 juin 2003
30 mai 2003 à 11:06
non lol !! c'est pas du tout flexible comme interface si tu peux pas déplacer les fenetres ...
MLine ;)
0
cs_MLine Messages postés 20 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 11 juin 2003
4 juin 2003 à 18:02
Ca y est j'ai trouvé ! Pour info :
Suffit effectivement de récupérer les coord avec
GetCursorPos(&pos);
puis de les transformer en coord. par rapport a la fiche grace a la fct ScreenToClient :
Xclient = ScreenToClient(pos).x;
Yclient = ScreenToClient(pos).y;
(il existe aussi ClientToScreen)
Voilà, ça fait plaisir quand on trouve (alors si ca peut aider qqn..) !

MLine ;)
0
orelero Messages postés 8 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 4 février 2005
1 févr. 2005 à 19:10
Salut , la question m'interesse enormement , seulement je n'y connait rien en c++ .

En fait je voudrais integrer du code natif dans mon application java,
en particulier ma procedure principale fera appel à une fonction ecrite
en c++ qui aura pour role d'ecouter l'ecran et dés qu'un evenement tel
qu'un click ou un release est détecté , cette fonction renverrait une
chaine de caractere (le jni ne gere pas grand chose a part les chaines
de caracteres) avec en premier l'absisse du click puis l'ordonnée et
enfin 0 si c'etait un click et 1 si c'etait release. Je sais pas si
c'est trop demandé mais si certains pouvaient m'ecrire le codeca serait
super sympa , sinon si vous pouvez me conseiller un bon
editeur-compilateur assez facile d'utilisation et quelques conseils je
suis preneur :) merci :). Si ca marche je mettrai le code java+ la
manipulation pour integrer le c++ sur ce site, parceque je crois que ca
interesse pas mal de debutants comme moi.

merci :) :)
0
Rejoignez-nous