Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2746 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Coment avoir les coordonnées écran d'une fenêtre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Coment avoir les coordonnées écran d'une fenêtre

n°469709
nickola
Posté le 28-07-2003 à 13:43:23  profilanswer
 

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.

mood
Publicité
Posté le 28-07-2003 à 13:43:23  profilanswer
 

n°469710
chrisbk
-
Posté le 28-07-2003 à 13:45:00  profilanswer
 

Y'a des fonctions de conversions
 
ClientToScreen et ScreenToClient je crois (c fou comme j'oublie tout...)

n°469711
LetoII
Le dormeur doit se réveiller
Posté le 28-07-2003 à 13:45:05  profilanswer
 

Y a une méthode des TForm qui converti les coordonnées (ClientToScreen me semble) si je em souvient bien.
 
EDIT: Arf [:benou_grilled]


Message édité par LetoII le 28-07-2003 à 13:46:30

---------------
Le Tyran
n°469713
VisualC++
J'va y penser ...
Posté le 28-07-2003 à 13:45:35  profilanswer
 

C bien ca les fonctions (en tout cas sous MFC, membre de CWnd)

n°469714
nickola
Posté le 28-07-2003 à 13:46:35  profilanswer
 

Merci je test de suite.

n°469715
chrisbk
-
Posté le 28-07-2003 à 13:47:43  profilanswer
 

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)

n°469724
nickola
Posté le 28-07-2003 à 13:52:49  profilanswer
 

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.

n°469725
VisualC++
J'va y penser ...
Posté le 28-07-2003 à 13:52:53  profilanswer
 

Chrisbk > Oui tout a fait


Message édité par VisualC++ le 28-07-2003 à 13:53:09
n°469727
LetoII
Le dormeur doit se réveiller
Posté le 28-07-2003 à 13:54:22  profilanswer
 

Nickola a écrit :

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.


 
C'est par ce qu'elles prennent un TPoint en argument.


Message édité par LetoII le 28-07-2003 à 13:54:32

---------------
Le Tyran
n°469730
nickola
Posté le 28-07-2003 à 13:55:34  profilanswer
 

Et je peux convertir mon int en Tpoint ? (nOObie inside :D )


Message édité par nickola le 28-07-2003 à 13:56:40
mood
Publicité
Posté le 28-07-2003 à 13:55:34  profilanswer
 

n°469738
VisualC++
J'va y penser ...
Posté le 28-07-2003 à 13:58:26  profilanswer
 

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 ;)


Message édité par VisualC++ le 28-07-2003 à 13:58:45
n°469749
nickola
Posté le 28-07-2003 à 14:03:52  profilanswer
 

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.


Message édité par nickola le 28-07-2003 à 14:05:14
n°469756
chrisbk
-
Posté le 28-07-2003 à 14:08:43  profilanswer
 

Ben essaye avec ClientToScreen alors [:ddr555]

n°469766
nickola
Posté le 28-07-2003 à 14:12:02  profilanswer
 

Déjà fait :D
 
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);


Message édité par nickola le 28-07-2003 à 14:12:23
n°469777
VisualC++
J'va y penser ...
Posté le 28-07-2003 à 14:16:27  profilanswer
 

A mon avis c comme avec les MFC, il prend les coordonnee via le parent declare.
 
Essaye un PpMnmatos->ClientToScreen ou PpMnmatos->ScreenToClient

n°469779
LetoII
Le dormeur doit se réveiller
Posté le 28-07-2003 à 14:18:37  profilanswer
 

X et Y ils viennet d'où?


---------------
Le Tyran
n°469780
nickola
Posté le 28-07-2003 à 14:20:18  profilanswer
 

çà 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);
}


Message édité par nickola le 28-07-2003 à 14:21:14
n°469784
nickola
Posté le 28-07-2003 à 14:23:50  profilanswer
 

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;
 
};

n°469788
Taz
bisounours-codeur
Posté le 28-07-2003 à 14:25:55  profilanswer
 

operator POINT() const
  {
    POINT pt;
    pt.x = x;
    pt.y = y;
    return pt;
  }
 
 
 
 :non: 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

n°469790
VisualC++
J'va y penser ...
Posté le 28-07-2003 à 14:27:50  profilanswer
 

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

n°469791
VisualC++
J'va y penser ...
Posté le 28-07-2003 à 14:28:18  profilanswer
 

Taz a écrit :

operator POINT() const
  {
    POINT pt;
    pt.x = x;
    pt.y = y;
    return pt;
  }
 
 
 
 :non: 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


 
Sauf que c juste l aide de Borland qu il cite la et en rien son code ;)


Message édité par VisualC++ le 28-07-2003 à 14:28:39
n°469793
LetoII
Le dormeur doit se réveiller
Posté le 28-07-2003 à 14:30:32  profilanswer
 

Ca ça marche super:

Code :
  1. TrayPopUp->Popup(MousePos.x, MousePos.y);


 
:D


---------------
Le Tyran
n°469799
nickola
Posté le 28-07-2003 à 14:32:47  profilanswer
 

LETOII : Merci je vais essayer

n°469822
nickola
Posté le 28-07-2003 à 14:46:28  profilanswer
 

heu... tu fais comment pour qu'il reconnaisse MousePos.x et MousePos.y tu refais une structure de type TPoint ?

n°469826
LetoII
Le dormeur doit se réveiller
Posté le 28-07-2003 à 14:47:27  profilanswer
 

Nickola a écrit :

heu... tu fais comment pour qu'il reconnaisse MousePos.x et MousePos.y tu refais une structure de type TPoint ?


 
 :heink: Oups, je retourne voi le code, j'ai du en oublier un bout :D


---------------
Le Tyran
n°469834
LetoII
Le dormeur doit se réveiller
Posté le 28-07-2003 à 14:51:00  profilanswer
 

Ca ça marche super:  

Code :
  1. TPoint mousePos;
  2. GetCursorPos(&mousePos);
  3. TrayPopUp->Popup(mousePos.x, mousePos.y);

 
 
Un truc du genre :D


---------------
Le Tyran
n°469860
nickola
Posté le 28-07-2003 à 14:56:58  profilanswer
 

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 :D .

n°469866
LetoII
Le dormeur doit se réveiller
Posté le 28-07-2003 à 14:59:06  profilanswer
 

Nickola a écrit :

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 :D .


 
 [:grinking]


---------------
Le Tyran
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Coment avoir les coordonnées écran d'une fenêtre

 

Sujets relatifs
[Java] Class swing - Coordonnées d'un JButtonComment fermer la fenetre appelante
enlever la fenetre FAVORISSubmit : ouverture dans une nouvelle fenêtre
[JavaScript] Remplir un champ de form à partir d'une autre fenêtrecomment rafraichir une autre fenetre?[resolu]
Comment fermer une fenêtre ?probleme avec fenetre propriete dans visual.NET
Activer un bouton sur une autre fenetre que celle en coursAfficher une toolbar quand on est en plein écran via DirectX
Plus de sujets relatifs à : Coment avoir les coordonnées écran d'une fenêtre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR