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

C++Builder Discussion :

Adapter un Form aux différentes résolutions d'écran


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 37
    Points
    37
    Par défaut Adapter un Form aux différentes résolutions d'écran
    Bonjour,

    Je m'étonne que cette question ne soit pas pas plus souvent abordée, ce qui me laisse à penser que je suis peut-être passé à côté de quelque chose de très simple (mais je n'ai pas l'impression...)

    J'écris une application qui doit malheureusement tourner sur des machines dotées d'écrans de résolutions assez différentes... Alors je sèche un peu sur les moyens d'adapter les forms à celles-ci. J'ai trouvé deux discussions mais qui finissent en queue de poisson... donc finalement je suis arrivé à bricoler ceci, qui marche pas mal:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    void __fastcall TIdentification::FormCreate(TObject *Sender)
    {
    //Caractéristiques de l'Ecran de référence avec lequel a été conçue la fiche
    int EcranReferLargeur=1024;
    int EcranReferHauteur=664;
     
    //Récupération des caractéristiques de l'écran sur lequel tourne l'application
    //Nota: en l'espèce, 1920x981
    int EcranActuelLargeur=Screen->Width;
    int EcranActuelHauteur=Screen->Height;
     
    //Détermination des nouvelles caractéristiques Hauteur/Largeur de la Fiche
    int NelleHauteur=Identification->Height*EcranActuelHauteur/EcranReferHauteur;
    int NelleLargeur=Identification->Width*EcranActuelLargeur/EcranReferLargeur;
    //290: Nombre magique empirique (valable uniquement pour 1920x981) sinon la largeur est trop grande !!!
    NelleLargeur=NelleLargeur-290;
     
    //Centrage Fiche
    Identification->Left=(EcranActuelHauteur-NelleHauteur)/2;
    Identification->Top=(EcranActuelLargeur-NelleLargeur)/2;
     
    //Application des nouvelles caractéristiques Hauteur/Largeur de la Fiche
    Identification->Width=NelleLargeur;
    Identification->Height=NelleHauteur;
     
    //Détermination du facteur d'agrandissement
    int FacteurAgr=((EcranActuelLargeur*EcranActuelHauteur)-(EcranReferLargeur*EcranReferHauteur))*100/(EcranReferLargeur*EcranReferHauteur);
     
    //29: Encore un nombre magique empirique... En l'espèce pour ramener FacteurAgr de 177 à 150 sinon l'intérieur du form est trop grand par rapport au Form !
    int m=FacteurAgr-29;
    int d=100;
    Identification->ScaleBy(m,d);
    Identification->Realign();
    }
    Le problème, c'est l'insertion de nombres magiques sortis de nulle part, que j'ai déterminés empiriquement et qui bien sûr ne fonctionneront que sur l'écran de test... Quelqu'un peut me dire pourquoi je m'y prends visiblement de travers ? Ou trouver la formule de calcul pour ces "nombres magiques" ? Merci d'avance !

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par blondelle Voir le message
    Salut pjtuloup
    C'est dans a FAQ
    Merci pour la réponse; oui, j'avais bien vu, mais je ne veux pas changer la résolution de l'écran de la machine d'exploitation pour l'adapter à la conception initiale de la fiche, je veux faire l'inverse, adapter la fiche à la résolution de l'écran...

    Dois-je comprendre que vous tous, c'est ce que vous faites en pratique: changer si besoin est la résolution d'écran des machines qui accueillent vos applications ? Evidemment c'est plus simple, mais bon, si l'utilisateur fait des coups de lat-tab entre des applis qui travaillent sur des résolutions différentes, il attrape le mal de mer

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Tu peu voir du cote de la propriete " Anchors " des composants, quand ils sont ancres les composants se redimensionnent avec la Form
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    Ok, merci je vais voir ça et ce que je peux faire avec... Mais c'est dommage que personne ne puisse me dire pourquoi ma méthode ne marche pas bien !

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 460
    Points : 24 877
    Points
    24 877
    Par défaut
    ScaleBy va effectuer un Zoom, cela agrandi toutes les proportions (Anchors et Align doivent être parfait pour que cela fonctionne bien), cela agrandi aussi la Font !

    Je te conseille la lecture de ce sujet Affichage soft correct avec l'agrandissement ergonomique W7

    Tu n'as pas compris l'intérêt des paramètres M et D du ScaleBy !
    Avant, lorsqu'il n'y avait que des résolutions 4/3, pas trop soucis, faut penser maintenant au 16/9 ou les rarissimes 22/7, il faut zoomer sur le plus petit ratio !

    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
    void __fastcall TIdentification::FormCreate(TObject *Sender)
    {
      int M, D;
      double RatioW = Screen->WorkAreaWidth / this->Width;
      double RatioH = Screen->WorkAreaHeight / this->Height;
      // On prend le plus petit ratio
      if (RatioW < RatioH)
      {
        M = Screen->WorkAreaWidth;
        D = this->Width;
      }
      else
      {
        M = Screen->WorkAreaHeight;
        D = this->Height;
      }
     
      this->ScaleBy(M, D);
      this->Realign();
    }
    //---------------------------------------------------------------------------
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    Merci Shai, je regarde !

  8. #8
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Personnellement j'utilise une technique plus lourde mais qui offre un meilleur rendu. Par contre ça implique d'y passer pas mal de temps. Pour chaque élément de ma fiche je détermine son comportement en cas d'agrandissement ou de réduction. Par exemple j'ai une application avec des graphiques et des boutons de part et d'autre. Dans le cas d'un agrandissement, je vais privilégier un grand graphique et je garde des boutons de taille semi identique.
    Tout est fait dans la méthode OnResize.
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 460
    Points : 24 877
    Points
    24 877
    Par défaut
    Le Zoom via ScaleBy, c'est surtout pour les clients qui passe d'un CRT 800x600 à un LCD 1280x960 et qui se plaigne d'avoir une application avec une écriture trop petite !

    En général, je privilégie l'agrandissement de la zone client sans zoom en gérant Align et Anchors !
    Le OnResize lui est par-contre exceptionnel lorsque Align ou Anchors n'ont pas le comportement souhaité (rarissime)

    Tout dépend de la cible utilisateur, un logiciel de compta, on va s'orienter sur le confort visuel donc Zoom\ScaleBy, pour un logiciel de graphisme ou industriel on va plutôt profiter du nouvel espace pour afficher plus d'élément

    Avec les nouveautés de Seven pour l'accessibilité et le zoom automatique, il faut prendre en compte d'éventuel effet de bord si l'on abuse de manipulation manuelle !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Site web adapté aux différentes résolutions écran
    Par ludivine49 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 19/11/2010, 02h44
  2. Adaptation d'un menu déroulant aux différentes résolutions
    Par pulsefight dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 15/10/2008, 17h56
  3. comment adapter site aux différentes résolutions encore un
    Par mexicanino dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 02/10/2008, 12h15
  4. comment adapter site aux différentes résolutions
    Par Invité(e) dans le forum Mise en page CSS
    Réponses: 33
    Dernier message: 02/10/2008, 00h13
  5. Réponses: 1
    Dernier message: 18/03/2006, 18h12

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