Coment avoir les coordonnées écran d'une fenêtre - C++ - Programmation
Marsh Posté le 28-07-2003 à 13:45:00
Y'a des fonctions de conversions
ClientToScreen et ScreenToClient je crois (c fou comme j'oublie tout...)
Marsh Posté le 28-07-2003 à 13:45:05
Y a une méthode des TForm qui converti les coordonnées (ClientToScreen me semble) si je em souvient bien.
EDIT: Arf
Marsh Posté le 28-07-2003 à 13:45:35
C bien ca les fonctions (en tout cas sous MFC, membre de CWnd)
Marsh Posté le 28-07-2003 à 13:47:43
VisualC++ a écrit : C bien ca les fonctions (en tout cas sous MFC, membre de CWnd) |
bah au pire c'est des fonctions de l'api w32, ca doit se retrouver partout sous la meme forme (ou peut s'en faut)
Marsh Posté le 28-07-2003 à 13:52:49
Apparemment il est impossible de faire çà :
PpMnmatos->Popup(ScreenToClient(X),ScreenToClient(Y));
Les deux fonctions semblent marcher ensemble dans l'exemple :
P = TargetControl->ScreenToClient(SourceControl->ClientToScreen(P));
convertit P des coordonnées de SourceControl à celles de TargetControl.
Marsh Posté le 28-07-2003 à 13:52:53
Chrisbk > Oui tout a fait
Marsh Posté le 28-07-2003 à 13:54:22
Nickola a écrit : Apparemment il est impossible de faire çà : |
C'est par ce qu'elles prennent un TPoint en argument.
Marsh Posté le 28-07-2003 à 13:55:34
Et je peux convertir mon int en Tpoint ? (nOObie inside )
Marsh Posté le 28-07-2003 à 13:58:26
Tpoint toto;
toto.x = TonX
toto.y = TonY
ScreenToClient(toto)
menu->popup(toto.x, toto.y)
Edit : tu as le droit de lire la doc de la fonction ou google
Marsh Posté le 28-07-2003 à 14:03:52
Mon popup est toujours en haut vers la gauche bien loin de ma fenêtre cliente.
TPoint coord;
coord.x= X;
coord.y= Y;
ScreenToClient (coord);
PpMnmatos->Popup(coord.x,coord.y);
J'avais pas vu dans l'aide de la fonction le Gros TPoint souligné en haut. Autant pour moi. Mais le problème persiste.
Marsh Posté le 28-07-2003 à 14:12:02
Déjà fait
En fait çà reste fixe. Malgré la manip (voir le code) le popup apparaît en haut à gauche. Donc il applique les coordonnées client aux coordonnées écran
TPoint coord;
coord.x= X;
coord.y= Y;
ScreenToCLient (coord);
Coordms->Caption="La souris est en "+IntToStr(X)+", "+IntToStr(Y);
PpMnmatos->Popup(coord.x,coord.y);
Marsh Posté le 28-07-2003 à 14:16:27
A mon avis c comme avec les MFC, il prend les coordonnee via le parent declare.
Essaye un PpMnmatos->ClientToScreen ou PpMnmatos->ScreenToClient
Marsh Posté le 28-07-2003 à 14:20:18
çà ne marche pas. Le ClientToScreen n'est pas dans la liste ni l'inverse.
LETOII X et Y viennent du MouseDown
void __fastcall TFenPRinc::BtaddperifMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
TPoint coord;
coord.x= X;
coord.y= Y;
ClientToScreen(coord);
PpMnmatos->Popup(coord.x,coord.y);
}
Marsh Posté le 28-07-2003 à 14:23:50
L'aide de TPoint dit ceci
Unité
Windows
struct TPoint
{
TPoint() {}
TPoint(int _x, int _y) : x(_x), y(_y) {}
TPoint(POINT& pt)
{
x = pt.x;
y = pt.y;
}
operator POINT() const
{
POINT pt;
pt.x = x;
pt.y = y;
return pt;
}
int x;
int y;
};
Marsh Posté le 28-07-2003 à 14:25:55
operator POINT() const
{
POINT pt;
pt.x = x;
pt.y = y;
return pt;
}
quel interet d'ecrire des constructeurs si on en s'en sert pas
return POINT(x, y);
et si ton compilo est pas mauvais, tu économiseras meme un objet temporaire
Marsh Posté le 28-07-2003 à 14:27:50
Les coordonnees doivent etre efin je suppose de type ClientCoordinate (vis a vis de la fenetre active qui a recu le mousedown) et Popup doit prendre des coordonnees en ScreenCoordinate, donc pour moi (enfin jsuis pas du tout ds prog via Borland) ca devrait etre bon
Marsh Posté le 28-07-2003 à 14:28:18
Taz a écrit : operator POINT() const |
Sauf que c juste l aide de Borland qu il cite la et en rien son code
Marsh Posté le 28-07-2003 à 14:30:32
Ca ça marche super:
Code :
|
Marsh Posté le 28-07-2003 à 14:46:28
heu... tu fais comment pour qu'il reconnaisse MousePos.x et MousePos.y tu refais une structure de type TPoint ?
Marsh Posté le 28-07-2003 à 14:47:27
Nickola a écrit : heu... tu fais comment pour qu'il reconnaisse MousePos.x et MousePos.y tu refais une structure de type TPoint ? |
Oups, je retourne voi le code, j'ai du en oublier un bout
Marsh Posté le 28-07-2003 à 14:51:00
Ca ça marche super:
Code :
|
Un truc du genre
Marsh Posté le 28-07-2003 à 14:56:58
Merci beaucoup LetoII çà marche !!!!
Désolé j'ai pas de truitesse sous la main, pour un Syanocq digne de ce nom afin de te remercier .
Marsh Posté le 28-07-2003 à 14:59:06
Nickola a écrit : Merci beaucoup LetoII çà marche !!!! |
Marsh Posté le 28-07-2003 à 13:43:23
Bonjour,
Je voudrais avoir les coordonnées écran de ma fenêtre, car j'ai des problèmes pour l'affichage de mais popup.
En fait je veux qu'en cliquant sur un bouton, un popup s'affiche là où est ma souris.
Cependant dans C++ Builder la fonction popup :
nompoppuMenu->popup (X,Y) fait référence à des coordonnées écran et dans l'événements OnMouseDown, les coordonnées sont celles de la fenêtre client, soit (0,0)en dessous de la barre de menu en haut à gauche. De ce fait mon popup n'apparaît jamais à l'endroit désiré.
Auriez-vous une idées pour récupérer les coordonnées écrans de ma fenêtre au chargement de la fenêtre ainsi que lorsque celle-ci est déplacée ?
Merci d'avance.