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

Windows Forms Discussion :

[C#]Discordence de dimensions


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Par défaut [C#]Discordence de dimensions
    Salut,
    ------

    En dessinant dans un contrôle, je me suis heurté par hasard à un phénomène curieux.

    Après quelques essais, j'ai écrit ceci dans la méthode OnPaint (gfx étant le Graphics de l'argument) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     gfx.DrawRectangle(Pens.Black, ClientRectangle);
    Je m'attendais à dessiner un rectangle de la taille du contrôle, mais en fait
    ceci dessine un rectangle dont il manque le côté droit et le côté inférieur, ce qui revient à dire qu'en fait le contrôle est plus petit que le rectangle.

    J'ai donc écrit ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gfx.DrawRectangle(Pens.Black, 0, 0, Width-1, Height-1);
    Cette fois, ça fonctionne et donc ça confirme la divergence de dimension.
    Restait à savoir si c'est le contrôle qui renvoie des dimensions trop petites ou si c'est DrawRectangle qui dessine un rectangle trop grand.

    J'ai donc testé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gfx.DrawRectangle(Pens.Black, 0, 0, 0, Height-1);
    Soit un rectangle de largeur nulle : je n'obtiens rien, donc "0" donne bien une largeur de 0.

    Ensuite ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gfx.DrawRectangle(Pens.Black, 0, 0, 1, Height-1);
    Et là, j'obtiens une barre verticale de largeur 2, donc "1" donne une largeur "2".

    Et évidemment ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gfx.DrawRectangle(Pens.Black, 0, 0, 2, Height-1);
    donne un rectangle composé d'un bord gauche de 1 pixel, d'une zone vide de 1 pixel, et d'un bord droit de 1 pixel, et donc un rectangle de largeur 3, et non 2.

    Quelqu'un a une idée, sachant que j'observe le même phénomène pour les autres fonctions de dessin, comme FillRectangle?
    Un problème d'arrondi?

    Merci,
    Claude

  2. #2
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Je pense que le rectangle n'est pas plus petit que le contrôle, mais comme tu dessine un rectangle de la taille du contrôle et ce, à l'intérieur du contrôle, afin de pouvoir le voir et que l'origine est située en haut à gauche, il est normal que les bords bas et droit n'apparaissent pas.

    Il faut donc, comme tu l'as fait, réduire la taille du rectangle de 1.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Par défaut
    Je comprends ce que tu me dis, mais ça ne m'explique pas pourquoi si je dessine un rectangle de largeur 2, j'obtiens en réalité un rectangle de largeur 3

    Mais en fait, je viens de comprendre que la largeur du rectangle qu'on indique n'est ni la largeur intérieure, ni la largeur extérieure, mais la largeur mesurée au niveau de la moitié de l'épaisseur du cadre extérieur.

    En procédant ainsi, mon rectangle de largeur 3 extérieur et 1 intérieur ferait en fait 2 de largeur "demandée".

    Et du coup, c'est normal qu'il ne tienne pas dans le contrôle, puisque si je lui donne la même taille, sa taille extérieure est supérieure de 1 pixel à la zone de dessin.

    Merci
    Claude

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

Discussions similaires

  1. [VB6] Dimension d'une fenetre extérieure
    Par Ingham dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 22/01/2003, 16h52
  2. [VB6] [Graphisme] Dimensions d'une image au saving
    Par jeanseb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/12/2002, 19h09
  3. Dimensions des colonnes d'un TDBGrid
    Par osmose22 dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/12/2002, 11h27
  4. Réponses: 4
    Dernier message: 03/12/2002, 16h47
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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