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

Langage Delphi Discussion :

Proportionnalité verticale horizontale écran.


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut Proportionnalité verticale horizontale écran.
    DELPHI 4 standard – WINDOWS XP

    Bonjour à tous,

    Je trace sur une TpaintBox de ma fiche un carré de hauteur 100 pixels et de largeur 100 pixels.

    Avec une résolution d’écran de 1280 x 720 ou 1280 x 1024 le carré apparaît bien comme un carré.

    Avec une résolution de 800 x 600 ou 1024 x 768 il apparaît en fait comme un rectangle dont la hauteur est légèrement plus grande que la largeur.

    J’ai essayé de déterminer quel est le coefficient liant la hauteur et la largeur effectives sur l’écran à l’aide de GETDEVICECAPS de l’API avec SCREEN.MONITORS[0] mais que ce soit avec ASPECTX ou ASPECTY ou HORZSIZE ou VERTSIZE j’obtiens tojours zéro.

    Rien trouvé à ce sujet dans les FAQs.

    Merci d’avance à qui pourra éclairer ma lanterne.

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 755
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 755
    Points : 13 349
    Points
    13 349
    Par défaut
    Citation Envoyé par Stevens.Georges Voir le message
    Avec une résolution d’écran de 1280 x 720 ou 1280 x 1024 le carré apparaît bien comme un carré.
    Sur un même écran, ce serait pour le moins étonnant
    Les moniteurs sont fait pour fonctionner à une résolution optimale et en changer entraîne forcément une déformation.

    De plus utiliser GetDeviceCaps pour récupérer les caractéristiques physiques d'un moniteur est pour le moins hasardeux.

    Note GetDeviceCaps reports info that the display driver provides. If the display driver declines to report any info, GetDeviceCaps calculates the info based on fixed calculations. If the display driver reports invalid info, GetDeviceCaps returns the invalid info. Also, if the display driver declines to report info, GetDeviceCaps might calculate incorrect info because it assumes either fixed DPI (96 DPI) or a fixed size (depending on the info that the display driver did and didn’t provide). Unfortunately, a display driver that is implemented to the Windows Display Driver Model (WDDM) (introduced in Windows Vista) causes GDI to not get the info, so GetDeviceCaps must always calculate the info.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut
    Merci de ta réponse.

    C'est pourtant bien avec le même moniteur.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 874
    Points : 11 363
    Points
    11 363
    Billets dans le blog
    6
    Par défaut
    Quid d'une fiche de réglage qui laisse l'utilisateur glisser un curseur jusqu'à obtenir le bon aspect ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut
    Merci Tourlourou.

    C'est évidemment une formule mais je préfèrerais quelque chose de plus élégant.

  6. #6
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 374
    Points : 3 150
    Points
    3 150
    Par défaut
    Bonjour,

    à part utiliser GetDevicecaps qui effectivement ne fonctionne pas à tout les coup, je ne vois pas comment tu peux faire. Chez moi cela marche bien avec :

    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
    19
    20
    21
    22
    23
    24
     
      type
          TPixDistXY = Record
             X: Double;
             Y: Double;
           end;
    ....
    { ================================================= }
    function Mesurer(const PixDistX, PixDistY:Integer) : TPixDistXY; // PixDistX est une mesure en pixels.
      var DC : HDC;
    begin
      DC        := GetWindowDc(0); // Obtenir contexte graphique de l'écran
      Result.X := PixDistX * GetDeviceCaps(DC,HORZSIZE) / GetDeviceCaps(DC,HORZRES);
      Result.Y := PixDistY * GetDeviceCaps(DC,VERTSIZE)  / GetDeviceCaps(DC,VERTRES);
    end;
    { ================================================= }
    procedure TF_Dessin.Button1Click(Sender: TObject);
      var aPixDistXY: TPixDistXY;
    begin
      aPixDistXY := Mesurer(Screen.Width, Screen.Height);
      Edit1.Text := FormatFloat('####.##" mm."',aPixDistXY.X) + ' x '
          +FormatFloat('####.##" mm."',aPixDistXY.Y);//Renverra, par ex : 410 mm. x 256 mm.
    end;
    { ================================================= }
    A+
    Charly

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut
    Bonjour et d'abord merci à tous ceux qui ont pris la peine de me répondre.

    J'ai repris très exactement la function Mesurer indiquée par Charly. En utilisant les dimensions de mon carré soit 100 x 100 j'obtiens :

    Résolution function Mesurer Mesuré sur mon écran

    1024 x 768 31.25 x 31.25 32.5 x 35 donc rectangle

    1280 x 1024 25 x 24.4 26.3 x 26.3 donc carré

    ce qui n'est évidemment pas du tout cohérent.

    En allant sur un autre site, j'y ai lu une remarque faisant état qu'avec certains écrans les pixels ne sont pas carrés, et je suis enclin à penser que c'est là la cause de mes résultats non cohérents.

    Mon problème n'est donc pas résolu mais merci encore quand même à tous.

  8. #8
    Membre confirmé
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Points : 534
    Points
    534
    Par défaut
    Bonjour,

    Il faut savoir que les mesures en millimètres sur un écran ne peuvent qu'être approximatives car la seule unité de mesure fiable d'un écran est le pixel (pas toujours carré).

    En revanche la méthode utilisant GetDeviceCaps est précise pour le canvas de l'objet Printer, et on peut donc dessiner en mm sur l'imprimante.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut
    Merci Caribensila de ta contribution.

    J'en déduis qu'il n'y a pas de méthode fiable en réponse à mon problème.

  10. #10
    Membre confirmé
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Points : 534
    Points
    534
    Par défaut
    Une solution serait que l'utilisateur étalonne lui-même son écran; quitte à prévoir une petite aide logiciel comparable à celle des moniteurs pour la couleur, le contrast, la fréquence, etc...

    L'opération étant très simple et se faisant une fois pour toutes c'est envisageable, et pourra même être considérée comme un gage de sérieux de la part de l'utilisateur. Enfin, je pense...

    De toute façon, il n'y a pas, à ma connaissance, d'autres solutions.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/09/2007, 10h45
  2. Centrer une image verticalement et horizontalement sur l'écran
    Par Thomus38 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 15/06/2006, 15h14
  3. Supprimer la scrollbar verticale mais pas l'horizontale
    Par Prue dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 18/07/2005, 11h24
  4. [CR.NET] mise en page Verticale et horizontale
    Par HULK dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 11/01/2005, 12h21
  5. VGA : synchro verticale (et horizontale ?)
    Par Blustuff dans le forum Assembleur
    Réponses: 19
    Dernier message: 21/06/2003, 08h46

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