IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Décalage graphique et souris


Sujet :

Composants VCL Delphi

  1. #1
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut Décalage graphique et souris
    Salut!

    J'ai remarqué qu'il y avait un décalage entre les graphismes et la position de la souris. Par exemple, si je fais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Button1Click(Sender: TObject);
    var MyRect:TRect;
    begin
    MyRect.Left:=100;
    MyRect.Top:=100;
    MyRect.Right:=200;
    MyRect.Bottom:=200;
    Form1.Canvas.pen.Color:=$FF0000;
    Form1.Canvas.brush.Color:=$FF0000;
    Form1.Canvas.FillRect(MyRect);
    SetCursorPos(Form1.Left+100,Form1.Top+100);
    end;
    ...il y a un décalage vertical, apparemment dû à la hauteur de la barre de titre de la form, en plus d'un décalage sur les 2 axes, dû à l'épaisseur du filet de bordure, j'ai bien l'impression. Comment corriger les coordonnées pour que ça concorde à tous les coups (sur tous les systèmes)? - Merci de votre aide!

  2. #2
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Je n'ai pas bien compris ce que tu cherche à faire mais tu peux utiliser soit les méthodes ClientToScreen et ScreenToClient pour changer de repère, soit utiliser les propriété ClientWidth et ClientHeight qui te donnent la largeur et la hauteur de la zone cliente d'une fenêtre. Pour connaitre la taille des bordures, il ne reste qu'à soustraire ces 2 propriétés à Width et Height.

  3. #3
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Merci de m'avoir répondu aussi rapidement!

    Ce ne sont pas les dimensions de la form qui m'intérressent, mais plutôt sa position (essaye l'exemple pour te rendre compte du problème) -> La hauteur de la barre de titre et l'épaisseur du filet de bordure n'étant pas les mêmes sur toutes les configs, je ne vais pas m'amuser à mettre une constante pour réparer le décalage!

    J'ai trouvé la propriété "BorderWitdh" pour connaître l'épaisseur du filet, je vais vérifier son efficacité (si je change les paramètres d'affichage dans le panneau de config). Il reste qu'en même à trouver la hauteur de la barre de titre... Je sais plus où elle se trouve. Sinon, j'ai une autre idée, c'est de faire une fenêtre sans bordures ni de barre de titre, et les dessiner moi-même avec l'évènement "OnPaint"... Ouais, j'avoue que c'est pas terrible, et j'imagine qu'il ya plus simple! à+

  4. #4
    Membre habitué Avatar de gord's
    Inscrit en
    Avril 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 115
    Points : 127
    Points
    127
    Par défaut
    je ne sais pas si la hauteur de la barre de titre est dispo, mais tu peux la recalculer : la hauteur de la form c'est la hauteur de la zone client + 2 * le filet + la barre de titre

  5. #5
    Membre actif Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Points : 251
    Points
    251
    Par défaut
    Citation Envoyé par Pierre Castelain
    Je n'ai pas bien compris ce que tu cherche à faire mais tu peux utiliser soit les méthodes ClientToScreen et ScreenToClient pour changer de repère, soit utiliser les propriété ClientWidth et ClientHeight qui te donnent la largeur et la hauteur de la zone cliente d'une fenêtre. Pour connaitre la taille des bordures, il ne reste qu'à soustraire ces 2 propriétés à Width et Height.
    Si j'ai bien compris ce que tu veux faire, Pierre castelin a raison, teste ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    TRect MyRect;
    TPoint Origine;
    TPoint S;
     
    Origine.x = 100;
    Origine.y = 100;
     
    MyRect.Left=100;
    MyRect.Top=100;
    MyRect.Right=200;
    MyRect.Bottom=200;
    Form1->Canvas->Pen->Color=0xFF0000;
    Form1->Canvas->Brush->Color=0xFF0000;
    Form1->Canvas->FillRect(MyRect);
     
     
    S = ClientToScreen(Origine);
    SetCursorPos(S.x, S.y);
    Je l'ai fait sous BCB car je n'ai pas delphi sous la main mais c'est tout pareil
    Il me semble que ça fait ce que tu veux, il n'y a plus de pb de décalage.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 43
    Points : 52
    Points
    52
    Par défaut
    Comme le dit Pierre Castelain, il faut que tu utilises ClientToScreen et ScreenToClient, ce n'est pas la peine de faire des calculs compliqués avec l'épaisseur des bordures et la hauteur de la barre de titre.

    ClientToScreen transforme les coordonnées à l'intérieur de la zone client de ta fiche en coordonnées écran.
    Donc tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    var
     MyRect:TRect; 
     pPoint : TPoint
    begin
     MyRect.Left:=100; 
     MyRect.Top:=100; 
     MyRect.Right:=200; 
     MyRect.Bottom:=200; 
     Form1.Canvas.pen.Color:=$FF0000; 
     Form1.Canvas.brush.Color:=$FF0000; 
     Form1.Canvas.FillRect(MyRect); 
     pPoint.X:=100;
     pPoint.Y:=100;
     pPoint := ClientToScreen(pPoint);
     SetCursorPos(pPoint.X,pPoint.Y); 
    end;

    pffffffff, juste en même temps

  7. #7
    Membre actif Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Points : 251
    Points
    251
    Par défaut
    Sorry ça s'est joué à la seconde 8)

  8. #8
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Wouaw!

    J'allais me compliquer la vie inutilement! (je le savais)
    Je teste tout ça, et je reviens pour ajouter le tag...

    Merci beaucoups! à+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tablette graphique comme souris
    Par yapaf_oto dans le forum Périphériques
    Réponses: 0
    Dernier message: 01/01/2010, 13h38
  2. Décalage des événements souris
    Par gilouu dans le forum Qt
    Réponses: 2
    Dernier message: 25/09/2009, 09h32
  3. [débutant]Décalage curseur de souris sur canvas
    Par pingoui dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 18/03/2009, 17h57
  4. Problème pour déplacer un graphique à la souris
    Par Phelix2003 dans le forum Interfaces Graphiques
    Réponses: 26
    Dernier message: 23/10/2008, 16h58
  5. Décalage du pointeur de la sourie:
    Par Suryavarman dans le forum OpenGL
    Réponses: 2
    Dernier message: 24/05/2007, 03h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo