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:
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 !
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(); }
Partager